Was ist der beste Weg um Objekte in OpenGL zu impotieren? Gibt es brauchbare fertige Datei Formate mit denen man am besten gleich über Konverter 3DSMax Modelle laden kann? Wie schwer ist es einen Exporter für 3DSMax zu Coden mit dem man sich vom Prinzip sein eigene Datei Format schafft? Mir geht es nur um statische Objekte wie Häuser,Steine, etc... Also nix Animiertes. Wäre es dafür nicht eigentlich sinnvoll ein eigenes Format zu haben? Es ist ja effektiv nicht mehr als Koordinaten aller Punkte speichern und danach die Punkte zu Polygonen verbinden und mit ner Textur versehen. Vorteil davon ist das man natürlich die komplett Kontrolle hat. Man bräuchte dann halt nur einen Konverter um aus anderen 3D Programmen wie 3DSMax die Modelle zu exportieren...(das ist das woran ich scheitere... )
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
An deiner Stelle würd ich mir einfach ne Import-Unit für ein bereits vorhandenes Dateiformat suchen.Da bieten sich entweder 3DS (für 3DMax-Modelle), MS3D (Milkshape) oder das etwas alllgemeinere ASE (ASCII-Scene-Exporter)-Format an.Für diese gibt es im Netz diverse Delphi-Importunits, und du musst dir nich noch erst ein eigenes Dateiformat entwickeln, zu dem du dann auch noch nen umständlichen (MAX-Script ist AFAIK recht komplex) Exporter schreiben müsstest.
ich hab mir jetzt mal diese 3ds import libary gesaugt, die scheint so ziemlich jeder zu benutzen . Aber irgendwie komme ich damit nicht zurecht. Das Demo Programm hat nen leicht gigantischen Quellcode und ich blick das nicht wirklich... Kennt jemand irgendwelche einfachen Tutorials dafür? Oder nen einfachen Beispiel Code?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Schau mal in mein zweites Bombermantutorial.Da iss ne Unit drin, mit der man 3DS-Modelle ganz einfach in Delphi nutzen kann, die zwar auch auf der 3DS-Importlib basiert, allerdings sehr viel einfacher zu nutzen ist.
werd ich machen, das gibt mir schon wieder etwas mehr Hoffnung. Dieses 10k Zeilen Beispiel Programm ist recht derb für jemanden der nicht ganz so tief in der OpenGL Materie drin steckt
Das ganze funktionier jetzt endlich. Mit deiner Vereinfachten Import Unit ist das wirklich extrem leichter. Nur habe ich ein kleines Problem mit den Texturen. Wo werden den Polygonen die OpenGL Textur ID's zugewiesen? Ich konnte nur eine Zeile mit Texturen finden und das ist die wo die Textur im Bomberman Textur Manager zugewiesen wird. Das hab ich einfach nur meinen Textur Manager ersetzt(funktionsweise ist ähnlich). Die Textur wird auch richtig geladen und die OpenGL Textur ID wird auch ordentlich erstellt. Nur irgendwie verarbeitet er sie nicht im Objekt...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich weiss...da ich in diesem Tut keine 3DS-Modelle mit Texturen verwendet habe, ist mir dies nicht aufgefallen.Such mal nach der Funktion Use3DSData, und ändere folgenden Quellcode : <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> <span class='reserved'>for</span> J := <span class='integer'>0</span> <span class='reserved'>to</span> FaceGroups.Count - <span class='integer'>1</span> <span class='reserved'>do</span> <span class='reserved'>with</span> PFaceGroup(FaceGroups[J])^ <span class='reserved'>do</span> <span class='reserved'>begin</span> <span class='reserved'>with</span> PMaterial(MatList.Objects[TextureIndex])^ <span class='reserved'>do</span> <span class='reserved'>begin</span> glEnable(GL_CULL_FACE); // Ab hier ändern um die Texturen zu nutzen <span class='reserved'>if</span> Texture <> '' <span class='reserved'>then</span> TextureManager.BindTexture(Texture) <span class='reserved'>else</span> <span class='reserved'>begin</span> glDisable(GL_ALPHA_TEST); glDisable(GL_TEXTURE_2D); glColor3f(Diffuse[<span class='integer'>0</span>],Diffuse[<span class='integer'>1</span>],Diffuse[<span class='integer'>2</span>]); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, @Diffuse); <span class='reserved'>end</span>; <span class='reserved'>end</span>; glDrawElements(GL_TRIANGLES, IndexCount, GL_UNSIGNED_INT, Indices); <span class='reserved'>end</span>;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
wird im 3ds Format die Textur Verzerrung mit gespeichert? Bei 3DSMax kann man das ja auch einfach machen. Bei OpenGL geht es ja auch einfach. Wird das im 3ds Format auch gespeichert/Wie kann ich es auslesen?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wenn du mir sagst was unter "Texturverzerrung" gemeint ist, kann ich dir auch sagen obs ins 3DS-Format mitexportiert wird.Wenn du damit selbstmanipulierte Texturkoordinaten meinst, dann ja, die werden mitexportiert und vom 3DS-Loader natürlich auch interpretiert.
argh, ich überleg die ganze Zeit wie das unter 3DSMax heißt... aber selbstmanipulierte Texturkoordinaten trifft es glaub ich. Halt das Texturen Verzerrt werden. so das sie z.B. in x richtung zwei mal angezeigt wird. So das man nicht für jede Seite eines Objekts ne extra angepaßte Textur nehmen muß weil es sonst total verzerrt ist.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
3DSMax macht in dem von dir verwendeten Fall (z.B. Texturen 2 mal in S-Richtung) auch nichts anderes, als die Texturkoordinaten des Meshs so anzupassen, das die Textur in dieser Richtung zweimal wiederholt wird.Und da die Texturkoordinaten natürlich nach 3DS exportiert werden, und der Loader sie auch interpretiert geht das definitiv...deinen Modellen sollte auf dem Weg in deine Delphi/OpenGL-Anwendung also nix im Weg stehen!
das ganze ist einfach ein 3DSMax Problem. Wie ich feststellen mußte reicht es nicht aus das ganze unter 3DSMax im Material Editor einzustellen. Das wird irgendwie total ignoriert. Das ganze funktioniert erst wenn ich jedem Element nen uvw Mod zuweise und es dort einstelle. Ist das normal?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ja, das ist so wie es ist schon "richtig".AFAIK werden diese Materialmanipulationen nicht nach 3DS exportiert.Allerdings ist das UVW-Mapping dieser Methode auf jeden Fall vorzuziehen und bietet auch weitaus mehr Flexibilität.
dann muß ich mich mal etwas mehr damit beschäftiegen. Ich hab gestern Nacht ein wenig damit rum probiert hab damit aber irgendwie nicht wirklich was zu Stande bekommen. Gibts irgendwo Tutorials dafür? bzw. wie kann ich es für Einzelne Polygone Zuweisen? Ich hab das gestern irgendwie immer nur fürs ganze Element hinbekommen. Aber das bringt ja nicht viel da man ja meistens unterschiedliche verzerrungen für einzelne Polygone braucht. Gibts irgendne möglichkeit das auf die einzelnen Material ID's anzuwenden?
Mitglieder in diesem Forum: Google [Bot] 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.