Freigeben über


Automatisch generierte Texturkoordinaten (Direct3D 9)

Das System kann die transformierte Kameraraumposition oder die Normalposition aus einem Scheitelpunkt als Texturkoordinaten verwenden oder die drei Elementvektoren berechnen, die zum Adressieren einer kubischen Umgebungskarte verwendet werden. Wie Texturkoordinaten, die Sie explizit in einem Scheitelpunkt angeben, können Sie automatisch generierte Texturkoordinaten als Eingabe für Texturkoordinatentransformationen verwenden.

Automatisch generierte Texturkoordinaten können die für Geometriedaten erforderliche Bandbreite erheblich reduzieren, da keine expliziten Texturkoordinaten im Vertexformat erforderlich sind. In vielen Fällen können die Texturkoordinaten, die das System generiert, mit Transformationen verwendet werden, um Spezialeffekte zu erzeugen. Natürlich ist dies ein spezielles Feature, und Sie werden explizite Texturkoordinaten für viele Gelegenheiten verwenden.

Konfigurieren automatisch generierter Texturkoordinaten

In C++ steuert der D3DTSS_TEXCOORDINDEX Texturphasenzustand (vom aufgezählten D3DTEXTURESTAGESTATETYPE-Typ ) die Art und Weise, wie das System Texturkoordinaten generiert.

Normalerweise weist dieser Zustand das System an, einen bestimmten Satz von Texturkoordinaten zu verwenden, die im Vertexformat codiert sind. Wenn Sie die flags D3DTSS_TCI_CAMERASPACENORMAL, D3DTSS_TCI_CAMERASPACEPOSITION oder D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR in den Wert einschließen, den Sie diesem Zustand zuweisen, ist das Systemverhalten ganz anders. Wenn eines dieser Flags vorhanden ist, ignoriert die Texturphase die Texturkoordinaten innerhalb des Vertexformats zugunsten von Koordinaten, die das System generiert. Die Bedeutungen für jedes Flag werden in der folgenden Liste angezeigt.

  • D3DTSS_TCI_CAMERASPACENORMAL

    Verwenden Sie den In kamerabereich transformierten Scheitelpunkt normal als Eingabetexturkoordinaten.

  • D3DTSS_TCI_CAMERASPACEPOSITION

    Verwenden Sie die in den Kameraraum transformierte Vertexposition als Eingabetexturkoordinaten.

  • D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR

    Verwenden Sie den in den Kameraraum transformierten Reflektionsvektor als Eingabetexturkoordinaten. Der Reflektionsvektor wird aus der Eingabevertexposition und dem normalen Vektor berechnet.

Die Texturkoordinatenindexflags schließen sich gegenseitig aus. In diesem Beispiel wird Folgendes verwendet:

  • Die Vertexposition (im Kameraraum) als Eingabetexturkoordinaten für diese Texturphase
  • Der im D3DRENDERSTATE_WRAP1 Renderzustand festgelegte Umbruchmodus
// Assume d3dDevice is a valid pointer to an IDirect3DDevice9 interface
d3dDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 
                                   D3DTSS_TCI_CAMERASPACEPOSITION | 1);

Automatisch generierte Texturkoordinaten sind am nützlichsten als Eingabewerte für eine Texturkoordinatentransformation oder um die Notwendigkeit zu vermeiden, dass Ihre Anwendung Drei-Element-Vektoren für kubische Umgebungszuordnungen berechnen muss.

Die Sphere-Mapping verwendet eine vorberechnete Texturkarte (zur Modellzeit), die die gesamte Umgebung enthält, wie von einer Chromkugel reflektiert. Direct3D verfügt über eine Textur-Koordinaten-Generierungsfunktion, die den Renderzustand D3DTSS_TCI_CAMERASPACENORMAL verwendet, die die Normalität des Scheitelpunkts im Kameraraum übernimmt und durch eine Texturtransformation zum Generieren von Texturkoordinaten führt.

Texturkoordinatenverarbeitung

Texturkoordinatentransformationen (Direct3D 9)

Kubische Umgebungszuordnung (Direct3D 9)