Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Drehmatrix 3D (https://www.delphipraxis.net/62398-drehmatrix-3d.html)

dartrax 3. Feb 2006 22:32


Drehmatrix 3D
 
Hallo!

Ich habe einen Ortsvektor mit seinen Endpunktkoordinaten x, y und z. Diesen Vektor möchte ich nun um eine Achse drehen, die ebenfalls durch den Ursprung geht und irgendwo zwischen der x und der y-Achse liegt (ist als Winkel angegeben). Der Drehwinkel um diese Achse ist natürlich auch angegeben.

Ich habe gelesen, dass das mit Drehmatrizen gut geht, ich habe aber leider keine Ahnung davon, weil ich Matrixen in der Schule noch nicht hatte. Ich habe mich aber schon bei Google und Wikipedia umgesehen und zum Beispiel folgendes herausgefunden:

"Man führt zunächst eine Transformation aus nach der die Drechachse mit einer der Koordinatenachsen zusammenfällt, dreht das ganze um diese Achse und führt anschließend die erste Transformatiopn rückwärts aus, um die Drehachse wieder in die ursprüngliche Lage zu bringen. Will man mehrere Vektoren um dieselbe Achse drehen, dann lohnt es sich die drei Transformationsmatritzen zu multiplizieren."

Wie das gemeint ist, verstehe ich und kann ich mir vorstellen, allerdings habe ich überhaupt keine Ahnung, wie man das in Delphi umsetzt. Und ja, es sind immer mehrere Vektoren, die um die selbe Achse gedreht werden sollen! Das macht das ganze noch komplizierter für mich, denn einigermaßen schnell sollte es auch noch sein, es sind schließlich Fraktale, und da können einige Vektoren zusammenkommen ;-)

Könnt ihr mir helfen?

Vielen Dank,
dartrax

Oxmyx 4. Feb 2006 00:38

Re: Drehmatrix 3D
 
D3DX stellt dir solche Funktionen bereit - in deinem Fall D3DXMatrixRotationAxis zum ausrechnen der Matrix, und D3DXVec3TransformCoord zum transformieren deiner Vektoren. Hat noch einen weiteren Vorteil: D3DX benutzt wenn möglich Prozessorerweiterungen wie SSE oder 3DNow.

dartrax 4. Feb 2006 11:09

Re: Drehmatrix 3D
 
Hallo,
ich arbeite aber mit OpenGL. Gibt es da auch schon solche Funktionen? Wichtig ist, dass immer nur ganz bestimmte Vektoren verändert werden sollen, nicht die gesamte Darstellung! Wenn das ginge, dann sicher mit einem Geschwindigkeitsvorteil, der mir entgegen kommen würde, ansonsten hätte ich lieber die Koordinaten!

dartrax


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz