Поделиться через


Преобразования координат текстуры (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 );

В этом примере система сообщает системе передавать три элемента координат текстуры растризатору. Растризатор делит первые два элемента на третий, создавая координаты трехмерной текстуры, необходимые для решения текстуры.

Обработка координат текстуры