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です。これsizeof(GL_UNSIGNED_BYTE)は整数定数であり、システムの整数サイズと同じサイズであるため、通常、取得すると4または8が返されます。

于 2012-10-13T16:51:20.097 に答える
2

GL_UNSIGNED_BYTEはシンボリック定数でGLubyteあり、はタイプです。GLubyteは通常、unsigned char;のtypedefとして実装されます。あなたはあなたのを見てこれを確認することができますgl.h

GL_UNSIGNED_BYTEOpenGLメソッド内で使用して、渡すデータのタイプを指定し、データGLubyteのサイズを計算するために使用する必要があります。

于 2012-10-13T16:54:33.320 に答える