我找不到有关在 JOGL 中呈现交错顶点数组(不是 VBO)的正确方法的任何信息。具体来说,使用 glVertexAttribPointer() 似乎不允许在交错数据(FloatBuffer)中指定偏移量。在 C、C++ 或 Objective-C 中,我确切地知道如何做到这一点,但在 Java 中似乎没有通向胜利的明确途径。
我尝试过的唯一看起来可能有效的方法是在使用 glVertexAttribPointer() 之前设置缓冲区的位置,但这没有效果。
为清楚起见,这里是渲染函数中的代码示例:
gl.glEnableVertexAttribArray( POSITION_ATTRIB );
gl.glEnableVertexAttribArray( NORMAL_ATTRIB );
gl.glVertexAttribPointer( POSITION_ATTRIB, 4, GL.GL_FLOAT, false, 32, vertexBuffer );
// vertexBuffer.position( 4 ); if I try to specify an offset
gl.glVertexAttribPointer( NORMAL_ATTRIB, 4, GL.GL_FLOAT, false, 32, vertexBuffer );
gl.glDrawArrays( GL.GL_TRIANGLES, 0, nummy );
gl.glDisableVertexAttribArray( NORMAL_ATTRIB );
gl.glDisableVertexAttribArray( POSITION_ATTRIB );
我为我拥有的每个属性使用 4 个浮点数。我选择了基于 32 的步幅
每个浮点 4 个字节 * 每个属性 4 个浮点 * 每个顶点 2 个属性。