2

GL_TRIANGLE_STRIP を使用して地形を画面に描画していますが、プログラムをコンパイルして実行しても何も得られません。GL_TRIANGLE_STRIP を GL_LINES に変更すると、表示されて機能します。GL_TRIANGLE_STRIP で動作させるにはどうすればよいですか?

void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -10.0f);
glRotatef(30.0f, 1.0f, 0.0f, 0.0f);
glRotatef(-_angle, 0.0f, 1.0f, 0.0f);

GLfloat ambientColor[] = {.5, .5, .5, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor);
float scale = 5.0f / max(63.0,63.0);
glScalef(scale, scale*10, scale);
glTranslatef(-(float)(63.0) / 2, 0.0f, -(float)(63.0) / 2);
     /*GLfloat lightColor0[] = {0.6f, 0.6f, 0.6f, 1.0f};
     GLfloat lightPos0[] = {-0.5f, 4, 32, 0.0f};
     glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0);
     glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);*/



glColor3f(0.3f, 0.9f, 0.0f);
for(int x = 0;x<64;x++){
    glBegin(GL_LINES);
    for(int z = 0;z<63;z++){
        glNormal3f(0,1,0);
        Vertex(x,map[x][z],z);
        Vertex(x,map[x][z+1],z+1);
    }
    glEnd();
}
for(int z = 0;z<64;z++){
    glBegin(GL_LINES);
    for(int x = 0;x<63;x++){
        Vertex(x,map[x][z],z);
        Vertex(x+1,map[x+1][z],z);
    }
    glEnd();
}

これが重要かどうかはわかりませんが、私の地形では、3D ガウス分布にするコードがあります。

4

2 に答える 2

2

TRIANGLE_STRIP の説明は、Google 検索で見つかります。ウィキペディアにイラストがあります。

私のアドバイスは、頂点データの最初の 5 つの頂点を印刷して、紙に手書きすることです。GL_LINES が機能するという事実は、正しい頂点がそこにあることを示唆しています。それらを間違った順序で描画している可能性があります。

もう 1 つのアドバイスは、背面カリングを無効にすることです。

glDisable(GL_CULL_FACE);
于 2012-01-06T01:28:23.110 に答える
1

暗闇でのランダムな刺し傷として、カリングをオンにしていますか? 三角形の後ろが見えないため、三角形を描いていない可能性があります。追加してみてください:

glDisable(GL_CULL_FACE);

コードを初期化するか、単に削除するには:

glEnable(GL_CULL_FACE);

あなたの初期コードから。

于 2012-01-06T01:30:50.703 に答える