Преобразования координат текстуры (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 );
В этом примере система сообщает системе передавать три элемента координат текстуры растризатору. Растризатор делит первые два элемента на третий, создавая координаты трехмерной текстуры, необходимые для решения текстуры.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по