Sondereffekte (Direct3D 9)
Dieses Thema enthält Beispiele für Sondereffekte, die mit der Texturkoordinatenverarbeitung erreicht 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
- Durchführen einer projektiven Textur
Animieren von Texturen (durch Übersetzung oder Drehung) für ein Modell
Definieren Sie 2D-Texturkoordinaten im Scheitelpunktformat.
// 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 Texturkoordinatentransformationsmatrix.
// 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 TCI-Flag D3DTSS CAMERASPACEPOSITION, um das System anweisen, die Scheitelpunktposition im Kameraraum 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 an wendet.
// 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 _ D3DTSS-TCI-Flag 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);
Durchführen einer projektiven Textur
Verwenden Sie das D3DTSS-TCI-Flag CAMERASPACEPOSITION, um das System anweisen, die Scheitelpunktposition als Eingabe an eine _ _ Texturtransformationsmatrix zu übergeben.
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);Erstellen Sie die Texturprojektionsmatrix, und wenden Sie sie an. Dies geht über den Rahmen dieser Dokumentation hinaus und ist das Thema mehrerer Branchenartikel.
Weisen Sie den Rasterizer an, projizierte Texturkoordinaten mit drei Element zu erwarten.
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);