RoCMe
14-03-2006, 19:50
Hey!
Ich schlag mich zur Zeit durch das Redbook. Mein erstes Problem hab ich jetzt bei der Beleuchtung: Ich habe das Beispiel von dort (eine beleuchtete Kugel) abgeändert. Die Kugel ist inzwischen ein einfaches Quadrat, das von einem Spotlight beleuchtet werden soll! Das Problem: Man sieht nicht, das es ein Spot Light ist :-( Egal, wie groß das Quadrat ist, es wird anscheinend immer ganz beleuchtet... Warum??? Was mache ich falsch?
Hier mal mein Code (-Ausschnitt):
void init(void) {
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 0.0 }; //Material
GLfloat mat_shininess[] = { 100.0 };
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
GLfloat light_position[] = { 0.0, 0.0, 0.5, 0.0 }; //Licht
GLfloat spot_direction[] = {0.0, 0.0, -1.0, 0.0};
GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 0.0, 0.0, 1.0, 1.0 };
GLfloat light_specular[] = { 0.0, 0.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 10.0);
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 10.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void) {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0, 0.0, -0.1);
glRotatef(angle, 0.0, 1.0, 0.0);
glScalef(2.0, 2.0, 2.0);
glBegin(GL_QUADS);
glVertex3f( -1.0, -1.0, 0.0);
glVertex3f( 1.0, -1.0, 0.0);
glVertex3f( 1.0, 1.0, 0.0);
glVertex3f(-1.0, 1.0, 0.0);
glEnd();
glFlush ();
}
Hoffe, ihr könnt mir helfen!!!
mfg RoCMe
Ich schlag mich zur Zeit durch das Redbook. Mein erstes Problem hab ich jetzt bei der Beleuchtung: Ich habe das Beispiel von dort (eine beleuchtete Kugel) abgeändert. Die Kugel ist inzwischen ein einfaches Quadrat, das von einem Spotlight beleuchtet werden soll! Das Problem: Man sieht nicht, das es ein Spot Light ist :-( Egal, wie groß das Quadrat ist, es wird anscheinend immer ganz beleuchtet... Warum??? Was mache ich falsch?
Hier mal mein Code (-Ausschnitt):
void init(void) {
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 0.0 }; //Material
GLfloat mat_shininess[] = { 100.0 };
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
GLfloat light_position[] = { 0.0, 0.0, 0.5, 0.0 }; //Licht
GLfloat spot_direction[] = {0.0, 0.0, -1.0, 0.0};
GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 0.0, 0.0, 1.0, 1.0 };
GLfloat light_specular[] = { 0.0, 0.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 10.0);
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 10.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void) {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0, 0.0, -0.1);
glRotatef(angle, 0.0, 1.0, 0.0);
glScalef(2.0, 2.0, 2.0);
glBegin(GL_QUADS);
glVertex3f( -1.0, -1.0, 0.0);
glVertex3f( 1.0, -1.0, 0.0);
glVertex3f( 1.0, 1.0, 0.0);
glVertex3f(-1.0, 1.0, 0.0);
glEnd();
glFlush ();
}
Hoffe, ihr könnt mir helfen!!!
mfg RoCMe