1

我正在使用 OpenGL 创建一个应用程序,它在三维空间中绘制一些四边形平面。一切正常,直到我开始为每个平面设置不同的顶点坐标。现在,当我创建一个具有新坐标的平面时,它的绘制就像以前创建的平面一样。换句话说,它的新坐标正在被使用。

我正在使用带有 Qt 库的 OpenGL。

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 已正确更新(上面的代码执行向我展示了这一点)。

有人知道我错过了什么吗?

4

1 回答 1

2

问题解决了!实际上,没有与 VBO 相关的问题......我只是没有更新法线,我的飞机(如预期的那样)完全黑暗(不可见)。希望没有人浪费时间思考这个问题......对不起!=D

于 2012-07-04T02:10:34.907 回答