2017-06-26 2 views
-1

Ich habe Probleme, die Beleuchtung nur auf dem abfallenden Teil meines Bodens arbeiten zu lassen. Unten ist mein Code für den Boden und den Rückgang (es ist ein Graben zu machen):Beleuchtung funktioniert nicht in opengl

static void ground(double x, double y, double z, double dx, double dy, 
double dz){ 
float white[] = {1,1,1,1}; 
float Emission[] = {0.0,0.0,0.01*emission,1.0}; 
glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,shiny); 
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,white); 
glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,Emission); 
// Save transformation 
glPushMatrix(); 
// Offset, scale and rotate 
glTranslated(x,y,z); 
glScaled(dx, dy, dz); 

glEnable(GL_TEXTURE_2D); 
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); 

glBindTexture(GL_TEXTURE_2D, textures[2]); 
glBegin(GL_QUADS); 
glColor3f(0.5, 1.0, 0.5); 
glNormal3f(0,0,0); 
glTexCoord2f(0.0, 0.0); glVertex3f(-100, 0, -300); 
glTexCoord2f(300.0,0.0); glVertex3f(-100,0,300); 
glTexCoord2f(300.0,300.0); glVertex3f(-3,0,300); 
glTexCoord2f(0.0,300.0); glVertex3f(-3,0,-300); 
glEnd(); 

glBindTexture(GL_TEXTURE_2D, textures[2]); 
glBegin(GL_QUADS); 
glColor3f(1.0, 1.0, 0.5); 
glNormal3f(0,0,-1); 
glTexCoord2f(0.0, 0.0); glVertex3f(-2.99,0,-300); 
glTexCoord2f(300.0,0.0); glVertex3f(-2.99,0,300); 
glTexCoord2f(300.0,300.0); glVertex3f(-1,-1,300); 
glTexCoord2f(0.0,300.0); glVertex3f(-1,-1,-300); 
glEnd(); 

glBindTexture(GL_TEXTURE_2D, textures[2]); 
glBegin(GL_QUADS); 
glColor3f(1.0, 1.0, 0.5); 
glNormal3f(0,0,1); 
glTexCoord2f(0.0, 0.0); glVertex3f(0.99,-1,-300); 
glTexCoord2f(300.0,0.0); glVertex3f(0.99,-1,300); 
glTexCoord2f(300.0,300.0); glVertex3f(2.99,0,300); 
glTexCoord2f(0.0,300.0); glVertex3f(2.99,0,-300); 
glEnd(); 

glBindTexture(GL_TEXTURE_2D, textures[2]); 
glBegin(GL_QUADS); 
glColor3f(0.5, 1.0, 0.5); 
glNormal3f(0,0,0); 
glTexCoord2f(0.0, 0.0); glVertex3f(2.99, 0, -300); 
glTexCoord2f(300.0,0.0); glVertex3f(2.99,0,300); 
glTexCoord2f(300.0,300.0); glVertex3f(100,0,300); 
glTexCoord2f(0.0,300.0); glVertex3f(100,0,-300); 
glEnd(); 

glPopMatrix(); 

glDisable(GL_TEXTURE_2D); 

} 

So ist der Code der nicht Beleuchtung korrekt arbeitet die mittleren zwei Schnipsel ist hat „glBegin (GL_QUADS)“

+1

@BenSteffan Es ist für ein Klassenprojekt, also habe ich verwendet, was mir gesagt wurde zu verwenden. –

+0

Bearbeiten in [mcve]. – genpfault

+1

@RyanFasching Wurde Ihnen ausdrücklich gesagt, dass Sie diese Version von OpenGL verwenden sollen? Ben sagt nicht, dass OpenGL veraltet ist, er sagt, dass dieser Code speziell für eine alte Version von OpenGL ist. Verwenden Sie die neueste Version, es sei denn, Sie wurden ausdrücklich angewiesen, eine bestimmte Version zu verwenden. Bitte bearbeite auch deine Frage, um eine [mcve], sowie eine aktuelle Problembeschreibung - "Ich kann es nicht funktionieren" nutzlos zu machen. Was willst du tun? Was macht es stattdessen? In diesem Fall können Screenshots hilfreich sein. –

Antwort

1

Dies ist nur ein Beispiel von GIGO (garbage in, garbage out):

glNormal3f(0,0,0); 

Nein. Das ist kein gültiger Normalvektor und bricht jede Lichtberechnung vollständig.

Der nächste

glNormal3f(0,0,-1); 
glTexCoord2f(0.0, 0.0); glVertex3f(-2.99,0,-300); 
glTexCoord2f(300.0,0.0); glVertex3f(-2.99,0,300); 
glTexCoord2f(300.0,300.0); glVertex3f(-1,-1,300); 
glTexCoord2f(0.0,300.0); glVertex3f(-1,-1,-300); 

ist zumindest einige Nicht-Null-Vektor, aber es ist auf das Gesicht nicht normal Sie beschreiben, so dass die Beleuchtung wird nur falsch sein.

Verwandte Themen