Texturfilterung (Direct3D 9)
Wenn Direct3D einen Primitiven rendert, wird das 3D-Primitiv einem 2D-Bildschirm zugeordnet. Wenn das Primitiv über eine Textur verfügt, muss Direct3D diese Textur verwenden, um eine Farbe für jedes Pixel im gerenderten 2D-Bild des Primitiven zu erzeugen. Für jedes Pixel im Bild des Primitiven auf dem Bildschirm muss es einen Farbwert aus der Textur abrufen. Dieser Prozess wird als Texturfilterung bezeichnet.
Wenn ein Texturfiltervorgang ausgeführt wird, wird die verwendete Textur in der Regel ebenfalls vergrößert oder verknöpft. Anders ausgedrückt: Es wird einem primitiven Bild zugeordnet, das größer oder kleiner als selbst ist. Die Vergrößerung einer Textur kann dazu führen, dass viele Pixel einem Texel zugeordnet werden. Das Ergebnis kann eine segmentige Darstellung sein. Die Minifizierung einer Textur bedeutet häufig, dass vielen Texel ein einzelnes Pixel zugeordnet wird. Das resultierende Bild kann unscharf oder mit einem Alias dargestellt werden. Um diese Probleme zu beheben, müssen einige Mischungen der Texelfarben durchgeführt werden, um eine Farbe für das Pixel zu erhalten.
Direct3D vereinfacht den komplexen Prozess der Texturfilterung. Sie bietet drei Arten der Texturfilterung: lineare Filterung, Anisotrope Filterung und Mipmapfilterung. Wenn Sie keine Texturfilterung auswählen, verwendet Direct3D eine Technik namens Nearest-Point Sampling.
Jede Art von Texturfilterung hat Vor- und Nachteile. Die lineare Texturfilterung kann z. B. verzweigte Kanten oder eine segmentierte Darstellung im endgültigen Bild erzeugen. Es handelt sich jedoch um eine Methode mit geringem Rechenaufwand für die Texturfilterung. Das Filtern mit Mipmaps liefert in der Regel die besten Ergebnisse, insbesondere in Kombination mit anisotroper Filterung. Es ist jedoch der größte Arbeitsspeicher der Von Direct3D unterstützten Techniken erforderlich.
Anwendungen, die Texturschnittstellenzeiger verwenden, sollten die aktuelle Texturfiltermethode festlegen, indem sie die IDirect3DDevice9::SetSamplerState-Methode aufrufen. Legen Sie den Wert des ersten Parameters auf die ganzzahlige Indexnummer (0-7) der Textur fest, für die Sie eine Texturfilterungsmethode auswählen. Übergeben Sie D3DSAMP _ MAGFILTER, D3DSAMP _ MINFILTER oder D3DSAMP _ MIPFILTER für den zweiten Parameter, um den Filter für Vergrößerung, Vergrößerung oder Mipmapping festzulegen. Übergeben Sie einen Member des enumerationierten D3DTEXTUREFILTERTYPE-Typs als Wert im dritten Parameter.
In diesem Abschnitt werden die Texturfilterungsmethoden vorgestellt, die Direct3D unterstützt. Sie ist in die folgenden Themen unterteilt.
- Nearest-Point Sampling (Direct3D 9)
- Lineare Texturfilterung (Direct3D 9)
- Bilineare Texturfilterung (Direct3D 9)
- Anisotrope Texturfilterung (Direct3D 9)
- Texturfilterung mit Mipmaps (Direct3D 9)
Hinweis
Obwohl die Renderzustände der Texturfilterung, die im D3DRENDERSTATETYPE-Enumerationstyp vorhanden sind, durch Texturphasenzustände ersetzt werden, schlägt IDirect3DDevice9::SetRenderStateim Gegensatz zur IDirect3DDevice2-Version nicht fehl, wenn Sie versuchen, sie zu verwenden. Stattdessen ordnet das System die Auswirkungen dieser Renderzustände der ersten Stufe in der Mehrtexturkakadierung , Phase 0, zu. Anwendungen sollten die Legacyrenderzustände nicht mit den entsprechenden Texturphasenzuständen kombinieren, da unvorhersehbare Ergebnisse auftreten können.