Преобразования координат текстуры (Direct3D 9)
Устройства Direct3D могут преобразовывать координаты текстур для вершин, применяя матрицу 4x4. Система применяет преобразования к координатам текстуры так же, как геометрия. Любое преобразование (масштабирование, поворот, преобразование, проекция, ревь или любое сочетание этих элементов) можно выполнить с помощью матрицы 4x4.
Примечание.
Direct3D не изменяет преобразованные и освещенные вершины. В результате приложение, использующее преобразованные и освещенные вершины, не может использовать Direct3D для преобразования координат текстур вершин.
Устройства, поддерживающие операции преобразования с аппаратным ускорением и освещением (устройство T&L HAL), также ускоряют преобразование координат текстуры. Если аппаратное ускорение преобразований недоступно, оптимизация для конкретной платформы в конвейере геометрии Direct3D применяется к преобразованиям координат текстуры.
Преобразования координат текстуры полезны для создания специальных эффектов, избегая необходимости напрямую изменять координаты текстуры геометрии. Можно использовать простые матрицы перевода или поворота для анимации текстур в объекте или преобразования координат текстур, автоматически создаваемых Direct3D, для упрощения и, возможно, ускорения расширенных эффектов, таких как проецируемые текстуры и динамическое сопоставление света. Кроме того, можно использовать преобразования координат текстур для повторного использования одного набора координат текстур для нескольких целей на нескольких этапах текстуры.
Настройка и извлечение преобразований координат текстуры
Как и матрицы, которые приложение использует для геометрии, вы устанавливаете и извлекаете преобразования координат текстуры путем вызова методов IDirect3Device9::SetTransform и IDirect3DDevice9::GetTransform. Эти методы принимают D3DTS_TEXTURE0 через D3DTS_TEXTURE7 члены перечисленного типа D3DTRANSFORMSTATETYPE , чтобы определить матрицы преобразования для этапов текстуры 0–7 соответственно.
Следующий код задает матрицу, применяемую к координатам текстуры для этапа 0 текстуры.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );
// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );
Включение преобразований координат текстуры
Состояние этапа текстуры D3DTSS_TEXTURETRANSFORMFLAGS управляет применением преобразований координат текстуры. Значения для этого состояния стадии текстуры определяются D3DTEXTURETRANSFORMFLAGS перечисленным типом.
Преобразования координат текстуры отключены, если для D3DTSS_TEXTURETRANSFORMFLAGS задано значение D3DTTFF_DISABLE (значение по умолчанию). Если для этапа 0 включено преобразование координат текстуры, следующий код отключает их.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_DISABLE );
Другие значения, определенные в D3DTEXTURETRANSFORMFLAGS , используются для включения преобразований координат текстуры и управления количеством результирующие элементы координат текстуры передаются в растризатор. Например, выполните следующий код.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2 );
Значение D3DTTFF_COUNT2 указывает системе применить матрицу преобразования для этапа 0 текстуры, а затем передать первые два элемента измененной текстуры координаты растризатору.
Флаг преобразования текстуры D3DTTFF_PROJECTED указывает координаты для проецируемого текстуры. При указании этого флага растеризатор делит элементы, переданные последним элементом. Например, выполните следующий код.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );
В этом примере система сообщает системе передавать три элемента координат текстуры растризатору. Растризатор делит первые два элемента на третий, создавая координаты трехмерной текстуры, необходимые для решения текстуры.
См. также