2 Stimmen

Unsichtbares Terrain

Ich verwende GL_TRIANGLE_STRIP, um mein Terrain auf dem Bildschirm zu zeichnen, aber wenn ich das Programm kompiliere und ausführe, erhalte ich nichts. Wenn ich GL_TRIANGLE_STRIP in GL_LINES ändere, wird es angezeigt und funktioniert. Was kann ich tun, damit es mit GL_TRIANGLE_STRIP funktioniert?

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

Ich bin mir nicht sicher, ob das wichtig ist, aber für mein Terrain habe ich Code, der es zu einer 3D-Gauß-Verteilung macht.

2voto

Christian Neverdal Punkte 5235

Eine Erklärung von TRIANGLE_STRIP findet sich bei einer Google-Suche. Es gibt eine Illustration auf Wikipedia .

Ich rate Ihnen, die ersten fünf Scheitelpunkte Ihrer Scheitelpunktdaten auszudrucken und sie von Hand auf Papier zu zeichnen. Die Tatsache, dass GL_LINES funktioniert, deutet darauf hin, dass die richtigen Scheitelpunkte vorhanden sind, Sie könnten sie nur in der falschen Reihenfolge zeichnen.

Ein weiterer Ratschlag ist die Deaktivierung von Entfernen der Rückseiten .

glDisable(GL_CULL_FACE);

1voto

Liam M Punkte 5146

Nur mal so aus dem Stegreif: Haben Sie das Culling aktiviert? Es kann sein, dass keine Dreiecke gezeichnet werden, weil die Rückseite der Dreiecke unsichtbar ist. Versuchen Sie, hinzuzufügen:

glDisable(GL_CULL_FACE);

Zu Ihrem Init-Code, oder einfach entfernen:

glEnable(GL_CULL_FACE);

Von Ihrem Init-Code.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X