OpenGL - 网格索引

作者: li_礼光 | 来源:发表于2017-05-19 17:17 被阅读380次

《OpenGL ES 应用开发实践 iOS版》中第六章,关于网格索引的理解 :

使用索引来绘制三角形的话,一般都是以逆时针方向来绘制.
以下的绘制顺序是(0,1,2)(2,1,3)


逆时针绘制 网格

对于这种网格类的图形,如何使用索引来描绘呢?

关于书上的解释 :

使用索引顶点 绘制

罗列出顶点数据排布的样式:


顶点排布

发现索引数组中的排布方式(看上图)
{0,4,1,5,2,6,3,7,......,13,17,12,16}

逆时针的方式


索引的布局方式

所以设置索引的方式


添加索引

代码的实现方式.

// 传入一个索引数组,根据宏定义的行列来设定索引数组的方式
void SceneMeshInitIndices(GLushort meshIndices[NUM_MESH_INDICES])
{
   int    currentRow = 0;
   int    currentColumn = 0;
   int    currentMeshIndex = 0;
   
   // 从1开始,因为算法在开始时返回一个索引
   currentMeshIndex = 1;  
   
   for(currentColumn = 0; currentColumn < (NUM_MESH_COLUMNS - 1);currentColumn++)
   {
    
      if(0 == (currentColumn % 2))
      { //这是一个偶数列
         currentMeshIndex--; // 返回:覆盖重复的顶点
         
         for(currentRow = 0; currentRow < NUM_MESH_ROWS; currentRow++)
         {
            meshIndices[currentMeshIndex++] =  currentColumn * NUM_MESH_ROWS + currentRow;
            meshIndices[currentMeshIndex++] = (currentColumn + 1) * NUM_MESH_ROWS + currentRow;
         }
      }else{ // 这是一个奇数列
         currentMeshIndex--; // 返回:覆盖重复的顶点
         
         for(currentRow = NUM_MESH_ROWS - 1; currentRow >= 0;currentRow--)
         {
            meshIndices[currentMeshIndex++] =  currentColumn * NUM_MESH_ROWS + currentRow;
            meshIndices[currentMeshIndex++] = (currentColumn + 1) * NUM_MESH_ROWS + currentRow;
         }
      }
   }
 
   NSCAssert(currentMeshIndex == NUM_MESH_INDICES, @"Incorrect number of indices intialized.");
}
#define NUM_MESH_ROWS (20)     // Must be at least 2            行
#define NUM_MESH_COLUMNS (40)  // Must be at least 2            列

相关文章

  • OpenGL - 网格索引

    《OpenGL ES 应用开发实践 iOS版》中第六章,关于网格索引的理解 : 使用索引来绘制三角形的话,一般都是...

  • 空间索引之网格索引

    网格索引策略一、 通过对全球以一定尺寸进行划分成一个个的小格子,然后对格式进行编号(具体的编号策略也就显示了使用者...

  • OpenGL ES 案例05:GLSL使用索引绘图

    OpenGL + OpenGL ES +Metal 系列文章汇总 本案例的主要目的是理解GLSL中如何索引绘图 本...

  • 使用索引绘图(转)

    文章转至 OpenGL学习脚印: 使用索引绘图(index drawing) 通过本节可以了解到 索引绘图使用方法...

  • OpenGL综合案例

    实现效果 学习OpenGL也有一段时间了。今天使用三个批次类来完成一个球体世界的demo; 球体世界网格层面 网格...

  • OpenGL ES 索引绘图

    传统绘图与索引绘图的区别 我们使用传统的数组绘制方式绘制一个立方体时,可能每个面使用6个顶点(绘制两个三角形),其...

  • OpenGL ES 索引绘图

    EBO即Element Buffer Objects,用来存储绘制物体的索引。所谓索引就是对顶点属性数组中元素的一...

  • OpenGL ES 案例07:GLSL使用索引绘图 + 纹理颜色

    本案例是在OpenGL ES 案例05:GLSL使用索引绘图[https://www.jianshu.com/p/...

  • OpenGL ES 案例08:GLKit使用索引绘图 + 纹理颜

    本案例是在OpenGL ES 案例06:GLKit使用索引绘图[https://www.jianshu.com/p...

  • GLSL实现纹理与颜色混合

    OpenGL ES 索引绘图 - 简书 上文介绍了使用索引绘图绘制金字塔案例,本文基于金字塔案例的基础上,使用GL...

网友评论

    本文标题:OpenGL - 网格索引

    本文链接:https://www.haomeiwen.com/subject/pswyxxtx.html