6

我想渲染一个索引几何。所以,我有一堆顶点和相关的序列索引。我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 );
4

2 回答 2

4

您可以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 );
于 2013-09-12T21:54:20.903 回答
0

当您使用索引时,您只需指定一次顶点值并将特定值分配给顶点。因此,在您的情况下,如果您想为两个四边形设置不同的颜色,则不能为索引为 0 和 3 的点分配不同的颜色。

由于点的数量较少,您可以使用 GLDrawArrays 并将值传递为

GLint 顶点[] = {

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 颜色[] = {

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, 顶点);

glDrawArrays(GL_QUADS, 0, 8);

于 2014-10-07T06:39:52.950 回答