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

Aktuelle Zeit: So Jul 27, 2025 11:51

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 15, 2003 09:48 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
C'est la Vie

Du musst nur das lokale Koordinatensystem des Würfels seinen Seiten zuordnen, da dieses in diesem Fall den Normalvektoren der Flächen entspricht z.B.

negative X-Achse = 1
positive X-Achse = 6

negative Y-Achse = 2
positive Y-Achse = 5

negative Z-Achse = 3
positive Z-Achse = 4

Nun schaust du noch, welche Achse (kannst du direkt aus den ersten 3x3 Einträgen der Transformationsmatrix des Objektes auslesen - wenn du die Standardskalierung verwendest) am ehesten der Richtung der globalen Y-Achse entspricht, dann hast du's schon auf zwei Flächen eingeschränkt - das Vorzeichen entscheidet dann, um welche es sich tatsächlich handelt.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 15, 2003 11:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ok, wenn du deinen Würfel positionierst/rotierst/skalierst, werden diese sämtlichen Transformationen in einer Matrix zusammengefasst. Das lokale Koordinatensystem entspricht dem Koordinatensystem, in dem du die Schnittpunkte deines Würfels angibst (z.B. mit glVertex Kommandos). Dieses wird dann mit der ModelView Matrix transformiert, wodurch die Lokalkoordinaten zu Weltkoordinaten werden - wodurch deine Schnittpunkte erst ihre tatsächlich dargestellte Position erhalten.

Normalerweise unterwirfst du die ModelViewMatrix zusätzlich einer Beobachtertransformation, damit der Beobachter nicht immer am Ursprung stehen bleibt. In diesem Fall entspricht das lokale Koordinatensystem des Würfels, der Objekttransformation OHNE Beobachter, da z.B. der "Boden" durchaus auf der Seite liegen kann, wenn der Beobachter den Kopf gedreht hält.

Die Vektoren die dann tatsächlich den Achsen des Objektkoordinatensystems entsprechen erhältst du dann über:

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre><span class='reserved'>procedure</span> TObj.GetXAxis(<span class='reserved'>var</span> ax,ay,az : GLfloat);

<span class='reserved'>begin</span>
ax := objRMatrix[<span class='integer'>0</span>,<span class='integer'>0</span>];
ay := objRMatrix[<span class='integer'>0</span>,<span class='integer'>1</span>];
az := objRMatrix[<span class='integer'>0</span>,<span class='integer'>2</span>];
<span class='reserved'>end</span>;


<span class='reserved'>procedure</span> TObj.GetYAxis(<span class='reserved'>var</span> ax,ay,az : GLfloat);

<span class='reserved'>begin</span>
ax := objRMatrix[<span class='integer'>1</span>,<span class='integer'>0</span>];
ay := objRMatrix[<span class='integer'>1</span>,<span class='integer'>1</span>];
az := objRMatrix[<span class='integer'>1</span>,<span class='integer'>2</span>];
<span class='reserved'>end</span>;


<span class='reserved'>procedure</span> TObj.GetZAxis(<span class='reserved'>var</span> ax,ay,az : GLfloat);

<span class='reserved'>begin</span>
ax := objRMatrix[<span class='integer'>2</span>,<span class='integer'>0</span>];
ay := objRMatrix[<span class='integer'>2</span>,<span class='integer'>1</span>];
az := objRMatrix[<span class='integer'>2</span>,<span class='integer'>2</span>];
<span class='reserved'>end</span>;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

objRMatrix ist die zusammengesetzte Rotationsmatrix des Objekts - die musst du entweder selbst berechnen, oder halt OpenGL dazu verwenden (und dir die entsprechende Matrix via glGetFloatv holen).

Nun schaust du nach, in welcher Achse der Betrag der Y-Komponente am höchsten ist, berücksichtigst das Vorzeichen - und schon weißt du, welche Seite "oben" liegt.

Wenn du gar keinen Plan von Vektor- und Matrizenrechnung hast, solltest du unbedingt die Einstiegstutorials auf dieser Seite durchmachen (gibt, glaub ich, auch eines, das sich "Mathe-Nachhilfe" nennt).

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


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


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.025s | 17 Queries | GZIP : On ]