Welcome to the new Friends-of-FPC!

Here you can find all kinds of information about the FreePascal Compiler. We have many tutorials and howtos as well as a selection of tools to help you with your programming. We also have some example codes for you. And if you want to contribute some information/ sources/ tools yourself you can do so.
Also we have finally relaunched the FoFPC forum. It's your chance for some Q&A about everything FreePascal.

Friends-of-FPC

Tutorials: Learn how to code with FreePascal.

Source Codes: A collection of examples, miscellaneous source codes and open source stuff.

Tools and Help Files: Intro- duction of some tools that might help you with FPC.

Community

Forum: Ask or answer questions about the FreePascal Compiler, programming or just babble about coding.

Contribute! Contribute your own Tutorial, Source Codes or Tools and send them to us!

Website

About: Information about Friends-of-FPC.org.

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

Useful Links









Link to us