Ich habe folgende Probleme:
1.:
wenn ich ein, aus 3dsm exportiertes .3ds file mit dem gl3ds loader in mein programm lade, dann habe ich grundsätzlich eine rotation von (-90,0,0) so dass mein Auto mit der Spitze im Boden versinkt und senkrecht steht. Das lässt sich zwar alles zurückrotieren aber muss ja eigentlich nicht sein, oder?
2.:
Ich habe ein Problem mit den Größenverhältnissen.
Die gesamten Simulationsdaten basieren auf Inch, und daher habe ich einfach sowohl im 3ds zum modellieren, als auch in meiner OpenGL Anwendung einfach definiert, dass eine Einheit einem Inch entspricht.
Wenn ich jetzt allerding ein Model lade, dann ist das Model in meinem Programm wesentlich kleiner als es eigentlich laut Einheitenangabe sein sollte. Wenn ich mein Auto also um x fuß nach vorne bewege, dann sieht das alles viel schneller aus, als es eigentlich ist, weil das Auto so klein ist.
Eigentlich müssten doch die Koordinaten aus dem 3d modeling Programm einfach so 1:1 übernommen werden und wenn ich in beiden Anwendungen die gleiche Basis für eine Einheit gewählt habe, dann müsste das sich das doch alles entsprechen, oder sehe ich das falsch?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
OpenGL kennt ansich keine Maßeinheiten. OpenGL kennt nur "OpenGl-Einheiten". Es ist also nur eine Frage wie du das interpretierst. Ich kenn mich mit dem Inch-Maßsystem nicht aus. Aber eventuell hast du das Verhältnis Inch<->Fuß falsch umgerechnet, und deshalb ist dein Wagen zu klein bzw. zu schnell.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Und die Rotation um 90° ist typisch für 3ds max. Ich nehme mal an, dass du das benutzt? ^^
3ds MAX vertauscht die Y- und die Z-Achse. Das sollte eigentlich bereits beim Modelln selbst auffallen, die Exporter von MAX korigieren dieses Problem jedoch nicht automatisch. Es gibt jedoch 3rd Party Exporter, die manchmal eine entsprechende Funktion bieten. Wieder einmal ein Zeichen dafür, dass auch 3ds max nicht perfekt ist. Gut, das ist eigentlich kein Programm ^^ Aber so kommen wir nur zu Grundsatzdiskussionen :p
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Eigentlich müsste man Noeskas Loader entsprechend tunen können. Einfach mal machen, und die änderung Noeska zuschicken. Der baut das bestimmt als Funktion ein.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
@Flash:
Dass es keine Maßeinheiten in OpenGL gibt ist mir schon klar, daher rührt ja das Problem überhaupt erst.
Ich habe ja nur imaginär festgelegt, dass eine Objekteinheit einem Inch entspricht. Wenn ich diese Festlegung aber sowohl in meinem 3d-Modeling Programm beherzige, als auch in OpenGL, dann müssten doch die Verhältnisse stimmen, oder irre ich da?
Ich habe in 3ds Max ja einfach nur für die Länge des Autos in Inch die entsprechnde Anzahl Objekteinheiten genommen und das gleiche in OpenGL auch, aber trotzdem hab ich da andere Skalierungen. Ist in dem Loader ein Skalierungsfaktor, oder rechnet 3dsMax beim Exportieren da irgendwas rein?
@Frase:
Beim Modelln selber sieht alles normal aus, aber wenn ich das ganze Ding dann in meine Anwendung lade dann kippt das Auto auf die Schnauze.
Kannst du mir vielleicht den Namen/Link zu so einem 3rd party Exporter geben, der diese Funktion beherrscht?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Zu 1.: Guck mal bei 3DS mach in die Einstellungen. Da kann man eine Einheit angeben. Eventuell ist es das beste, du schaltest das komplett aus (wenns geht). Nicht das der da noch irgendwas umrechnet.
Zu 2.: Schreib dir ne Funktion drawCar(Mesh); welche impliziet um 90° rotiert, dann zeichnet und dann wieder zurück rotiert. Was anderes würde ein Loader auch nicht machen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ich habe mich in der Uni mal umgehört und mir den Namen vom größten 3dsm freak geben lassen, den die Uni zu bieten hat um den mit ein paar Fragen zu löchern.
Und der meinte, dass diese Skalierung der Models nicht von 3dsm herrührt.
Das heißt, da muss ein Skalierungsfaktor im 3ds-loader sein.
Ich habe da auch eine Property "MasterScale" gefunden. aber eine Veränderung dieser Property bewirkt rein garnichts. Benutze ich die Property falsch, oder was könnte es noch für Gründe für diese Skalierung geben?
Das ist alles ein zweischneidiges, wenn nicht noch mehr, Schwert Es existiert tatsächlich die Property MasterScale, die steht standardmäßig aber auf 1.0, wie nicht anders zu erwarten ist Es ist eigentlich gängie Praxis Modells erst beim Importieren passend zu skalieren.
Die Rotation um 90° ist in 3ds max darin begründet, dass dort die Z- und die Y-Achse vertauscht werden. Schau dir beim Modelln mal das kleine Achsenkreuz unten links an, was sich dreht, wenn du die Ansicht drehst. Dort wirst du das auch sehen können
Wegen dem Plugin: Das findest du hier: http://www.codercorner.com/Flexporter.htm Und einen passenden, wenn auch unvollständigen, Loader hab ich für eines der Formate, die damit exportiert werden können neulich erst geschrieben . Den findest du unter: viewtopic.php?t=5018
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
@flash:
Dass mein source nen Fehler hat, kann natürlich immer sein, allerdings gibt es folgende 2 Dinge, die das eher unwahrscheinlich machen:
1. Ich verschiebe ein Objekt einfach nur um 1 in die y Richtung über translatef. Also ohne jegliche Berechnungen.
2. das Objekt, welches 1x1x1 Groß ist, ist um ein vielfaches kleiner als die Strecke um die ich es verschoben habe.
Weiterhin ist der MasterScale, ohne dass ich ihn verändert hätte beim auslesen 0.1, ich weiß aber nicht, wie ich den ändern müsste, damit die models nicht skaliert werden.
Ich habe jetzt auch schon versucht den MasterScale vor und nach dem auslesen zu ändern, aber das hilft alles nichts.
@Frase:
Dass die Rotation an 3dsm liegt hab ich ja nun schon auch von anderen gesagt bekommen, und ohne eine eigene Rotation scheint das wohl nicht zu gehen.
Wenn ich jetzt weiterhin nicht mit der Skalierung klarkomme, dann werde ich wohl einfach die von dir angegebenen Dateien versuchen müssen.
Ich hab mir mal die komplette Methode zum lesen von Models reingezogen.
Also irgendwie scheint mir, dass da jemand blind drauf los programmiert hat, ohne wirklich zu wissen, was er da macht.
Überall Kommentare mit Fragezeichen und Fragen ob er das machen kann.
Bei diesem Stöbern bin ich auf folgende Zeilen gestoßen:
zunächst mal zum Anfang der Methode folgendes:
Code:
fmasterscale :=1;
also es wird mit der variable fmasterscale das model geladen und diese dabei als scale faktor genutzt.
Da diese direkt am Anfang der Methode schon festgelegt wird, bringt auch das Verändern der MasterScale Variable rein gar nichts.
Dann etwas später in einer case Abfrage zu einer ID:
Code:
MASTER_SCALE:
begin
stream.Read(tempscale,sizeof(tempscale));
fmasterscale:=tempscale;
end;
Hier wird also der Scale nochmal anhand von gelesenen Daten gesetzt.
Wesentlich weiter unten dann folgende Zeile, wo ich ja bald vom Glauben abgefallen bin:
Code:
fmasterscale:=fmasterscale/10;//?? Am i allowed to do this?
nachdem ich also jegliche Veränderungen des Scales auskommentriert hatte, war dann tatsächlich auch der Skalierungsfehler weg.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Is das der Loader von Noeska?
Mal was anderes. Wo steht denn dein Objekt in Max? Hast du das um den Koordinatenursprung herum gemodelt, oder steht das etwas vom Ursprung entfernt? Max speichert nämlich die Weltkoordinaten ab. Wenn du das da lädst, hast du automatisch auch die verschiebung mit dabei, die in Max da war, als das Model gebaut wurde.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
* The Original Code is the gl3ds main unit. * * The Initial Developer of the Original Code is * Noeska Software. * Portions created by the Initial Developer are Copyright (C) 2002-2004 * the Initial Developer. All Rights Reserved.
Das Objekt befindet sich am Koordinatenursprung in 3dsm, aber ich hab ja auch keinerlei Probleme mit Verschiebung gehabt, sondern Skalierung, und das ist ja nun auch behoben.
Gruß
Jan
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du kannst ja deine Version hier mal veröffentlichen (Wir reden von der gl3DS.pas von Noeska oder!?) Wenn sie bei anderen Leuten mit deinen Änderungen immer noch korrekt funktioniert, dann kannst du sie ja an Noeska schicken. Er baut das bestimmt dann ein.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder 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.