5

Vertex Arrays を試していますが、何らかの理由で glDrawElements コマンドが何も描画しません。glBegin/glEnd と glDrawElements を間に使用して描画できますが、glDrawElements は機能しません。コード スニペットを次に示します。

これらの配列は、コンストラクターで設定されます。

double points[100];
GLint indices[50];

for (int i=0; i < 50; i++){
    points[2*i] = radius * cos(i*2*PI/50);
    points[2*i + 1] = radius * sin(i*2*PI/50);
    indices[i] = i;
}

glArrayElement でポイント配列のみを使用する作業コード:

void GLCircle::draw()
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_DOUBLE, 0, points);

    glBegin(GL_POLYGON);
    for (int i=0; i < 50; i++){
        glArrayElement(i);
    }
    glEnd();
}

また、ポイント配列、インデックス配列を介してアクセスされる特定のインデックスを使用する作業コード:

void GLCircle::draw()
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_DOUBLE, 0, points);

    glBegin(GL_POLYGON);
    for (int i=0; i < 50; i++){
        glArrayElement(indices[i]);
    }
    glEnd();
}

glDrawElements を使用しようとしている非動作コード:

void GLCircle::draw()
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_DOUBLE, 0, points);

    glDrawElements(GL_POLYGON, 4, GL_INT, indices);
}

何かアドバイス?今のところ使う必要はないのですが、使えないのが気になります…。

4

3 に答える 3

7

の 2 番目のパラメータはglDrawElementsですcountので4、インデックスの数 ( 50) ではないでしょうか?

于 2012-07-15T03:18:47.697 に答える
5

パラメータ

glDrawElements()

以下の通り.. :

最初の[ mode ] パラメータは、レンダリングするプリミティブの種類です。

2 番目の [ count ] パラメータは、レンダリングする要素の数にする必要があります。すなわち。頂点の数

3 番目の [ type ] パラメータは、4 番目のパラメータの値のタイプである必要があります。

 GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT or GL_UNSIGNED_INT

4 番目の [ index ] パラメータは、インデックスが格納されている場所へのポインタです。

詳細については、こちらをご覧ください。

于 2012-07-15T04:20:01.347 に答える
1

私はちょうど同じ問題に直面しました。

試すGL_UNSIGNED_INT

glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_INT, indices);
于 2014-04-09T09:05:16.443 に答える