Texture-Adressierungsmodi (Direct3D 9)

Ihre Direct3D-Anwendung kann texturkoordinaten einem beliebigen Scheitelpunkt eines beliebigen Grundtyps zuweisen. Ausführliche Informationen finden Sie unter Texturkoordinaten (Direct3D 9). In der Regel befinden sich die U- und v-Texturkoordinaten, die Sie einem Scheitelpunkt zuweisen, im Bereich von 0,0 bis 1,0 einschließlich. Durch Zuweisen von Texturkoordinaten außerhalb dieses Bereichs können Sie jedoch bestimmte spezielle Textureffekte erstellen.

Sie steuern, welche Direct3D mit Texturkoordinaten außerhalb des Bereichs [0.0, 1.0] ausgeführt wird, indem Sie den Texturadressierungsmodus festlegen. So können Sie beispielsweise den Texturadressierungsmodus festlegen, sodass eine Textur über einen Grundtyp verteilt wird.

Direct3D ermöglicht Anwendungen das Ausführen des Texturumbruchs. Es ist wichtig zu beachten, dass das Festlegen des Texturadressierungsmodus auf D3DTADDRESS_WRAP nicht mit dem Ausführen von Texturumbruch identisch ist. Wenn Sie den Texturadressierungsmodus auf D3DTADDRESS_WRAP festlegen, werden mehrere Kopien der Quelltextur auf den aktuellen Grundtyp angewendet, und das Aktivieren des Texturumbruchs ändert sich, wie das System texturierte Polygone rastert. Ausführliche Informationen finden Sie unter Texture Wrapping (Direct3D 9).

Das Aktivieren des Texturumbruchs macht Texturkoordinaten außerhalb des [0.0, 1.0] Bereichs ungültig, und das Verhalten für das Rastern solcher delinquent Texturkoordinaten wird in diesem Fall nicht definiert. Wenn die Texturumbruch aktiviert ist, werden keine Texturansprachemodi verwendet. Achten Sie darauf, dass Ihre Anwendung keine Texturkoordinaten unter 0,0 oder höher als 1,0 angibt, wenn die Texturumbruch 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 Parameter Type auf D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV oder D3DSAMP_ADDRESSW Werte fest, um die U-, v- oder w-Adressierungsmodi einzeln zu aktualisieren. Der Parameter Value bestimmt, welcher Modus festgelegt wird. Dies kann ein beliebiges Element des aufgezählten D3DTEXTUREADDRESS-Typs sein. Um den aktuellen Texturadressenmodus für eine Texturstufe abzurufen, rufen Sie IDirect3DDevice9::GetSamplerState mithilfe der D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV oder D3DSAMP_ADDRESSW Member der D3DSAMPLERSTATETYPE-Enumeration auf, um den Adressmodus zu identifizieren, über den 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, wirken sich Hardwareeinschränkungen häufig darauf aus, wie weit außerhalb dieser Bereichstexturkoordinaten liegen können. Ein Renderinggerät kommuniziert diesen Grenzwert im MaxTextureRepeat-Element der D3DCAPS9-Struktur , wenn Sie Gerätefunktionen abrufen. Der Wert in diesem Element beschreibt den vollständigen Bereich der Texturkoordinaten, die vom Gerät zulässig sind. Wenn dieser Wert beispielsweise 128 ist, müssen die Eingabetextkoordinaten im Bereich -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 aufgrund der automatischen Texturkoordinatengenerierung und Texturkoordinatentransformationen generiert werden.

Die Interpretation von MaxTextureRepeat wird auch vom D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE-Funktionsbit beeinflusst. Wenn dieses Bit festgelegt wird, wird der Wert im MaxTextureRepeat-Element genau wie beschrieben verwendet. Wenn D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE jedoch nicht festgelegt ist, hängt die Textur wiederholende Einschränkungen von der Größe der Textur ab, die von den Texturkoordinaten indiziert wird. In diesem Fall muss MaxTextureRepeat durch die aktuelle 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 beträgt der tatsächliche gültige Texturkoordinatenbereich 512/32 = 16, sodass die Texturkoordinaten für dieses Gerät innerhalb des Bereichs von -16.0 bis +16.0 liegen müssen.

Weitere Informationen zu den Texturadressierungsmodi sind in den folgenden Themen enthalten.

Grundlegende Texturkonzepte