1

OpenGL を使用して、3 次元空間にクワッド プレーンを描画するアプリケーションを作成しています。各平面に異なる頂点座標を設定し始めるまで、すべてが正常に機能していました。これで、新しい座標で平面を作成すると、以前に作成した平面のように描画されます。つまり、その新しい座標が使用されていることに注意してください。

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 に答える