我正在尝试让以下代码正常工作:
GLfloat *vbuffer = new GLfloat[24] {
0,0,0,
10,0,0,
0,10,0,
0,0,10,
10,10,0,
10,0,10,
0,10,10,
10,10,10
};
GLubyte *cbuffer = new GLubyte[32] {
255,0,0,255,
0,255,0,255,
0,0,255,255,
255,255,0,255,
255,0,255,255,
0,255,255,255,
0,0,0,255,
255,255,255,255
};
GLuint *ibuffer = new GLuint[24] {
0,1,4,2,
0,2,6,3,
0,3,5,1,
1,4,7,5,
5,7,6,3,
2,6,7,4
};
//...
glColor4f(1,1,1,1);
glEnableClientState(GL_VERTEX_ARRAY | GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, cbuffer);
glVertexPointer(3, GL_FLOAT, 0, vbuffer);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, ibuffer);
glDisableClientState(GL_VERTEX_ARRAY | GL_COLOR_ARRAY);
Run Code Online (Sandbox Code Playgroud)
未绘制所需的立方体,而用 绘制的坐标轴glVertex3f始终出现。
当我删除GL_COLOR_ARRAYfrom时glEnableClientState,立方体将按照指示完全绘制为白色。
我究竟做错了什么?为什么 glColorPointer 的东西不起作用?
系统:
一般来说,如果它不采用GL_..._BIT名称中的形式,则不能将其二进制组合OR在一起以产生有意义的内容。
glEnableClientState (GL_VERTEX_ARRAY);
glEnableClientState (GL_COLOR_ARRAY);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,禁用确实没有意义GL_VERTEX_ARRAY。如果没有顶点位置,您就无法绘制任何东西,因此该状态通常在应用程序初始化时启用,并且从未触及。