我正在使用OpenGL创建一个应用程序,它在三维空间中绘制一些四边形平面。一切都工作正常,直到我开始为每个平面设置不同的顶点坐标。现在,当我创建一个具有新坐标的平面时,它被绘制为像以前创建的平面一样。换句话说,它的新坐标是使用的注释。
我正在使用OpenGL和Qt库。
void Plane::initBuffers()
{
mVertexVBO.create(); //QGLBuffer
mIndexVBO.create(); //QGLBuffer
mVertexVBO.bind();
mIndexVBO.bind();
mVertexVBO.setUsagePattern(QGLBuffer::StaticDraw);
mIndexVBO.setUsagePattern(QGLBuffer::StaticDraw);
/* mVertices and mIndices are a QVarLengthArray object */
Vertex* aVerts = mVertices.data();
for(int i=0; i<4; ++i)
{
qDebug() << aVerts[i].x << " " << aVerts[i].y << " " << aVerts[i].z;
}
qDebug() << " --- ";
mVertexVBO.allocate(mVertices.data(), sizeof(Vertex)*4);
mIndexVBO.allocate(mIndices.data(), sizeof(GLuint)*6);
}
我创造了2架飞机。默认情况下,每个都使用以下坐标创建:
-1 -1 0
-1 1 0
1 1 0
1 -1 0
我将第一个平面的坐标更改为
1 0 0
0 0 0
0 0 1
1 0 1
但是,这些飞机的绘制方式完全相同。只是在不同的地方,因为我改变了他们的模型矩阵。 QVarLengthArray正确更新(上面的代码执行显示了我)。
有人知道我错过了什么?
答案 0 :(得分:2)
问题解决了!实际上,没有与维管组有关的问题......我只是没有更新法线而我的飞机(正如预期的那样)完全黑暗(看不见)。希望没有人在这个问题上思考过......抱歉! = d