2012-01-06 15 views
2

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

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(); 
} 

これは重要なことではありませんが、私の地形では、3次元ガウス分布にするコードがあります。

+1

スクリーンショットをご覧ください。 –

+2

固定機能を使用しても構いません。電話機でも使用されていなくても古いです。 – Puppy

+0

@DeadMGあなたがしたいのは、画面上に何かを得ることです。固定機能の廃止についての大きな点は、OpenGLをリーンで俊敏に(別のAPIと競合する必要があるように)作っていることですが、学習曲線を増やすためには多くのことがありました。あなたがスーパー・バイブルを買わない限り、もちろん)。 –

答えて

2

TRIANGLE_STRIPの説明はGoogle検索で見つかりました。 Wikipediaにイラストがあります。

私のアドバイスは、頂点データの最初の5つの頂点を印刷して紙に手で描くことです。 GL_LINESの作業が正しい頂点があることを示唆しているという事実は、間違った順序で描画するかもしれません。

もう1つのアドバイスは、backface cullingを無効にすることです。

glDisable(GL_CULL_FACE); 
+0

がこのようなシナリオでは最初に無効になるまで償却されませんでした。間違った方法であなたのvertsを巻いているように間違いなく聞こえる。 –

1

暗いところでランダムに刺すように、カリングはオンになっていますか?三角形の後ろが見えないので、三角形を描画していない可能性があります。コードを初期化、または単に削除

glDisable(GL_CULL_FACE); 

をあなたに:

glEnable(GL_CULL_FACE); 

あなたのinitコードから追加してみてください。