gpt4 book ai didi

c++ - OpenGL 不绘制启用 GL_COLOR_ARRAY 的四边形

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:16 24 4
gpt4 key购买 nike

我正在尝试让以下代码正常工作:

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);

没有绘制所需的立方体,而始终显示使用 glVertex3f 绘制的坐标轴。

当我从 glEnableClientState 中删除 GL_COLOR_ARRAY 时,立方体按照指示绘制为完全白色。

我做错了什么?为什么 glColorPointer 的东西不起作用?


系统:

  • Kubuntu 13.04,64 位
  • 英特尔高清显卡 3000
  • OpenGL 3.0 (Mesa 9.1.7)

最佳答案

数组标识符不是位掩码。

一般来说,如果它的名称中没有采用 GL_..._BIT 的形式,则您无法通过二进制OR 将其组合在一起产生有意义的东西。

要正确执行此操作,您需要:

glEnableClientState (GL_VERTEX_ARRAY);
glEnableClientState (GL_COLOR_ARRAY);

顺便说一下,禁用 GL_VERTEX_ARRAY 真的没有意义。您无法在没有顶点位置的情况下绘制任何东西,因此该状态通常在应用程序初始化时启用并且永远不会被触及。

关于c++ - OpenGL 不绘制启用 GL_COLOR_ARRAY 的四边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23724524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com