Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Diskussion über die Welttransformation führt grundlegende Konzepte ein und enthält Details zum Einrichten einer Welttransformation.
Was ist eine Welttransformation?
Eine Welttransformation ändert Koordinaten aus dem Modellbereich, wobei Scheitelpunkte relativ zum lokalen Ursprung eines Modells zu World Space definiert werden, wobei Scheitelpunkte relativ zu einem Ursprung definiert werden, der allen Objekten in einer Szene gemeinsam ist. Im Wesentlichen platziert die Welt ein Modell in die Welt; daher sein Name. Das folgende Diagramm zeigt die Beziehung zwischen dem Weltkoordinatensystem und dem lokalen Koordinatensystem eines Modells.
Die Welttransformation kann eine beliebige Kombination aus Übersetzungen, Drehungen und Skalierungen umfassen.
Einrichten einer Weltmatrix
Wie bei jeder anderen Transformation erstellen Sie die Welttransformation, indem Sie eine Reihe von Matrizen in eine einzelne Matrix verketten, die die Summe ihrer Effekte enthält. Wenn sich ein Modell am Ursprung der Welt befindet und seine lokalen Koordinatenachsen am einfachsten wie der Weltraum ausgerichtet sind, ist die Weltmatrix die Identitätsmatrix. Im Allgemeinen ist die Weltmatrix eine Kombination aus einer Übersetzung in den Weltraum und möglicherweise eine oder mehrere Drehungen, um das Modell nach Bedarf zu drehen.
Im folgenden Beispiel aus einer fiktiven 3D-Modellklasse, die in C++ geschrieben wurde, werden die Hilfsfunktionen in der D3DX-Hilfsbibliothek verwendet, um eine Weltmatrix zu erstellen, die drei Drehungen enthält, um ein Modell zu orientieren und eine Übersetzung, um es relativ zur Position im Weltraum zu verschieben.
/*
* For the purposes of this example, the following variables
* are assumed to be valid and initialized.
*
* The m_xPos, m_yPos, m_zPos variables contain the model's
* location in world coordinates.
*
* The m_fPitch, m_fYaw, and m_fRoll variables are floats that
* contain the model's orientation in terms of pitch, yaw, and roll
* angles, in radians.
*/
void C3DModel::MakeWorldMatrix( D3DXMATRIX* pMatWorld )
{
D3DXMATRIX MatTemp; // Temp matrix for rotations.
D3DXMATRIX MatRot; // Final rotation matrix, applied to
// pMatWorld.
// Using the left-to-right order of matrix concatenation,
// apply the translation to the object's world position
// before applying the rotations.
D3DXMatrixTranslation(pMatWorld, m_xPos, m_yPos, m_zPos);
D3DXMatrixIdentity(&MatRot);
// Now, apply the orientation variables to the world matrix
if(m_fPitch || m_fYaw || m_fRoll) {
// Produce and combine the rotation matrices.
D3DXMatrixRotationX(&MatTemp, m_fPitch); // Pitch
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
D3DXMatrixRotationY(&MatTemp, m_fYaw); // Yaw
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
D3DXMatrixRotationZ(&MatTemp, m_fRoll); // Roll
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
// Apply the rotation matrices to complete the world matrix.
D3DXMatrixMultiply(pMatWorld, &MatRot, pMatWorld);
}
}
Rufen Sie nach der Vorbereitung der Weltmatrix die IDirect3DDevice9::SetTransform- Methode auf, um sie festzulegen, und geben Sie das D3DTS_WORLD Makro für den ersten Parameter an.
Anmerkung
Direct3D verwendet die Welt- und Ansichtsmatrizen, die Sie zum Konfigurieren mehrerer interner Datenstrukturen festgelegt haben. Jedes Mal, wenn Sie eine neue Welt- oder Ansichtsmatrix festlegen, berechnet das System die zugehörigen internen Strukturen neu. Das Festlegen dieser Matrizen beispielsweise häufig, tausend Mal pro Frame ist rechenaufwändig. Sie können die Anzahl der erforderlichen Berechnungen minimieren, indem Sie Ihre Welt- und Ansichtsmatrizen in eine Weltansichtsmatrix verketten, die Sie als Weltmatrix festlegen, und dann die Ansichtsmatrix auf die Identität festlegen. Bewahren Sie zwischengespeicherte Kopien einzelner Welt- und Ansichtsmatrizen auf, damit Sie die Weltmatrix nach Bedarf ändern, verketten und zurücksetzen können. Aus Gründen der Klarheit verwenden Direct3D-Beispiele in dieser Dokumentation diese Optimierung selten.
Verwandte Themen