Texturadressierungsmodi (Direct3D 9)

Ihre Direct3D-Anwendung kann jedem Scheitelpunkt eines beliebigen Grundtyps Texturkoordinaten zuweisen. Weitere Informationen finden Sie unter Texturkoordinaten (Direct3D 9). In der Regel liegen die U- und V-Texturkoordinaten, die Sie einem Scheitelpunkt zuweisen, im Bereich von 0,0 bis einschließlich 1,0. Durch Zuweisen von Texturkoordinaten außerhalb dieses Bereichs können Sie jedoch bestimmte spezielle Texturierungseffekte erstellen.

Sie steuern, was Direct3D mit Texturkoordinaten außerhalb des [0.0, 1.0] Bereichs ausführt, indem Sie den Texturadressierungsmodus festlegen. Für instance können Sie ihre Anwendung den Texturadressierungsmodus so festlegen, dass eine Textur über ein Grundelement gekachelt wird.

Direct3D ermöglicht Anwendungen das Ausführen von Texturumbrüchen. Es ist wichtig zu beachten, dass das Festlegen des Texturadressierungsmodus auf D3DTADDRESS_WRAP nicht mit der Durchführung von Texturumbruch identisch ist. Das Festlegen des Texturadressierungsmodus auf D3DTADDRESS_WRAP führt dazu, dass mehrere Kopien der Quelltextur auf das aktuelle Grundelement angewendet werden, und das Aktivieren des Texturumbruchs ändert, wie das System texturierte Polygone rastert. Weitere Informationen finden Sie unter Texturumbruch (Direct3D 9)..

Durch das Aktivieren des Texturumbruchs werden Texturkoordinaten außerhalb des [0.0, 1.0] Bereichs ungültig, und das Verhalten zum Rastern solcher delinquenten Texturkoordinaten ist in diesem Fall nicht definiert. Wenn Texturumbruch aktiviert ist, werden keine Texturadressierungsmodi verwendet. Achten Sie darauf, dass Ihre Anwendung keine Texturkoordinaten unter 0,0 oder höher als 1,0 angibt, wenn die Texturumbruchung aktiviert ist.

Festlegen des Adressierungsmodus

Sie können Texturadressierungsmodi für einzelne Texturphasen festlegen, indem Sie die IDirect3DDevice9::SetSamplerState-Methode aufrufen. Geben Sie den gewünschten Texturstufenbezeichner im Sampler-Parameter an . Legen Sie den Type-Parameter auf D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV oder D3DSAMP_ADDRESSW-Werte fest, um die u-, v- oder w-Adressierungsmodi einzeln zu aktualisieren. Der Value-Parameter bestimmt, welcher Modus festgelegt wird. Dies kann ein beliebiges Element des aufgezählten D3DTEXTUREADDRESS-Typs sein. Um den aktuellen Texturadressmodus für eine Texturphase abzurufen, rufen Sie IDirect3DDevice9::GetSamplerState auf, und verwenden Sie die D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV oder D3DSAMP_ADDRESSW Member der D3DSAMPLERSTATETYPE-Enumeration , um den Adressmodus zu identifizieren, zu dem Sie Informationen benötigen.

Geräteeinschränkungen

Obwohl das System im Allgemeinen Texturkoordinaten außerhalb des Bereichs von 0,0 und 1,0 zulässt, einschließlich, wirken sich Hardwareeinschränkungen häufig darauf aus, wie weit außerhalb dieses Bereichs Texturkoordinaten liegen können. Ein Renderinggerät kommuniziert diesen Grenzwert im MaxTextureRepeat-Member der D3DCAPS9-Struktur , wenn Sie Gerätefunktionen abrufen. Der Wert in diesem Member beschreibt den gesamten Bereich der Texturkoordinaten, die vom Gerät zulässig sind. Wenn dieser Wert für instance 128 ist, müssen die Eingabetexturkoordinaten im Bereich von -128,0 bis +128,0 beibehalten werden. Das Übergeben von Scheitelpunkten mit Texturkoordinaten außerhalb dieses Bereichs ist ungültig. Die gleiche Einschränkung gilt für die Texturkoordinaten, die durch automatische Texturkoordinatengenerierung und Texturkoordinatentransformationen generiert werden.

Die Interpretation von MaxTextureRepeat wird auch durch das D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE-Funktionsbit beeinflusst. Wenn dieses Bit festgelegt wird, wird der Wert im MaxTextureRepeat-Member genau wie beschrieben verwendet. Wenn jedoch D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE nicht festgelegt ist, hängen die Einschränkungen für die Texturwiederholung von der Größe der Textur ab, die durch die Texturkoordinaten indiziert wird. In diesem Fall muss MaxTextureRepeat mit der aktuellen Texturgröße auf der größten Detailebene skaliert werden, um den gültigen Texturkoordinatenbereich zu berechnen. Bei einer Texturdimension von 32 und MaxTextureRepeat von 512 ist der tatsächliche gültige Texturkoordinatenbereich 512/32 = 16. Daher müssen sich die Texturkoordinaten für dieses Gerät im Bereich von -16,0 bis +16,0 befinden.

Weitere Informationen zu den Texturadressierungsmodi finden Sie in den folgenden Themen.

Grundlegende Texturierungskonzepte