2

我正在使用以下代码渲染交错的 vbo,效果很好。

    glVertexPointer(3, GL_FLOAT, sizeof(InterleavedVertexData), (GLvoid*)((char*)0));
    glNormalPointer(GL_FLOAT, sizeof(InterleavedVertexData), (GLvoid*)((char*)0+3*sizeof(GLfloat)));
    glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(InterleavedVertexData), (GLvoid*)((char*)0+6*sizeof(GL_UNSIGNED_BYTE)));

当我将 glColorPointer 的指针参数更改为使用GLubyte时,我看不到屏幕上呈现的任何内容?我也在我的结构中将颜色定义为 GLubyte。

    glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(InterleavedVertexData), (GLvoid*)((char*)0+6*sizeof(GLubyte)));
4

2 回答 2

12

GLubyte是一种类型。GL_UNSIGNED_BYTE是一个整数常量,通常用于指示您将GLubyte在指针中传递 a。

sizeof(GLubyte)根据定义,始终为 1。Takesizeof(GL_UNSIGNED_BYTE)通常会返回 4 或 8,因为它是一个整数常量,并且其大小与系统的整数大小相同。

于 2012-10-13T16:51:20.097 回答
2

GL_UNSIGNED_BYTE是一个符号常量,而GLubyte是一个类型。GLubyte 通常实现为unsigned char; 您可以通过查看您的gl.h.

您应该GL_UNSIGNED_BYTE在 OpenGL 方法中使用来指定您传递的数据类型并用于GLubyte计算数据的大小。

于 2012-10-13T16:54:33.320 回答