Spezialeffekte (Direct3D 9)
Dieses Thema enthält Beispiele für Spezialeffekte, die mit der Verarbeitung von Texturkoordinaten erzielt werden.
- Animieren von Texturen (durch Übersetzung oder Drehung) für ein Modell
- Erstellen von Texturkoordinaten als lineare Funktion der Kameraraumposition eines Modells
- Durchführen einer Umgebungszuordnung mit einer kubischen Umgebungskarte
- Ausführen einer projektiven Texturierung
Animieren von Texturen (durch Übersetzung oder Drehung) für ein Modell
Definieren Sie 2D-Texturkoordinaten im Vertexformat.
// Use a single texture, with 2D texture coordinates. This // bit-pattern should be expanded to include position, normal, // and color information as needed. DWORD dwFVFTex = D3FVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0);
Konfigurieren Sie den Rasterizer für die Verwendung von 2D-Texturkoordinaten.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
Definieren und festlegen Sie eine geeignete Transformationsmatrix für Texturkoordinaten.
// M is a D3DMATRIX being set to translate texture // coordinates in the U and V directions. // 1 0 0 0 // 0 1 0 0 // du dv 1 0 (du and dv change each frame) // 0 0 0 1 D3DMATRIX M = D3DXMatrixIdentity(); // declared in d3dutil.h M._31 = du; M._32 = dv;
Erstellen von Texturkoordinaten als lineare Funktion der Kameraraumposition eines Modells
Verwenden Sie das flag D3DTSS_TCI_CAMERASPACEPOSITION, um das System anzuweisen, die Vertexposition im Kamerabereich als Eingabe an eine Texturtransformation zu übergeben.
// The input vertices have no texture coordinates, saving // bandwidth. Three texture coordinates are generated by // using vertex position in camera space (x, y, z). SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
Weisen Sie den Rasterizer an, 2D-Texturkoordinaten zu erwarten.
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
Definieren und festlegen Sie eine Matrix, die eine lineare Funktion anwendet.
// Generate texture coordinates as linear functions // so that: // u = Ux*x + Uy*y + Uz*z + Uw // v = Vx*x + Vy*y + Vz*z + Vw // The matrix M for this case is: // Ux Vx 0 0 // Uy Vy 0 0 // Uz Vz 0 0 // Uw Vw 0 0 SetTransform(D3DTS_TEXTURE0, &M);
Durchführen einer Umgebungszuordnung mit einer kubischen Umgebungskarte
Verwenden Sie das Flag D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR, um das System anzuweisen, Texturkoordinaten automatisch als Reflektionsvektoren für die kubische Zuordnung zu generieren.
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
Weisen Sie den Rasterizer an, Texturkoordinaten mit drei Elementen zu erwarten.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3);
Ausführen einer projektiven Texturierung
Verwenden Sie das Flag D3DTSS_TCI_CAMERASPACEPOSITION, um das System anzuweisen, die Vertexposition als Eingabe an eine Texturtransformationsmatrix zu übergeben.
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
Erstellen sie die Texturprojektionsmatrix, und wenden Sie sie an. Dies sprengt den Rahmen dieser Dokumentation und ist das Thema mehrerer Branchenartikel.
Weisen Sie den Rasterizer an, drei Elemente projizierte Texturkoordinaten zu erwarten.
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);
Zugehörige Themen