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

Aktuelle Zeit: Do Jul 17, 2025 14:06

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Dez 24, 2004 13:37 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Hallo,
Ich steh grad ziemlich auf dem Schlauch, und zwar hab ich folgende Probleme:
Ich habe eine Highmap, dabei will ich ein Objekt so auf ein Dreieck dieser Highmap stellen, dass es sozusagen im rechten Winkel zu dem Dreieck steht.
Gegeben habe ich die genauen X- und Z- Positionen und den (normalisierten) Normal-Vektor des Dreiecks, auf dem das Objekt stehen soll. Aber
1.) Wie bekomme ich das Objekt so hingedreht, dass es auch senkrecht dadrauf steht und
2.) (bereits gelöst)

Vielen Dank und Schöne Weihnachten!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 27, 2004 11:46 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Ähm... Hallo? Ich will wirklich nicht nerven, aber innerhalb von 3 Tagen habt ihr doch auch immer geantwortet!
Es ist ja bestimmt eine total simple Lösung, aber ich komme einfach nicht drauf. Also nochmal, falls ich mich irgendwie doof ausgedrückt habe:

Ich habe den Normal-Vektor eines Dreiecks, auf dem ein Objekt stehen soll. Also ist dieser Normal-Vektor sozusagen der Up-Vektor des Objekts (wenn man das Up-Vektor nennt...). Was ich jetzt brauche, sind die Winkel, die ich bei glRotatef eintragen muss bzw von mir aus auch mit Matrix-Operationen...
Aber ich denke, mit eins zwei ArcSin / ArcCos ist es getan, aber ich weiß nicht, was ich mit welchem Element des Vektors machen muss, um welchen Rotations-Winkel zu erhalten. :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 27, 2004 12:05 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das Problem ist, das die Ausrichtung des Fahrzeuges es alleine anhand des Up Vektors nicht eindeutig ist. Denn schließlich kann es ja um diesen Vektor gedreht werden und bleibt immer noch auf dem Dreieck stehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 27, 2004 12:11 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Gut, aber mal abgesehen davon, nehmen wir mal an, der Winkel, mit dem das Objekt um den Vektor gedreht ist, ist 0. Ist auch erstmal nicht weiter von Bedeutung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 27, 2004 12:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
(Ohne Gewähr)
Du hast die Normale des Dreiecks und den Up-Vektor. Also berechnest du die drei Winkel zwischen den Vektoren (in Grad) und hast so nen Euler-Vektor. Aus nem Eulervektor kann man dann direkt eine Rotationsmatrix erstellen, mit der man dann nur noch den Up-Vektor multiplizieren muss. Mehr zu Euler-Winkeln, und wie man daraus eine Matrix erstellt gibts hier. Das müsste eigentlich gehen...

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 27, 2004 12:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Wenn du noch einen Vektor angegeben hast, der in Fahrtrichtung zeigen soll "dir", dann kannst du damit erstmal einen Vektor zur Seite berechnen.

right=up X normalize(dir)

Danach hat man einen Vektor nach oben und einen zur Seite und kann dann den Vektor nach vorne berechnen.

front =up X right

Die Matrix sieht dann so aus und kann mit glMultMatrix übergeben werden:

Code:
  1.  
  2. right.x front.x up.x 0
  3. right.y front.y up.y 0
  4. right.z front.z up.z  0
  5. 0       0       0     1


Gegebenenfalls die Vektoren vertauschen oder negieren damit sie zu deinem Koordinatensystem passen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 27, 2004 13:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenns net funktioniert dann eifach die Winkel berechnen zwischen X-Up/y-Up/z-Up und dann den spass der reihe nach drehen.
(Also rein intuitiv)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 27, 2004 16:17 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Okay, Lars' Methode scheint zu funktionieren, vielen Dank! :)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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 | 16 Queries | GZIP : On ]