0

頂点座標を明示的に定義した配列を使用して glBufferData を作成していますが、すべて正常に動作します。明示的に定義されていない配列を使用すると、同じ座標値を使用していますが、結果はまったく異なります。ドローコールは、異なる頂点の順序で物事をレンダリングします。

頂点は三角形のグリッドです。

正常に動作するコード 1:

this->graphics->createBuffers(1, vboIndexsID);
this->graphics->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, *vboIndexsID);
this->graphics->bufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*numIndexs, ind, GL_STATIC_DRAW);

this->graphics->createBuffers(1, vboVertexsID);
this->graphics->bindBuffer(GL_ARRAY_BUFFER, *vboVertexsID);

this->graphics->bufferData(GL_ARRAY_BUFFER, 300, quad_verts2, GL_STATIC_DRAW);

quad_verts2 は次のとおりです。

GLfloat quad_verts2[75] =
{
    0.0f,   0.0f, 0.0f, 
    0.0f,   0.0f, 100.0f, 
    0.0f,   0.0f, 200.0f, 
    0.0f,   0.0f, 300.0f, 
    0.0f,   0.0f, 400.0f, 
    100.0f, 0.0f, 0.0f, 
    100.0f, 0.0f, 100.0f, 
    100.0f, 0.0f, 200.0f, 
    100.0f, 0.0f, 300.0f, 
    100.0f, 0.0f, 400.0f, 
    200.0f, 0.0f, 0.0f, 
    200.0f, 0.0f, 100.0f, 
    200.0f, 0.0f, 200.0f, 
    200.0f, 0.0f, 300.0f, 
    200.0f, 0.0f, 400.0f, 
    300.0f, 0.0f, 0.0f, 
    300.0f, 0.0f, 100.0f, 
    300.0f, 0.0f, 200.0f, 
    300.0f, 0.0f, 300.0f, 
    300.0f, 0.0f, 400.0f, 
    400.0f, 0.0f, 0.0f, 
    400.0f, 0.0f, 100.0f, 
    400.0f, 0.0f, 200.0f, 
    400.0f, 0.0f, 300.0f, 
    400.0f, 0.0f, 400.0f
};

動作しないコード 2:

this->graphics->createBuffers(1, vboIndexsID);
this->graphics->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, *vboIndexsID);
this->graphics->bufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*numIndexs, ind, GL_STATIC_DRAW);

this->graphics->createBuffers(1, vboVertexsID);
this->graphics->bindBuffer(GL_ARRAY_BUFFER, *vboVertexsID);

this->graphics->bufferData(GL_ARRAY_BUFFER, 300, list, GL_STATIC_DRAW);

前とまったく同じですが、quad_vert2 の代わりにリスト データです。

リストは次のとおりです。

GLfloat list[75];
int j = 0;
for(int i=0;i<numVertexs;++i) {
    list[j] = v->coord.x;j++;
    list[j] = v->coord.y;j++;
    list[j] = v->coord.z;j++;
    ++v;
}

v のデータは、quad_vert2 とまったく同じ値です。

glBufferData の後、glGetError は常に 0 です。glGetBufferSubData を使用してバッファ内のデータを取得すると、値は同じになります。

アイデア?

前もって感謝します。

4

2 に答える 2

1

numVertexsあなたのバッファデータアップロード呼び出しは実際にはそれを使用していないので、私は の値を疑っています。sizeof (GLfloat) * 3 * numVertexsマジック ナンバーを使用せずに、バイト単位のデータをアップロードする必要があります300。両方の状況でその表現に置き換える300と、実際の問題が明らかになる可能性が高くなります。

于 2013-08-26T21:59:34.620 に答える
0

皆さん、ありがとうございました、

ここでの問題は、頂点の数が異なる 2 つのオブジェクトをレンダリングしていたことです。レンダリング時に、インデックス バッファを正しく割り当てるのを忘れていたため、openGL は最初のオブジェクトのインデックスを使用して 2 番目のオブジェクトを描画しようとしていました。

于 2013-09-08T10:15:16.860 に答える