Freigeben über


Texturkoordinatentransformationen (Direct3D 9)

Direct3D-Geräte können die Texturkoordinaten für Scheitelpunkte transformieren, indem sie eine 4x4-Matrix anwenden. Das System wendet Transformationen auf Texturkoordinaten auf die gleiche Weise wie Geometrie an. Jede Transformation (Skalierung, Drehung, Übersetzung, Projektion, Schere oder eine beliebige Kombination dieser Elemente) kann mit einer 4x4-Matrix erfolgen.

Anmerkung

Direct3D ändert keine transformierten und beleuchteten Scheitelpunkte. Daher kann eine Anwendung, die transformierte und beleuchtete Scheitelpunkte verwendet, direct3D nicht verwenden, um die Texturkoordinaten der Scheitelpunkte zu transformieren.

 

Geräte, die hardwarebeschleunigte Transformations- und Beleuchtungsvorgänge (T&L HAL Device) unterstützen, beschleunigen auch die Transformation von Texturkoordinaten. Wenn keine Hardwarebeschleunigung von Transformationen verfügbar ist, gelten plattformspezifische Optimierungen in der Direct3D-Geometriepipeline für Texturkoordinatentransformationen.

Texturkoordinatentransformationen sind nützlich, um Spezialeffekte zu erzeugen, ohne die Notwendigkeit zu vermeiden, die Texturkoordinaten Ihrer Geometrie direkt zu ändern. Sie können einfache Übersetzungs- oder Drehmatrizen verwenden, um Texturen für ein Objekt zu animieren, oder Sie können Texturkoordinaten transformieren, die automatisch von Direct3D generiert werden, um erweiterte Effekte wie projizierte Texturen und dynamische Lichtzuordnungen zu vereinfachen und zu beschleunigen. Darüber hinaus können Sie Texturkoordinatentransformationen verwenden, um einen einzelnen Satz von Texturkoordinaten für mehrere Zwecke in mehreren Texturphasen wiederzuverwenden.

Festlegen und Abrufen von Texturkoordinatentransformationen

Wie die Matrizen, die Ihre Anwendung für Geometrie verwendet, legen Sie Texturkoordinatentransformationen fest und rufen sie ab, indem Sie die methoden IDirect3DDevice9::SetTransform und IDirect3DDevice9::GetTransform aufrufen. Diese Methoden akzeptieren die D3DTS_TEXTURE0 durch D3DTS_TEXTURE7 Member des D3DTRANSFORMSTATETYPE aufgezählten Typs, um die Transformationsmatrizen für Texturstufen 0 bis 7 zu identifizieren.

Der folgende Code legt eine Matrix fest, die auf die Texturkoordinaten für Texturstufe 0 angewendet werden soll.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );

// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );

Aktivieren von Texturkoordinatentransformationen

Der D3DTSS_TEXTURETRANSFORMFLAGS Texturstufenzustand steuert die Anwendung von Texturkoordinatentransformationen. Werte für diesen Texturstufenzustand werden durch den aufgezählten Typ D3DTEXTURETRANSFORMFLAGS definiert.

Texturkoordinatentransformationen werden deaktiviert, wenn D3DTSS_TEXTURETRANSFORMFLAGS auf D3DTTFF_DISABLE (Standardwert) festgelegt ist. Vorausgesetzt, dass Texturkoordinatentransformationen für Phase 0 aktiviert wurden, deaktiviert der folgende Code sie.

// For this example, assume the d3dDevice variable contains a 
// valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_DISABLE );

Die anderen in D3DTEXTURETRANSFORMFLAGS definierten Werte werden verwendet, um Texturkoordinatentransformationen zu ermöglichen und zu steuern, wie viele resultierende Texturkoordinatenelemente an den Rasterizer übergeben werden. Nehmen Sie beispielsweise den folgenden Code.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT2 );

Der D3DTTFF_COUNT2 Wert weist das System an, die Transformationsmatrix für Texturstufe 0 anzuwenden und dann die ersten beiden Elemente der geänderten Texturkoordinaten an den Rasterizer zu übergeben.

Das Flag für die D3DTTFF_PROJECTED Texturtransformation gibt Koordinaten für eine projizierte Textur an. Wenn dieses Kennzeichen angegeben wird, teilt der Rasterizer die vom letzten Element übergebenen Elemente auf. Nehmen Sie beispielsweise den folgenden Code.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );

In diesem Beispiel wird das System informiert, drei Texturkoordinatenelemente an den Rasterizer zu übergeben. Der Rasterizer dividiert die ersten beiden Elemente durch den dritten, wodurch die 2D-Texturkoordinaten erzeugt werden, die zum Adressieren der Textur erforderlich sind.

Texturkoordinatenverarbeitung