VBO没有使用QGLBuffer进行更新

时间:2012-07-04 00:14:11

标签: qt opengl

我正在使用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正确更新(上面的代码执行显示了我)。

有人知道我错过了什么?

1 个答案:

答案 0 :(得分:2)

问题解决了!实际上,没有与维管组有关的问题......我只是没有更新法线而我的飞机(正如预期的那样)完全黑暗(看不见)。希望没有人在这个问题上思考过......抱歉! = d