Состояние альфа-тестирования (Direct3D 9)
Приложения C++ могут использовать альфа-тестирование для управления записью пикселей на поверхность целевого объекта отрисовки. Используя состояние D3DRS_ALPHATESTENABLE отрисовки, приложение задает текущее устройство Direct3D, чтобы оно проверяло каждый пиксель в соответствии с функцией альфа-теста. Если проверка прошла успешно, пиксель записывается на поверхность. Если это не так, Direct3D игнорирует пиксель. Выберите функцию альфа-теста с состоянием D3DRS_ALPHAFUNC отрисовки. Приложение может задать ссылочные альфа-значения для всех пикселей для сравнения с помощью D3DRS_ALPHAREF состояния отрисовки.
Наиболее распространенным способом альфа-тестирования является повышение производительности при растеризации почти прозрачных объектов. Если растеризуемые цветовые данные более непрозрачны, чем цвет в заданном пикселе (D3DPCMPCAPS_GREATEREQUAL), то пиксель записывается. В противном случае растеризатор полностью игнорирует пиксель, сохраняя обработку, необходимую для смешивания двух цветов. В следующем примере кода проверяется, поддерживается ли данная функция сравнения, и в этом случае задаются параметры функции сравнения, необходимые для повышения производительности во время отрисовки.
// 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.
Не все оборудование поддерживает все функции альфа-тестирования. Вы можете проверка возможности устройства, вызвав метод IDirect3D9::GetDeviceCaps. После получения возможностей устройства проверка элемент AlphaCmpCaps структуры D3DCAPS9 для требуемой функции сравнения. Если член AlphaCmpCaps содержит только возможность D3DPCMPCAPS_ALWAYS или только возможность D3DPCMPCAPS_NEVER, драйвер не поддерживает альфа-тесты.
Связанные темы