Seite 1 von 1

Beleuchtung in OpenGL

Verfasst: 12. Feb 2013 11:16
von MatthiasBein
Hallo,

im Framework der Praxisaufgabe fehlt die Initialisierung der Lichtquelle. Ein glEnable(GL_LIGHTING) ist damit nicht ausreichend, um eine geshadete Oberfläche zu bekommen. Fügt einfach folgende Zeilen in der Funktion initialize() ein:

// set shading model
glShadeModel(GL_SMOOTH);
// set lighting and material
GLfloat global_ambient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_ambient);
GLfloat ambientLight[] = { 0.1f, 0.1f, 0.1f, 1.0f };
GLfloat diffuseLight[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat specularLight[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat shininess = 128.0f;
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
glLightf(GL_LIGHT0, GL_SHININESS, shininess);
glEnable(GL_LIGHT0);
// enable use of glColor instead of glMaterial
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);

In der renderScene(), bevor ihr die Oberfläche zeichnet (z.B. direkt vor drawObjects()) dann folgende Zeilen:

// place light source
GLfloat lp[] = { 0.0f, 5.0f, 0.0f, 1.0f };
glLightfv(GL_LIGHT0, GL_POSITION, lp);

Damit sind die Parameter der Lichtquelle gesetzt, mit glColor3f() kann die Farbe der Dreiecke bestimmt werden und die Lichtquelle wird an (0, 5, 0) platziert.

Viele Grüße
Matthias Bein