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

Aktuelle Zeit: So Jul 20, 2025 00:20

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



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 18:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Wo genau setzt du denn die Position deines Lichtes? Alle Matrixmanipulationen wirken sich auch auf die Position des Lichtes aus. Zum Testen kannst du ja die Identitätsmatrix herstellen, wenn du die Position des Lichtes setzt.
Vielleicht ist auch dein ambienter Lichtanteil viel zu hoch und das Licht kommt daher aus allen Richtungen, bzw. dein diffuser Lichtanteil ist zu gering.
Wenn du nicht sicher bist, ob deine Normalen stimmen kannst du testweise auch Quadrics nutzen um deinen Zylinder zu rendern. Dort stimmen die Normalen dann ganz sicher.

_________________
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  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Code:
  1.  
  2. glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
  3. glLightModeli(GL_LIGHT_MODEL_AMBIENT,1);
  4. glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,1);
  5. glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,1);
  6.  

Das steht mit in der Initialisierung, die GL_LIGHTING wird auch aktiviert.

Das steht in meiner Renderschleife

Code:
  1.  
  2.  glClearColor(color.red,color.green,color.blue,color.alpha);
  3.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  4.  
  5.  glMatrixMode(GL_PROJECTION);
  6.  glLoadIdentity();
  7.  
  8.  //Ansichtstyp auswählen
  9.  if (oglStatus.bOrthogonal = true) then
  10.    glOrtho(-clipSizeX,clipSizeX,
  11.                -clipSizeY,clipSizeY,
  12.                oglStatus.nearPlane,
  13.                oglStatus.farPlane)
  14.  else
  15.    glFrustum(-clipSizeX,clipSizeX,
  16.                  -clipSizeY,clipSizeY,
  17.                  oglStatus.nearPlane,
  18.                  oglStatus.farPlane);
  19.  
  20.  glViewport(0,0,rect.Right,rect.Bottom);
  21.  
  22.  glMatrixMode(GL_MODELVIEW);
  23.  glLoadIdentity();
  24.  setLight(GL_LIGHT0,oglStatus.light);  // <- hier wird vollständige Lichtquellendefinition gesetzt, glEnable(LIGHT0) steht woanders im Code und wird vorher
  25.                                                        // einmal aufgerufen
  26.  
  27.  gluLookAt(oglStatus.focalPoint.x,
  28.                oglStatus.focalPoint.y,
  29.                oglStatus.focalPoint.z,
  30.                oglStatus.sceneMP.x,
  31.                oglStatus.sceneMP.y,
  32.                oglStatus.sceneMP.z,
  33.                oglStatus.upVector.x,
  34.                oglStatus.upVector.y,
  35.                oglStatus.upVector.z);
  36.  
  37.   //Umgebungslicht
  38.   LModelAmbient[0]:= 0.5;
  39.   LModelAmbient[1]:= 0.5;
  40.   LModelAmbient[2]:= 0.5;
  41.   LModelAmbient[3]:= 1;
  42.   glLightModelfv(GL_LIGHT_MODEL_AMBIENT,
  43.                     @LModelAmbient);
  44.  
  45.  //Displaylisten rufen, Flush und Puffer wechseln kommt dann noch
  46.  


Wo liegt jetzt mein Fehler?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 18:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
ach das Licht ist ein ein Parallelstrahler, Position (1,0,0,0) zu Testzwecken
aber ich habe das Licht halt immer von dort wo ich schaue

Ergänzung: ich habe jetzt das setLight außerhalb beim Initialiseren einmal aufgerufen und setze an der Stelle nur noch die Position, passiert dasselbe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 19:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Ok hat sich jetzt funzt es, hab mehreres an der falschen Stelle aufgerufen, thx@all

nur noch eine Frage: im Tut steht ja man muss die Position nach dem setzen der Kamera postieren.
Im OpenGl Programming Guide kommt es so rüber als müsste bei stationären Objekten nach dem LoadIdentity() die Lichtposition stehen.
Interpretier ich das falsch oder ist da ein Fehler( wer das buch hat S.192, zu guide version 1.2) Keeping light stationary)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Probiers bitte mal so aus, wie ichs gemacht hab. Mit glLoadIdentity funzts nämlich nicht, das hat mir einige schlaflose Nächte bereitet, die ich dir sparen will ;)

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 19:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
jo wie gesagt funzt jetzt, siehe die 2 (oder 3^^) Posts drüber :)
nochma thx


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 08:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi,

Wäre schon, wenn der 3ds-Loader von noeska (oder irgendein anderer 3ds-Loader) in der Lage wäre die
Normalen zu berechnen, denn ich finde es schade, dass meine Models so blöd beleuchtet werden :(
Hätte auch gern schönes Licht bei meinen 3ds-Models.

Weiß irgendjemand wie man die Berechnungen z.b in noeskas loader einbaut ?
(vielleicht will noeska das ja selber noch machen)

Dann wären meine Models nicht mehr so schlecht beleuchtet.

Z.B Bei den 3ds-Models in Napalm Bomber ist mir nicht aufgefallen, dass das Licht falsch berechnet wird...
Hat Sascha vielleicht den loader erweitert?

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 08:54 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Sascha hatte mehrere Sachen verändert. Aber ich glaube die änderungen wollte er nicht publik machen... Vor einiger Zeit (sieht man im Projekte Thread vom Loader) hat Sascha recht viel mit Noeska über den Loader geredet. Das war wohl eine Kooperation. Aber direkt seine Änderungen hat er nicht gepostet.

Noeska ist schon seit Anfang des Jahres nur ein seltener Gast, btw. Updates seines Loaders wurden heir schon ewig nichtmehr gemeldet. Keine Ahnung ob da überhaupt noch dran gearbeitet wird. :( :?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 12:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Normalen werden von Noeskas Loader automatisch aus dem File ausgelesen, da diese dorthin schon von den Modeller-Programmen geschrieben werden. Diese Normalen beziehen sich aber nur jeweils auf ein Polygon. Eigene Berechnungen sollten aber nicht allszu schwer zu implementieren sein, du musst dir nur mal den Sorcecode von dem Loaden anschauen.
Eine direkte Implementation in den Loaden durch Noeska scheint mir ein bisschen zu überflüssig, da diese Anwendung schon recht speziell ist.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 12:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
La_Boda hat geschrieben:
Normalen werden von Noeskas Loader automatisch aus dem File ausgelesen, da diese dorthin schon von den Modeller-Programmen geschrieben werden.

Das stimmt so nicht. Im 3DS-Format werden keine Normalen abgelegt, also muss man die selbst "extrahieren". Dazu gibts aber ja die Smoothing-Groups des 3DS-Formats, die angeben welche Eckpunkte zu einer Gruppe gehören innerhalb der man die Normalen mittelt. Noeska generiert halt einfach so immer weiche Normalen, was bei eckigen Objekten natürlich zu falschen Eckpunkten führt. Aber wie gesagt kommt man über die Smoothinggroup Informationen eines Dreiecks an korrekte Normale.

Zitat:
Z.B Bei den 3ds-Models in Napalm Bomber ist mir nicht aufgefallen, dass das Licht falsch berechnet wird...
Hat Sascha vielleicht den loader erweitert?

Die Spielfiguren aus NB3D sind Milkshape-Modelle, nur die Objekte sind 3DS-Modelle.

Zitat:
Sascha hatte mehrere Sachen verändert. Aber ich glaube die änderungen wollte er nicht publik machen...

Ja, ich hab den Loader recht stark verändert, und einige der Änderungen hatte Noeska dann von mir übernommen.


P.S. : Wer 3DS und Visual Studio (evtl. gehts auch mit anderen, kostenlosen C++ IDEs) besitzt, sollte sich mal das IGameInterface (und die Beispiele) aus dem SDK ansehen und sich dann nen eigenen Exporter schreiben. Das geht im Endeffekt schneller als Routinen zur korrekten Berechnungen der Normalen aus dem 3DS zu schreiben und hat dann den Vorteil dass man nicht mehr an die Limitationen des 3DS-Formates gebunden ist. Wenn man da dann noch das vorgefertige Exporter-Projekt nimmt hat man in 5 Minuten nen brauchbaren Exporter zusammen (eigentlich kann man das Beispielprojekt auch direkt nutzen, exportiert dann halt nach XML).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 13:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Sascha Willems hat geschrieben:
La_Boda hat geschrieben:
Normalen werden von Noeskas Loader automatisch aus dem File ausgelesen, da diese dorthin schon von den Modeller-Programmen geschrieben werden.

Das stimmt so nicht. Im 3DS-Format werden keine Normalen abgelegt, also muss man die selbst "extrahieren". Dazu gibts aber ja die Smoothing-Groups des 3DS-Formats, die angeben welche Eckpunkte zu einer Gruppe gehören innerhalb der man die Normalen mittelt. Noeska generiert halt einfach so immer weiche Normalen, was bei eckigen Objekten natürlich zu falschen Eckpunkten führt. Aber wie gesagt kommt man über die Smoothinggroup Informationen eines Dreiecks an korrekte Normale.

Ich habe aber bei mehreren Modellen schon im Modeller (Cinema4D) die Normalen umgreht, zwecks Backface Culling. Diese Werte wurden dann korrekt in 3ds-Format übernommen. Wurde dann die Zeichenrichtung der Vertices umgedreht (clockwise <=> counterclockwise)?

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 14:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
La_Boda hat geschrieben:
Ich habe aber bei mehreren Modellen schon im Modeller (Cinema4D) die Normalen umgreht, zwecks Backface Culling. Diese Werte wurden dann korrekt in 3ds-Format übernommen. Wurde dann die Zeichenrichtung der Vertices umgedreht (clockwise <=> counterclockwise)?


Ja. Wie gesagt gibt es im 3DS-Format keinen Chunk für Normalen, sondern nur Smoothinggroups. Da werden also wohl im 3DS-Exporter von C4D einfach die Vertices in ihrer Reihenfolge getauscht.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 14:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hm...
Ist schade, dass der Loader (zumindest der Publike) die Normalen nicht von alleine richtig berechnet (nach den Smoothing-Groups).
Ich weiß nämlich nicht wirklich, wie man so etwas realisieren kann.
Ansonsten würde ich schon gerne auf noeskas Loader setzen, aufgrund der leichten Handhabung und Fähigkeiten 8)

Als eine wirkliche Alternative zu den 3ds-Dateien sehe ich nur die .obj-Dateien, da sind die normalen ja schon drinne.
Jedoch habe ich keinen guten Loader dafür gefunden, nur einen der irgendwie jedes 2.Polygon nicht darstellt. :?
Warum auch Immer ?!
Und auch mit den Texturen ist es bei dem (glaub ich) auch nicht so gut bestellt.

Naja, Ich brauch doch nur einen Loader der auch die Normalen richtig setzt
(sei es jetzt durch Berechnen oder direkt aus der Datei).

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 13, 2005 14:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
.matReno hat geschrieben:
Naja, Ich brauch doch nur einen Loader der auch die Normalen richtig setzt
(sei es jetzt durch Berechnen oder direkt aus der Datei).

Das ist wie gesagt schwer, Lars hat ja bereits das Beispiel mit dem Würfel gebracht der nur aus 8 Eckpunkten besteht. Da müsste der Loader dann die Vertices splitten um korrekte Normalen zu erstellen, aber das sollte ein Loader nicht einfach so machen, also ist das eher Anwendungssache. Es gibt aber noch nen sehr komplexen Loader von Mike Lischke der die Smoothing-Groups beachtet und daraus dann Normalen generiert. Allerdings sollte man wissen dass selbst unter Nutzung dieser Gruppen die Normalen NICHT so aussehen werden wie im 3DS MAX. Das 3DS-Format ist halt recht alt.

.matReno hat geschrieben:
Als eine wirkliche Alternative zu den 3ds-Dateien sehe ich nur die .obj-Dateien, da sind die normalen ja schon drinne.

Alternativen gibts da noch mehr :
ASE (ASCII Scene Export), das u.a. aus 3DS MAX exportiert werden kann. Das ist ein für Menschen lesbares (daher das ASCII) Format und speichert die Normalen mit. Allerdings gibt hier pro Objekt nur ein Material, also kein Material pro Dreieck (Face).
DirectX .X 3D-Format. Ja, auch unter OpenGL ist dass ein brauchbares Format. Speziell dass Textformat ist wie ASE auch lesbar und daher leicht zu laden. Einen Loader (schreibe grade selbst einen) der zumindest die wichtigsten Sachen wie Eckpunkte, Normalen, Texturkoordianten, etc. ausliest hat man in ner halben Stunde fertig.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
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.014s | 15 Queries | GZIP : On ]