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

Aktuelle Zeit: Mi Jul 16, 2025 17:35

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: probleme mit 3ds model loader
BeitragVerfasst: Do Jan 19, 2006 18:29 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Hallo DGLer!

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?

Danke für alle Antworten im Vorraus!

Gruß!
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 19, 2006 18:44 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 19, 2006 21:02 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 19, 2006 23:13 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 20, 2006 05:45 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Danke für die Antworten!

@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?

Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 20, 2006 13:28 
Offline
Guitar Hero
Benutzeravatar

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. :roll:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 20, 2006 16:57 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Oder du drehst in 3ds max das Modell schon um 90° speicherst dann, dann dürfte es auch gehen

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 27, 2006 18:21 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 27, 2006 22:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ist denn ausgeschlossen, dass der Code einen Fehler hat? Sich also sachen aufaddieren, oder ähnliches?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 28, 2006 10:37 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 28, 2006 16:45 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
@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.

Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 28, 2006 17:18 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
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:
  1. 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:
  1.       MASTER_SCALE:
  2.       begin
  3.         stream.Read(tempscale, sizeof(tempscale));
  4.         fmasterscale:=tempscale;
  5.       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:
  1. 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.

Jetzt geht es alles.
Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 29, 2006 18:56 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 30, 2006 14:13 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Zitat:
* 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 31, 2006 10:59 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]