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

Aktuelle Zeit: Fr Jul 04, 2025 08:39

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: gluLookAt - Werte berechnen
BeitragVerfasst: Mi Nov 28, 2012 19:53 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Moin.
Vorweg: es könnte sein, dass dies ein eher mathematisches Thema ist. Nötigenfalls bitte entschuldigen und verschieben.

Ich schreibe an einer Klasse, die, wie der Titel schon sagt, die Werte berechnen soll, die an die glu.lookAt übergeben werden sollen.
Momentan nutze ich dafür eine Menge Vektorrechnung und an sich funktioniert das auch wunderbar (bis auf ein paar Ungenauigkeiten...).

Ich habe die Ahnung, dass andere Methoden diese Aufgabe einfacher erledigen, jedoch weiß ich nicht unbedingt welche... (Matrizen vllt. oder geometrische berechnungen...)

Mir ist wichtig, dass die Klasse nicht selbst mit OGL interagiert, sondern lediglich auf Kommando rechnet und die Werte "zur Abholung" bereitstellt.
Der Aufbau und die Funktionsweise der Klasse steht, nur die Art der Berechnungen möchte ich vereinfachen.

Welche Möglichkeiten seht ihr da?

Grüße!

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluLookAt - Werte berechnen
BeitragVerfasst: Mi Nov 28, 2012 20:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Welche Möglichkeiten seht ihr da?

Ähm, ohne zu wissen WAS du berechnest ist das relativ unmöglich...meine Glaskugel ist leider schon länger in Reperatur.

Eine Möglichkeit Vektorberechnungen zu vereinfachen ist eine Mathebibliothek, etwa CoolMath...oder was eigenes schreiben. Vereinfachen heißt hier besser lesbarer Code. Die Performance sollte relativ gleich sein. Wobei eine MatheLib den Vorteil bietet, dass du einfach mit einem Profiler rangehen kannst und gezielt optimieren.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluLookAt - Werte berechnen
BeitragVerfasst: Mi Nov 28, 2012 20:39 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Sorry!

Hier mal ein Beispiel:
Code:
  1.  
  2. if (strafeLeft) {
  3.                         this.view = myMath.minus(this.lookAt, this.eye);
  4.                         this.step = myMath.crossProduct(up, view);
  5.                         this.step = myMath.times(myMath.normalize(this.step), strafeWidth);
  6.                         applyStep(true, true);
  7.                     }
  8.  

applyStep() fügt den Vektoren eye und lookAt den step hinzu (abhängig von den bools) und die neuen Werte können aus der Klasse gelesen werden.
Die MatheLib schreib ich so nebenbei mit, wenn ich was neues brauche wirds halt hinzugefügt (Bekommt auch noch nen Namen ;)).

Die Frage ist halt ob ich mit der Vektorrechnung den richtigen Weg einschlage, oder ob es, z.B. durch Matrizen, einfachere / geeigneter Methoden gibt!?

Wenn ich z.B. um einen Punkt rotieren möchte, werden die Berechnungen mittels Vektoren ja etwas komplexer.

Grüße!

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluLookAt - Werte berechnen
BeitragVerfasst: Mi Nov 28, 2012 21:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also den Code den du da hast kannst du eigentlich nicht vereinfachen. Matrizen helfen hier nicht. In anderen Fällen könnte das natürlich sein.

Da du mit C# arbeitest (laut Profil) schlage ich vor das du Operatoren +-*/ deiner Vektorklasse überlädst. Ich finde das jedenfalls so lesbarer:
Code:
  1. if (strafeLeft) {
  2.     view = lookAt - eye;
  3.     step = (up % view).Normalized() * strafeWidth;
  4.     applyStep(true, true);
  5. }

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluLookAt - Werte berechnen
BeitragVerfasst: Do Nov 29, 2012 19:58 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Also ich hab jetzt tatsächlich die Operatoren überladen...
Das Handling ist so viel gewohnter und einfacher!

Hier mal das Beispiel für eine Drehung um die y-Achse:
Code:
  1.  
  2. if (turnLeft) {
  3.     resetVectors(true, true, true); //Zurücksetzen der Vektoren
  4.     view.y = 0;                //Auf 2D abstrahieren
  5.     double r = view.Length();       //Länge des Vektors (Radius) speichern
  6.     step = view.Cross(up);          //Kreuzprodukt (Vektor mit rechtem Winkel zur Ebene zw. view u. up)
  7.     step = step.Normalized() * (turnRate * r * turnWidthFactor); //Seitenschritt auf Länge bringen
  8.     Vec3d res = step - view;        //Pseudovektor zw. lookAt und neuem eye (zu lang, immer noch 2D)
  9.     res = res.Normalized() * r;     //Pseudovektor auf länge r bringen
  10.     this.step = view + res;         //Tatsächlichen Schritt aus 2D-View und 2D-Res berechnen
  11.     applyStep(true, false);         //Schritte zu Eye-Vektor addieren
  12. }
  13.  

_________________
ack nack nack nack nack


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


Wer ist online?

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