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

Aktuelle Zeit: So Jun 16, 2024 02:39

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Feedback zu SchodMC's Tut
BeitragVerfasst: Mo Sep 16, 2002 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
Ich hab mir grad mal die beiden Tutorials durchgelesen und besonders das zweite gefällt mir super! ;) Das war mal wieder Stoff von der Sorte wo man die ganze Zeit "Ahh... logisch", "geschickt gemacht" und "gute Idee" murmelt. Auf die Sache mit dem lokalen Koordinaten-System muss man erstmal kommen.

Allerdings hat mich gestört, dass du die lokalen Achsen bei jeder Veränderung neu ausrichtest und normalisiert. Genau genommen ist es doch doppelt gemoppelt, wenn man die Achsen des lokalen Systems und die Objekt-Matrix beide speichert, denn die Achsen lassen sich aus der Matrix berechnen.
Mein Vorschlag wäre auf die Achsen und damit auch auf die Rundungsfehler-Korrektur zu verzichten und so Speicher-Platz, Code und Rechenzeit zu sparen.

Die Update Rotation Funktion lässt sich damit auf wenige Zeilen Code reduzieren:

Code:
  1.  
  2.  
  3. procedure UpdateRotation(RotAxis: Integer; Ang: Single);
  4.  
  5. var
  6.  
  7.   TmpMat  : TMatrix4f;
  8.  
  9.   LocalRotAxis  : TVector3f;
  10.  
  11. begin
  12.  
  13.  
  14.  
  15.   //Lokale Rotations Achse berechnen
  16.  
  17.   Case RotAxis of
  18.  
  19.     ROTATE_LOCAL_X : LocalRotAxis := VectorTransform(XAxis, ObjMat);
  20.  
  21.     ROTATE_LOCAL_Y : LocalRotAxis := VectorTransform(YAxis, ObjMat);
  22.  
  23.     ROTATE_LOCAL_Z : LocalRotAxis := VectorTransform(ZAxis, ObjMat);
  24.  
  25.   end;
  26.  
  27.  
  28.  
  29.   // Rotations-Matrix für den Winkel ANG um die Rotations-Achse
  30.  
  31.   // erstellen.
  32.  
  33.   TmpMat := CreateRotationMatrix(LocalRotAxis, DegToRad(Ang));
  34.  
  35.   // Nun nur noch die Objekt-Matrix auf den aktuellen Stand
  36.  
  37.   // bringen (also ebenfalls um die Y-Achse drehen)
  38.  
  39.   ObjMat := MatrixMultiply(ObjMat, TmpMat);
  40.  
  41. end;
  42.  
  43.  


Und beim Zeichnen des Koordinaten-Systems und der Bewegung muss man die lokalen Achsen halt erneut per VectorTransform() berechnen.
Außerdem müssen die Welt-Koordinatensystem Achsen noch irgendwo definiert werden:

Code:
  1.  
  2.  
  3. const  
  4.  
  5.   XAXIS  : TVector3f = (1, 0, 0);
  6.  
  7.   YAXIS  : TVector3f = (0, 1, 0);
  8.  
  9.   ZAXIS  : TVector3f = (0, 0, 1);
  10.  
  11.  


Aber ich denke trotzdem, dass das insgesamt eine Verbesserung darstellt, oder?

(Ich will SchodMC's Lösung nicht angreifen oder sowas! Ich würd nur gern Wissen, ob das ne gute Idee ist oder ob's da nen Haken gibt!)

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 16, 2002 20:11 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Zitat:
(Ich will SchodMC's Lösung nicht angreifen oder sowas! Ich würd nur gern Wissen, ob das ne gute Idee ist oder ob's da nen Haken gibt!)

Ich denke auf die Idee wär gar keiner gekommen, wenn dus nit gsagt hättst. Wir sind doch alle hier um was dazuzulernen und bestehendes zu verbessern, oder sehe ich das falsch. Also ich würde sowas bei meinen tuts nicht als angriff auffassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 18, 2002 16:13 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Also, eines will ich mal Klarstellen:

Wenn jemand seine Meinung Sagt, und mir Verbesserungen/Tips/Korrekturen auf Sachlichen (ich wiederhole: SACHLICHEN!!!!!) Wege zukommen lässt, dann find' ich das voll in Ordnung und fühl mich nicht angegriffen. Wenn aber jemand sagt: "Bist Du blöd, das geht so und so viel besser" (es sei denn, es ist 'n Scherz von 'ner Person die ich kenne und es dann auch als Scherz idendifizieren kann), dann kann mir diese Person gestohlen bleiben!!!

Also im Klartext: Keine Sorge, ich fühl mich von Dir nicht angegriffen ;)

So, nun zur Verbesserung: ....ups, Du hast recht. Hätte mir auch selber auffallen können. Das kam daher, dass es spät in der Nacht war (11:00 bis 2:00 morgens :( ) und ich zuerst die RotateVector-Funktion verwendet und dannach auf die Transform-Version umgestiegen bin. Ich muss das nochmal komplett durchdenken, da es sein kann, dass es nicht ganz klappt, bin mir aber nicht sicher. Wenn es funzt, wird das Tutorial auf jeden Fall angepasst bzw. erweitert. Danke!

Ansonsten danke, dass Dir das Tutorial gefällt und weiterhilft. Das gibt einen echt mut, weiter Tutorials zu erstellen... :wink:

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 18, 2002 18:25 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
Bist Du blöd, das geht so und so viel besser...

:D Die Versuchung war einfach zu groß... sorry ;) Aber ja, auch in meinen Tuts sind ja schon einige Veränderungen drinne, nur dass die Still und Heimlich waren. Schaut mal auf die Daten der Datei ^_-

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 18, 2002 19:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
@Phobeus: :? war ja klar. Aber darf ich Dir meinen Assistenten vorstellen?!? Der kümmert sich um Dich: :sniper: :wink:

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 18, 2002 20:26 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
:sniper: :xmas:
Die Narren-Kape steht mir besser... ach huch. War doch der Weihnachtsmann... damn ;) Aber treffen tuta trotzdem nicht *cough* ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 24, 2002 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Also, ich hab' mir das angeschaut. Folgende:

Du gehst hier den Weg, einen Vector (je nach Dreh-Achse) anhand der Matrix auszurichten. Dannach wird die Matrix des Objektes um eben diese Achse gedreht. Gute Idee, wirklich. Das einzigste Probem ist:

Es fehlt der Vector zum bewegen des Objekts. Ist auch kein Problem. muss man halt hinzufügen. Ich werde diese Lösung evtl. wenn ich zeitlich dazu komm in das Tutorial übernehmen, aber zum Verständis der Materie wäre der weg nicht unbedingt hilfreich. Aber welcher optimierte Code ist schon verständlich? ;)

Wenn man nun 2 Vectoren braucht, an denen das Objekt bewegt wird (z.B.: einem Hubschreauber, da braucht man sogar 3 Vectoren), dann ist die Berechnung der Vectoren auf jeden Fall notwendig. Was man sich aber wirklich sparen kann, ist diese Normalize-Geschichte, das stimmt. Spätestens dann wenn Du wie z.B. bei einem Hubschrauber die 3 Achsen benötigst, ist der einzigste Unterschied die einsparnis der Normalizierung und Kreuzproduktbildung der einzelnen Vectoren.

Ach ja, noch was: Was ich geschreiben hab soll jetzt nicht heißen, Deine Lösung taug nichts. Im gegenteil, man spart sich wirklich die ein oder andere Berechnung. Ich wollte hier nur die Unterschiede aufzeigen. Aber wie gesagt: wenn ich zeit hab, "rutscht" der Teil noch in das Tutorial rein!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 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.165s | 17 Queries | GZIP : On ]