Beleuchtung in OpenGL

Moderator: Geometrische Methoden des CAD/CAE

MatthiasBein
Moderator
Moderator
Beiträge: 130
Registriert: 15. Jun 2009 16:42

Beleuchtung in OpenGL

Beitrag von MatthiasBein » 12. Feb 2013 11:16

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

Zurück zu „Geometrische Methoden des CAD/CAE“