|

Einführung in OpenGL - Teil 13 - by Delax
Nach der ganzen Theorie das letzte Mal endlich die Umsetzung des ganzen. Wir fange lasch an und widmen uns erst einmal dem ambienten Licht.
Zunächst benötigen wir eine neue Variable für unser ambientes Licht. Wie vorher schon erwähnt wird eine Lichtquelle mit 4 Parametern definiert, also benötigen wir ein Array[0..3] of Real.
Dann folgen die ganzen Initialisierungen in der OpenGL_Init. Wenn ihr die Grundlagen durchgelesen habt, solltet ihr kein Problem mit den ganzen Begriffen und Abläufen haben. Am besten ihr lest parallel zu diesem Teil immer wieder quer in die Grundlagen.
glShadeModel(GL_SMOOTH); // Set Shading Model
AmbientLight[0] := 1.0; AmbientLight[1] := 1.0;
AmbientLight[2] := 1.0; AmbientLight[3] := 1.0;
glEnable(GL_LIGHTING);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @AmbientLight);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
Zuerst setzen wir das Shading Model, also die Art wie ein Schatten berechnet wird, auf GL_SMOOTH.
Dann setzen wir die Farbe bzw Intensität des ambienten Lichts fest. Es genügt in die Zellen des Arrays die Werte von 0.0 - 1.0 einzutragen.
Anschließend aktivieren wir die Beleuchtung von OpenGL. Da wir außer ambientem Licht keine richtige Lichtquelle haben, brauchen wir auch keine zu definieren, sondern nur das gewünschte AmbientLight. Mit glLightModelfv setzen wir die Belichtung fest. Als Parameter geben wir an das wir ambientes Licht wollen und verweisen auf unser Array, in dem die Parameter des Lichts selbst stehen.
Das Material aktivieren wir als nächstes. Mit glColorMaterial setzen wir die Eigenschaften und zwar das die Frontseite ambientes und diffuses Licht reflektiert.
Und das war es eigentlich auch schon. Da wir es nur mit ambientem Licht zu tun haben brauchen wir auch keine Position für unser Licht zu definieren und auch keine Normalen, da das Licht ja von allen Seiten kommt. Also zeichnen wir nur noch eine schöne Szene und rotieren das ganze.
PROCEDURE Draw_OpenGL;
begin
glClear(GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef( 0.0,-5.0,-50.0);
glRotatef( 80,-1.0, 0.0, 0.0);
glRotatef( rotation, 0.0, 0.0, 1.0);
glBegin(GL_QUADS);
glColor3f( 0.0, 0.0, 0.5 );
glVertex3f( 10.0,-10.0, 0.0);
glVertex3f( 10.0, 10.0, 0.0);
glVertex3f(-10.0, 10.0, 0.0);
glVertex3f(-10.0,-10.0, 0.0);
glEnd();
glTranslatef( 0.0, 0.0, 3.0);
glColor3f( 0.7, 0.0, 0.0 );
glBegin(GL_QUADS);
glVertex3f( 3.0,-3.0, 3.0);
glVertex3f( 3.0, 3.0, 3.0); // oben
glVertex3f(-3.0, 3.0, 3.0);
glVertex3f(-3.0,-3.0, 3.0);
glVertex3f( 3.0, 3.0,-3.0);
glVertex3f( 3.0, 3.0, 3.0); // rechts
glVertex3f( 3.0,-3.0, 3.0);
glVertex3f( 3.0,-3.0,-3.0);
glVertex3f(-3.0, 3.0, 3.0);
glVertex3f(-3.0, 3.0,-3.0); // links
glVertex3f(-3.0,-3.0,-3.0);
glVertex3f(-3.0,-3.0, 3.0);
glVertex3f( 3.0, 3.0, 3.0);
glVertex3f( 3.0, 3.0,-3.0); // hinten
glVertex3f(-3.0, 3.0,-3.0);
glVertex3f(-3.0, 3.0, 3.0);
glVertex3f( 3.0,-3.0,-3.0);
glVertex3f( 3.0,-3.0, 3.0); // vorne
glVertex3f(-3.0,-3.0, 3.0);
glVertex3f(-3.0,-3.0,-3.0);
glEnd();
end;
Den Source Code des Programms gibt es hier.. Ändert einmal die Helligkeit des Lichts und auch seine Farbe, um zu sehen was dann noch reflektiert wird und wie die Szene aussieht.
Delax/ Sundancer Inc.
[delax@sundancerinc.de]
Back to previous page
|