尝试在OpenGL桌面中渲染多维数据集,但glVertexAttribPointer(...)
的参数对我不起作用。请求建议以使代码正常工作.Below是相关的代码段
注意:顶点着色器工作正常struct vertex{ GLfloat x,y,z; GLfloat tU,tV; }; float dim = 1.0f; vertex vertexData[] = { -dim, -dim, dim, 0.0f, 0.0f, dim, -dim, dim, 1.0f, 0.0f, dim, dim, dim, 1.0f, 1.0f, -dim, dim, dim, 0.0f, 1.0f, -dim, -dim, -dim, 0.0f, 0.0f, dim, -dim, -dim, 1.0f, 0.0f, dim, dim, -dim, 1.0f, 1.0f, -dim, dim, -dim, 0.0f, 1.0f, };
#define BUFFER_OFFSET(offset) ((void *)(offset)) g_vertexLocation = glGetAttribLocation(program, "vertexPosition"); glEnableVertexAttribArray(g_vertexLocation); glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID); glVertexAttribPointer(g_vertexLocation,3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
g_texCoordLocation = glGetAttribLocation(program, "in_texCoord"); glEnableVertexAttribArray(g_texCoordLocation); glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID); glVertexAttribPointer(g_texCoordLocation,2, GL_FLOAT, GL_FALSE, 5, BUFFER_OFFSET(3));
GLushort indexData[] = { 0,1,2, 0,2,3, 1,5,6, 1,6,2, 2,6,7, 2,7,3, 0,3,4, 3,7,4, 4,7,5, 5,7,6, 1,0,4, 1,4,5, }; glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,indexBufferID); int size; glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size); glDrawElements(GL_TRIANGLES, size/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
答案 0 :(得分:1)
缓冲区偏移量以字节为单位计算,因此步幅和位置需要乘以sizeof(float)
才能正确。
第一个stride
调用的glVertexAttribPointer
参数需要是5 * sizeof(float)
以及第二个调用:顶点组件位于属性缓冲区的每个5 * sizeof(float)
。