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
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//Ansichtstyp auswählen
if (oglStatus.bOrthogonal = true) then
glOrtho(-clipSizeX,clipSizeX,
-clipSizeY,clipSizeY,
oglStatus.nearPlane,
oglStatus.farPlane)
else
glFrustum(-clipSizeX,clipSizeX,
-clipSizeY,clipSizeY,
oglStatus.nearPlane,
oglStatus.farPlane);
glViewport(0,0,rect.Right,rect.Bottom);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
setLight(GL_LIGHT0,oglStatus.light); // <- hier wird vollständige Lichtquellendefinition gesetzt, glEnable(LIGHT0) steht woanders im Code und wird vorher
// einmal aufgerufen
gluLookAt(oglStatus.focalPoint.x,
oglStatus.focalPoint.y,
oglStatus.focalPoint.z,
oglStatus.sceneMP.x,
oglStatus.sceneMP.y,
oglStatus.sceneMP.z,
oglStatus.upVector.x,
oglStatus.upVector.y,
oglStatus.upVector.z);
//Umgebungslicht
LModelAmbient[0]:= 0.5;
LModelAmbient[1]:= 0.5;
LModelAmbient[2]:= 0.5;
LModelAmbient[3]:= 1;
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,
@LModelAmbient);
//Displaylisten rufen, Flush und Puffer wechseln kommt dann noch
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)
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
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?
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
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
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).
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
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.
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
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).
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.
Mitglieder in diesem Forum: Bing [Bot] und 6 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.