# OpenGL编程指南6：顶点数组

19 篇文章 10 订阅

## 2.顶点数组对几何图形渲染步骤

### 1.激活/启用最多可达8个数组

array指定了需要启用的数组。其参数可以是下面常量：GL_VERTEX_ARRAY / GL_COLOR_ARRAY / GL_SECONDARY_COLOR_ARRRAY / GL_INDEX_ARRAY / GL_NORMAL_ARRAY / GL_FOG_COORDINATE_ARRAY / GL_TEXTURE_COORD_ARRAY / GL_EDGE_FLAG_ARRAY.

glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
GLfloat vertices[]={0.25,0.25,
0.75,0.25,
0.75,0.75,
0.25,0.75};
GLfloat colors[]={1.0, 0.0, 0.0,
1.0, 1.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0};
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(2,GL_FLOAT,0,vertices);
glColorPointer (3,GL_FLOAT,0,colors);
glBegin(GL_POLYGON);
glArrayElement(0);
glArrayElement(1);
glArrayElement(2);
glArrayElement(3);
glEnd();

glFlush();
}  

### 3.绘制几何图形

 glBegin(GL_POLYGON);
glArrayElement(0);
glArrayElement(2);
glArrayElement(3);
glEnd(); 

## 3.重启图元

for (int i = 0; i < num_objects; i++) {
glDrawArrays(GL_TRIANGLES,
object[n]->first_vertex,
object[n]->vertex_count);
}

### 3.2 执行过程

glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
Fixed index就代表了使用固定的重启的标志，具体数值和indices内数据类型有关。glDrawElements 的indices参数类型必须是以下的一种：GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT. 那么分别对应的重启的标志就是 2^8 - 1;2^16 - 1;2^32 - 1;也就是說重启的标志的数值就是indices数组所能允许的最大值。这个值一般来说是不会被用到的，拿来当标志正好。

// Prepare index buffer data (not shown: vertex buffer data, loading vertex and index buffers)
GLushort indexData[11] = {
0, 1, 2, 3, 4,    // triangle strip ABCDE
0xFFFF,           // primitive restart index (largest possible GLushort value)
5, 6, 7, 8, 9,    // triangle strip FGHIJ
};
// Draw triangle strips
glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
glDrawElements(GL_TRIANGLE_STRIP, 11, GL_UNSIGNED_SHORT, 0);

## 4.参看资料

[1].Primitive Restart Makes GPGPU Tech Sparkle
[2].Combining Drawing Functions, Combining Geometry Using Primitive
[3].TechniquesforWorkingwithVertexData

• 1
点赞
• 4
收藏
觉得还不错? 一键收藏
• 0
评论
12-16 197
07-05 2018
12-16 975
08-11 2056
01-24 500
01-09 925
10-20 131
03-08 934
03-13 4803
03-30 4118
02-25 4086
09-09 3310

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。