Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Allgemeine Frage zum Transformieren mit DirectX (https://www.delphipraxis.net/113043-allgemeine-frage-zum-transformieren-mit-directx.html)

.chicken 1. Mai 2008 19:01


Allgemeine Frage zum Transformieren mit DirectX
 
Also ich habe eine generelle Frage wie das Transformieren bei DirectX funktioniert.
Also wie ich es im Code mache weiss ich, aber was genau passiert versteh ich nicht.
Mal sehen wie ich das nun beschrieben bekomme ^^

Das erste Programm in dem ich etwas bewegen lies, hatte nur eine Funktion zur Transformation.
Diese wurde einmal am Anfang der Render Prozedur aufgerufen, danach wurden alle Objekte gerendert.
Dies führte dazu, dass alle Objekte mit nur einer Transformationsanweisung transformiert wurden und somit alle gleich.

Jetzt habe ich für meine Objekte jeweils eigene Klassen, die jeweils eine eigene Matrix besitzen.
Vor dem Rendern jedes einzelnen Objekts wird dann folgendes aufgerufen:
Delphi-Quellcode:
Device.SetTransform(D3DTS_WORLD, ObjektMatrix);
Dies führt dazu, dass nur das bestimmte Objekt transformiert wird.

Wie genau funktioniert das nun also? Mich verwirrt es etwas, dass man zB keine Funktion hat um einen komplette Vertexbuffer zu transformieren. Woher weiss DX nun was transformiert werden soll?
Ich kann mir schon vorstellen, dass das Objekt garnicht wirklich transformiert wird sondern es für den Benutzer hinterher nur so aussieht oder? Was genau macht DirectX denn nun bei so einer Transformation?

Ich hoffe ihr versteht was ich meine und koennt mich kurz aufklären.

Grüße, .ch!cken

.chicken 2. Mai 2008 17:01

Re: Allgemeine Frage zum Transformieren mit DirectX
 
Kann mir dazu niemand was sagen? Bitte... :(

JasonDX 2. Mai 2008 17:42

Re: Allgemeine Frage zum Transformieren mit DirectX
 
Was passiert ist eine rein mathematischer Prozess, die sich in 3 Stadien unterteilt.
Du kannst 3 Transformationsmatrizzen festlegen, deren Namen sich generell als World-, View- und Projection-Matrix festgelegt haben. Alle 3 haben dabei eine unterschiedliche aufgabe:
Die Projection-Matrix bestimmt die Projektionsparameter. Es gibt verschiedene Arten der Projektion, im 3D-Bereich wird meist die Zentralprojektion verwendet. In der Matrix bestimmst du, welchen Ausschnitt der Szene du in welchem Format auf deine Zeichenfläche rendern willst.
Die View-Matrix bestimmt die Kamera-Position. Mit ihr beschreibst du also, von welchem Punkt aus und in welche Richtung du die Szene betrachtest.
Die World-Matrix bestimmt die Position des derzeit gerenderten Objektes. D.h. wenn du in deiner Szene einen Würfel verschoben oder gedreht zeichnen willst, erledigst du dies über die World-Matrix.

Bei DirectX läuft dies nun so ab, dass die gerenderten Vertices mit den zu dem Zeitpunkt gesetzten Transformationsmatrizzen transformiert und projeziert werden. Willst du bspw. 2 Vertexbuffer unterschiedlich transformieren, musst du - abhängig davon, was sich ändern soll - die entsprechende Matrix vor dem Renderbefehl mit SetTransform umsetzen. Meist gehts dabei darum, unterschiedliche Objekte an unterschiedliche Positionen zu setzen. Die dafür zuständige Matrix ist die Weltmatrix; Die wirst du während einer Szene sehr oft setzen. (Normalerweise für jedes Objekt, das du zeichnen willst, min. einmal).

greetz
Mike

.chicken 3. Mai 2008 01:31

Re: Allgemeine Frage zum Transformieren mit DirectX
 
Ok, danke soweit. Das bedeutet aber eigentlich, dass ein Objekt sich nicht wirklich "bewegt" oder? Eigentlich bleiben die Vertices wo sie sind nur für den Benutzer werden sie an einer anderen Stelle gezeichnet oder?

Medium 3. Mai 2008 04:22

Re: Allgemeine Frage zum Transformieren mit DirectX
 
Jop

.chicken 3. Mai 2008 08:26

Re: Allgemeine Frage zum Transformieren mit DirectX
 
Ok, danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.

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