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

Aktuelle Zeit: Fr Jun 20, 2025 13:57

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Vertices berechnen (Rotationsmatrix)
BeitragVerfasst: Do Jul 26, 2012 10:52 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hallo,
ich möchte viele Flächen in einer zufälligen Position bezüglich dem Zentrum erzeugen, wobei alle Flächen auf das Zentrum blicken sollen, also ihre Normalen auf das Zentrum zeigen.
Die Normalen selbst brauche ich nicht.

Dabei will ich die fertigen Vertices berechen, weil das ganze statisch bleibt, das ganze im Vertexshader zu berechnen wär also Verschwendung und glRotate ist sowieso viel zu langsam.

Also ich habe mir gedacht, dass ich erst einen zufälligen Abstand für jeden Vertex addiere, z.B in x-Richtung, die Normale zeigt dann in -xRichtung.

Dann das ganze 2 mal rotieren, einmal um y und dann um x-Achse, mit zufälligen Winkeln zwischen 0 und 180/360 Grad, für die Zufallszahlen würd ich einfach rand() nehmen, is wahrscheinlich langsam, wird ja aber nur einmal berechnet, da statisch.

OK, jetzt meine Frage:
Wie berechne ich die Rotation der Vertices, kennt da jemand ne fertige Matrix?

Für andere Lösungen bin ich natürlich auch offen.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 26, 2012 11:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Zitat:
ich möchte viele Flächen in einem zufälligem Abstand vom Zentrum erzeugen, wobei alle Flächen auf das Zentrum blicken sollen, also ihre normalen auf das Zentrum zeigen.
Die Normalen selbst brauche ich nicht.


Dazu ein Ansatz:

Die Ebenen selbst zu erzeugen ist leicht mit der Normalgleichung.
Einfach zufällig Punkte im Raum verstreuen. Jeder Punkt P wird eine Ebene. Dazu brauchst du nun noch für jeden die Normale N die zum Zentrum Z zeigt:
N = (Z - P) / |Z - P|


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 26, 2012 12:25 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Stimmt, dann brauche ich nur noch zwei Einheitsvektoren, die untereinander und zur Normale orthogonal sind, und kann dann damit die Vertices berechnen, Rotationen um die Normale sind mir hier nämlich egal.
Also erst brauch ich irgendeinen Vektor, der orthogonal zur Normale ist, und dann kann ich mittels Kreuzprodukt einen zweiten bekommen.

Aber wie bekomme ich einen senkrechten Vektor zu einem beliebigen Vektor, den ich noch nicht kenne?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 26, 2012 12:30 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Eine Lösung: Kreuzprodukt mit irgendeinem anderem Vektor ergibt Vektor, der zu beiden orthogonal ist.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 26, 2012 12:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Jo, einfach irgendeinen nehmen, z.B. (0, 1, 0). Dann erhältst du die Rotationsmatrix wie folgt:
Z = (Z - P) / |Z - P)
X = (0, 1, 0) x Z
Y = Z x X
Rotationsmatrix:
X1 Y1 Z1
X2 Y2 Z2
X3 Y3 Z3

(Wobei ich mir hier gerade nicht sicher bin über die Reihenfolge bei den Kreuzprodukten...)

Das geht solange gut, bis du mal einen Punkt generierst, der ein Vielfaches von (0, 1, 0) ist. :)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 12:35 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Ja, so hat es gut geklappt, Reihenfolge stimmt.
Nur sollte man noch erwähnen, dass Z1, Z2 und Z3 in der Matrix die unnormierten Zufallsvektoren sein müssen, da sonst alle Flächen den Abstand 1 vom Zentrum haben.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 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 ]