我想渲染一个索引几何体。所以,我有一堆顶点和相关的序列索引。我使用glDrawElements()
渲染2个四边形,如下所示。现在,我知道我可以使用glColorPointer()
来指定每个顶点的颜色。
我的问题是:我可以指定每个基元的颜色吗?如果是,那我该怎么做这个索引几何?
static GLint vertices[] ={0,0,0,
1,0,0,
1,1,0,
0,1,0,
0,0,1,
0,1,1};
static GLubyte indices[]={0,1,2,3,
0,3,5,4}
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEXARRAY);
//glColorPointer(3, GL_FLOAT,0,colors);
glVertexPointer(3,GL_INT,0,vertices);
glDrawElements( GL_QUADS, sizeof( indices ) / sizeof( GLubyte ), GL_UNSIGNED_BYTE, indices );
答案 0 :(得分:3)
您可以使用glDrawElements()
和每顶点颜色,如下所示:
GLint vertices[] =
{
0,0,0,
1,0,0,
1,1,0,
0,1,0,
-1,1,0,
-1,0,0,
};
GLubyte colors[] =
{
255, 0, 0,
0, 255, 0,
0, 0, 255,
255, 255, 0,
255, 0, 255,
0, 255, 255,
};
GLubyte indices[]=
{
0,1,2,3,
0,3,4,5,
};
glEnableClientState( GL_COLOR_ARRAY );
glEnableClientState( GL_VERTEX_ARRAY );
glColorPointer( 3, GL_UNSIGNED_BYTE, 0, colors );
glVertexPointer( 3, GL_INT, 0, vertices );
glDrawElements( GL_QUADS, sizeof( indices ) / sizeof( GLubyte ), GL_UNSIGNED_BYTE, indices );
答案 1 :(得分:-1)
使用索引时,只指定一次顶点值并为顶点指定特定值。 所以在你的情况下你不能为索引为0和3的点分配不同的颜色,如果你想为两个四边形有不同的颜色。
由于点数较少,您可以使用GLDrawArrays并将值传递为
GLint vertices [] = {
0,0,0,
1,0,0,
1,1,0,
0,1,0,
0,0,0,
0,1,0,
-1,1,0,
-1,0,0
};
GLubyte colors [] = {
255, 0, 0,
255, 0, 0,
255, 0, 0,
255, 0, 0,
0, 0, 255,
0, 0, 255,
0, 0, 255,
0, 0, 255,
};
。 。
glColorPointer(3,GL_UNSIGNED_BYTE,0,颜色);
glVertexPointer(3,GL_INT,0,vertices);
glDrawArrays(GL_QUADS,0,8);