Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 10:37

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Es werde Licht
BeitragVerfasst: Mo Jul 12, 2004 16:26 
Offline
DGL Member

Registriert: Fr Jul 02, 2004 14:26
Beiträge: 32
Hi, ich hab mir nun die Einsteiger Tuts durchgelesen und bin auch grössten teils ohne probleme durchgestiegen, an dieser Stelle nochmal vielen dank an Phobeus.

Aber was mir bis jetzt ein rätsel geblieben ist, ist das licht.

Ich habe ein prgramm das eine fläche in der X-Y ebene zeichnet.
Zusätlich kann man die fläche um ihre Y und X Achse drehen, wenn ich die fläche nun von hinten betrachte, so wird sie dunkel. Ich hab den Code so zusammengebastelt wie in der Lektion beschrieben um eine Kameralampe zu haben. Dazu kommt dass der lichtkegel irgendwie nicht geradeaus von der Cam ausgeht sondern etwas schräg nach unten.

Code:
  1. procedure glDraw;
  2. var xkord, ykord :integer;
  3. begin
  4.  
  5.   glClearColor(0,0,0,0);
  6.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.  
  8.   glLoadIdentity;
  9.    glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  10.     glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  11.     glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  12.     glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  13.  
  14.     glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  15.     glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  16.     glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  17.  
  18.  
  19.     glEnable(GL_LIGHTING);
  20.     glEnable(GL_LIGHT0);
  21.  
  22.  
  23.  
  24.  
  25.  
  26.   glTranslatef(0,0,-40);
  27.   glrotatef(a,1,0,0);
  28.   glrotatef(b,0,1,0);
  29.   gltranslatef(0,c/10,0);
  30.   glTranslatef(-20,20,0);
  31.  
  32. for xkord := 0 to 100 do
  33.  begin
  34.  
  35.   for ykord := 0 to 100 do
  36.    begin
  37.  
  38.     glbegin(GL_QUADS);
  39.     glLineWidth(10);
  40.     glTexCoord2f(((1/texturbreite)*xkord)-(1/texturbreite),(1/texturbreite)*ykord);                    glVertex3f(-0.25,0.25,sin(myquads[xkord,ykord]*pi/180)/3);
  41.     glTexCoord2f(((1/texturbreite)*xkord)-(1/texturbreite),((1/texturbreite)*ykord)-(1/50.5));         glVertex3f(-0.25,-0.25,sin(myquads[xkord,ykord+1]*pi/180)/3);
  42.     glTexCoord2f((1/texturbreite)*xkord,((1/texturbreite)*ykord)-(1/texturbreite));                    glVertex3f(0.25,-0.25,sin(myquads[xkord+1,ykord+1]*pi/180)/3);
  43.     glTexCoord2f((1/texturbreite)*xkord,(1/texturbreite)*ykord);                                       glVertex3f(0.25,0.25,sin(myquads[xkord+1,ykord]*pi/180)/3);
  44.  
  45.     glEnd();
  46.  
  47.     glTranslatef(0,-0.5,0);
  48.    end;
  49.   glTranslatef(0.5,50.5,0);
  50.  end;
  51.  
  52.  
  53.  
  54. end;


So.
Wäre auch nett wenn ihr die Codestruktur etwas bewerten würdet, sprich ob ich gut strukturiert hab, oder ob ich was ändern sollte...auch wenns n recht kleines programm ist.

Danke, cYa...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 12, 2004 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Ich sehe nirgends, dass du deine Normalen übergibst. Da deine gesamte Fläche wie du sagtest in der XY-Ebene liegt reicht ein Aufruf von glNormal3f(0, 0, 1) aus.

Die Codestruktur finde ich leicht unübersichtlich. Du könntest das ganze etwas optimieren und damit übersichtlicher gestalten:

Da du immer das selbe Material und Licht verwendest kannst du die ganzen glMaterial*, glLight* und die beiden glEnable auslagern, indem du sie nur einmal nach der Initialisierung der OpenGL aufrufst. Gleiches gilt für glClearColor.

Damit sieht die Zeichenprozedur schon sehr viel übersichtlicher aus. Aber das ist alles Geschmackssache.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]