OpenGL(使用GLSL)使用自定义顶点数据进行多维数据集渲染

时间:2013-11-30 11:26:11

标签: opengl

尝试在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);

注意:顶点着色器工作正常

1 个答案:

答案 0 :(得分:1)

缓冲区偏移量以字节为单位计算,因此步幅和位置需要乘以sizeof(float)才能正确。

第一个stride调用的glVertexAttribPointer参数需要是5 * sizeof(float)以及第二个调用:顶点组件位于属性缓冲区的每个5 * sizeof(float)