Alphateststatus (Direct3D 9)

C++-Anwendungen können Alphatests verwenden, um zu steuern, wann Pixel auf die Renderzieloberfläche geschrieben werden. Mithilfe des D3DRS_ALPHATESTENABLE Renderzustands legt Ihre Anwendung das aktuelle Direct3D-Gerät so fest, dass jedes Pixel gemäß einer Alphatestfunktion getestet wird. Wenn der Test erfolgreich ist, wird das Pixel auf die Oberfläche geschrieben. Wenn dies nicht der Fall ist, ignoriert Direct3D das Pixel. Wählen Sie die Alphatestfunktion mit dem D3DRS_ALPHAFUNC Renderzustand aus. Ihre Anwendung kann mithilfe des D3DRS_ALPHAREF Renderzustands einen Alpha-Verweiswert für alle Pixel festlegen, mit der verglichen werden soll.

Die häufigste Verwendung von Alphatests ist die Verbesserung der Leistung beim Rastern von Objekten, die nahezu transparent sind. Wenn die Farbdaten, die gerastert werden, undurchsichtiger sind als die Farbe an einem bestimmten Pixel (D3DPCMPCAPS_GREATEREQUAL), wird das Pixel geschrieben. Andernfalls ignoriert der Rasterizer das Pixel vollständig und speichert die Verarbeitung, die zum Mischen der beiden Farben erforderlich ist. Im folgenden Codebeispiel wird überprüft, ob eine bestimmte Vergleichsfunktion unterstützt wird, und wenn ja, werden die Vergleichsfunktionsparameter festgelegt, die zum Verbessern der Leistung während des Renderings erforderlich sind.

// This code example assumes that pCaps is a
// D3DCAPS9 structure that was filled with a 
// previous call to IDirect3D9::GetDeviceCaps.

if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
    dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
    dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
    dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}

// If the comparison is not supported, render anyway. 
// The only drawback is no performance gain.

Nicht alle Hardware unterstützt alle Alphatestfeatures. Sie können die Gerätefunktionen überprüfen, indem Sie die IDirect3D9::GetDeviceCaps-Methode aufrufen. Überprüfen Sie nach dem Abrufen der Gerätefunktionen den AlphaCmpCaps-Member der zugeordneten D3DCAPS9-Struktur auf die gewünschte Vergleichsfunktion. Wenn das AlphaCmpCaps-Element nur die D3DPCMPCAPS_ALWAYS-Funktion oder nur die D3DPCMPCAPS_NEVER-Funktion enthält, unterstützt der Treiber keine Alphatests.

Renderstatus