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

Aktuelle Zeit: Fr Jul 18, 2025 14:24

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Normalen anzeigen? [Gelöst]
BeitragVerfasst: Mo Jan 02, 2006 22:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
Hallo zusammen!

Ich habe mit viel Begeisterung die Tutorials hier auf der Seite durchgelesen und muss sagen das sie, auch wenn ich nicht in Delphi programmiere, wirklich brauchbar sind! Nun zu meinem Problem: Ich habe ein Model das ich aus einem Textfile lade. Dort sind allerdings keine Normals angegeben, so das ich sie selber ausrechnen muss. Dies hab ich getan und diese mit glNormal3f() an OpenGL übergeben. Dann habe ich ein Licht in die Szene eingefügt. Zwar beleuchtete diese das Model nun, doch irgendwie scheinen die Polygone auf der Rückseite des Models in die Falsche Richtung zu zeigen weil bei einer Rotierung des Models dort nur das AbientLight zu sehen ist. Dann habe ich das Backfaceculling eingeschaltet um meinen Verdacht zu bestätigen. Normalerweise sollten doch alle nicht sichtbaren Polygone (Zumindest deren Rückseite) nicht angezeigt werden... Wenn ich nun in das Model "hineingehe" sehe ich aber trozdem die Rückseite nicht. Demnach sollten aber die Normals richtig sein, oder?!

Nachdem meine Verwirrung nun komplett war wollte ich mir die Normals mit GL_LINE anziegen lassen. Nur leider funktioniert es nicht. (Es wird nichts anzeigt, nur das Model selbst)
Dies ist der Code: (Ich hoffe das er auch für Delphileute verständlich ist ;-))
Code:
  1.        
  2. gl.glBegin( GL.GL_LINE );
  3. gl.glColor3f( 1.0f, 0.0f, 0.0f );
  4.            
  5. gl.glVertex3f( vertices[0].getXPos(), vertices[0].getYPos(), vertices[0].getZPos() );
  6. Vector v = HeavenMath.addVector( vertices[0], currentPolygon.getNormal() );
  7. gl.glVertex3f( v.getX(), v.getY(), v.getZ() );
  8.  
  9. gl.glVertex3f( vertices[1].getXPos(), vertices[1].getYPos(), vertices[1].getZPos() );
  10. Vector v2 = HeavenMath.addVector( vertices[1], currentPolygon.getNormal() );
  11. gl.glVertex3f( v2.getX(), v2.getY(), v2.getZ() );
  12.  
  13. gl.glVertex3f( vertices[2].getXPos(), vertices[2].getYPos(), vertices[2].getZPos() );
  14. Vector v3 = HeavenMath.addVector( vertices[2], currentPolygon.getNormal() );
  15. gl.glVertex3f( v3.getX(), v3.getY(), v3.getZ() );
  16. gl.glEnd();
  17.  


Ist das der Richtige weg? Gibt es noch andere Möglichkeiten wieso das Licht so komisch ist?
Vielen dank im Vorraus,
-Malax


Zuletzt geändert von Malax am Di Jan 03, 2006 00:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 02, 2006 23:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

um die Normalen anzuzeigen musst du GL.GL_LINES statt GL.GL_LINE verwenden. Gut wäre auch noch vor dem Zeichnen der Normalen die Beleuchtung kurzzeitig auszustellen.
Hoffe das hilft dir ein bisschen...

Du musst auch beachten, dass die Normalen nur eine Länge von 1 haben, eventuell müsstest du die Länge der Vektoren bei der Anzeige noch ein wenig vergrössern.

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 02, 2006 23:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
*plong* Vielen Dank! :roll:
Kein Wunder das nix angezeit wird, wenn ich was falsches Zeichne. :-)
Scheinbar sind die Normals in Ordnung, doch leider stimmt da was mit dem Licht nicht. Ganz komische Geschichte.
Aber vielen Dank erstmal, das hat mir schon sehr geholfen.

-Malax


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 03, 2006 00:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
Ich habs nun geschafft das alles so ist wie es sein sollte. Für den fall das jemand das selbe Problem später noch einmal haben sollte schreibe ich hier noch kurz wie ich es gelöst hab.

Nachdem ich die Normals anzeigte stellte ich bei meinem Model keine Fehler fest, als ich dann eine Kugel lud zeigte sich der Fehler: Die Normals schienen sich wie ein Ring um die Kugel zu legen. Das Problem war meine Methode mir der ich das Kreuzprodukt ausrechnete. Dort hatte ich einen Dreher zwischen zwei Zahlen drinne. ;-)

-Malax


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]