【发布时间】:2015-05-17 04:50:32
【问题描述】:
我目前正在学习 C++ 中的 GFLW 和 OpenGL,我遇到了一个非常奇怪的错误,我真的无法弄清楚它为什么会发生。我有两个顶点缓冲区,一个包含三角形的数据,另一个包含立方体的数据。当我为三角形创建顶点缓冲区并在没有为立方体创建顶点缓冲区的情况下绘制它时,它可以完美地工作并将预期的三角形绘制到窗口中。但是,如果我创建第二个顶点缓冲区并再次仅绘制三角形,它就会变形。
仅创建三角形顶点缓冲区时的输出:
同时创建三角形顶点缓冲区和立方体顶点缓冲区时的输出(从不使用立方体顶点缓冲区)
顶点缓冲区的构造函数
VertexBuffer(const GLvoid *data, GLsizeiptr size, GLenum mode, GLsizei count, GLsizei stride, ShaderInterface *shader, GLvoid *positionOffset, GLvoid *normalOffset);
创建两个顶点缓冲区:
VertexBuffer *vertexBuffer=new VertexBuffer(vertices,sizeof(vertices),
GL_TRIANGLES,
3,
sizeof(GL_FLOAT)*3,
shaderArray->at(0),
NULL,
NULL);
vertexBufferArray->push_back(vertexBuffer);
VertexBuffer *cubeVertexBuffer=new VertexBuffer(cubeVertices,
sizeof(cubeVertices),
GL_TRIANGLES,
36,sizeof(VertexDataPN),
shaderArray->at(1),
(GLvoid*)(offsetof(VertexDataPN,positionCoordinates)),
(GLvoid*)(offsetof(VertexDataPN,normalCoordinates)));
//vertexBufferArray->push_back(cubeVertexBuffer);
以及我的 Vertex Buffer 类的构造函数的内容:
glGenBuffers(1,&vertexBufferID);
glBindBuffer(GL_ARRAY_BUFFER,vertexBufferID);
glBufferData(GL_ARRAY_BUFFER,size,data,GL_STATIC_DRAW);
另外,我已经检查过它们的 vertexBufferID 是否不同。 Cube Vertex Buffer 在创建后就永远不会被使用或引用。如果有人知道为什么会发生这种情况,请告诉我。
【问题讨论】:
标签: c++ opengl render glfw vertex-buffer