Координаты текстуры (Direct3D 9)
Большинство текстур, таких как растровые изображения, являются двумерным массивом значений цвета. Текстуры карты кубической среды являются исключением. Дополнительные сведения см. в сопоставлении кубических сред (Direct3D 9). Отдельные значения цвета называются элементом текстуры или texel. Каждый тексель имеет уникальный адрес в текстуре. Адрес можно рассматривать как столбец и номер строки, которые помечены вами и v соответственно на следующем рисунке.
Координаты текстуры находятся в пространстве текстур. То есть они относительно расположения (0,0) в текстуре. Если текстура применяется к примитиву в трехмерном пространстве, его адреса текселя должны быть сопоставлены с координатами объектов. Затем их необходимо преобразовать в координаты экрана или расположения пикселей.
Сопоставление Texels с пространством экрана
Direct3D сопоставляет тексели в пространстве текстур непосредственно с пикселями в пространстве экрана, пропуская промежуточный шаг для повышения эффективности. Этот процесс сопоставления на самом деле является обратным сопоставлением. То есть для каждого пикселя в пространстве экрана вычисляется соответствующая позиция текселя в пространстве текстуры. Выборка цвета текстуры в этой точке или вокруг нее. Процесс выборки называется фильтрацией текстур. Дополнительные сведения см. в фильтрации текстур (Direct3D 9).
Каждая тексель в текстуре может быть указана его координатой texel. Однако для сопоставления текселей с примитивами Direct3D требует универсального диапазона адресов для всех текселей во всех текстурах. Поэтому он использует универсальную схему адресации, в которой все адреса текселя находятся в диапазоне от 0,0 до 1,0 включительно. Приложения Direct3D указывают координаты текстур с точки зрения значений v, как и координаты 2D Декартиана, указываются с точки зрения координат x,y. Технически система может обрабатывать координаты текстур за пределами диапазона 0.0 и 1.0 и делает это с помощью параметров, заданных для адресации текстур. Дополнительные сведения см. в режимах адресации текстур (Direct3D 9).
Результатом этого является то, что идентичные адреса текстур могут сопоставляться с различными координатами текселя в разных текстурах. На следующем рисунке адрес текстуры равен (0,5,1.0). Тем не менее, поскольку текстуры отличаются размерами, адрес текстуры сопоставляется с разными текселями. Текстура 1 слева — 5x5. Адрес текстуры (0,5,1.0) сопоставляется с тексельом (2,4). Текстура 2 справа — 7x7. Адрес текстуры (0,5,1.0) сопоставляется с тексель (3,6).
Упрощенная версия процесса сопоставления текселя показана на следующем рисунке. По общему признанию, этот пример чрезвычайно прост. Дополнительные сведения см. в непосредственном сопоставлении Texels с пикселями (Direct3D 9).
В этом примере пиксель, показанный слева от иллюстрации, идеализируется в квадрат цвета. Адреса четырех углов пикселя сопоставляются с трехмерными примитивами в пространстве объектов. Форма пикселя часто искажается из-за формы примитива в трехмерном пространстве и из-за угла просмотра. Угла поверхности поверхности на примитиве, соответствующие углам пикселя, затем сопоставляются с пространством текстуры. Процесс сопоставления снова искажает форму пикселя, которая распространена. Окончательное значение цвета пикселя вычисляется из текселей в регионе, с которым сопоставляется пиксель. Вы определяете метод, который Direct3D использует для получения цвета пикселя при настройке метода фильтрации текстур. Дополнительные сведения см. в фильтрации текстур (Direct3D 9).
Приложение может назначать координаты текстуры непосредственно вершинам. Эта возможность позволяет контролировать, какая часть текстуры сопоставляется с примитивом. Например, предположим, что вы создаете прямоугольный примитив, точно такой же размер, как текстура на следующем рисунке. В этом примере приложение будет сопоставлять всю текстуру со всей стеной. Текстура координаты приложения назначает вершинам примитива (0,0,0,0), (1.0,0,0), (1.0,1.0) и (0,0,1.0).
Если вы решили уменьшить высоту стены на одну половину, вы можете исказить текстуру, чтобы поместиться на меньшую стену, или вы можете назначить координаты текстуры, которые приводят к использованию Direct3D нижней половины текстуры.
Если вы решите исказить или масштабировать текстуру, чтобы соответствовать меньшей стене, используемый метод фильтрации текстур будет влиять на качество изображения. Дополнительные сведения см. в фильтрации текстур (Direct3D 9).
Если вместо этого вы решили назначить координаты текстуры, чтобы сделать Direct3D более нижней половиной текстуры для меньшей стены, текстура координирует вершины примитива в этом примере (0,0,0,5), (1.0,5), (1.0,5), (1.0,1.0) и (0,0,1.0). Direct3D применяет нижнюю половину текстуры к стене.
Координаты текстуры вершины могут быть больше 1,0. При назначении координат текстуры вершине, которая не находится в диапазоне от 0,0 до 1,0 включительно, необходимо также задать режим адресации текстур. Дополнительные сведения см. в режимах адресации текстур (Direct3D 9).
Координаты текстуры и этапы текстуры
Координаты текстуры связаны с текстурами путем этапов текстуры. Текстуры назначаются этапам текстуры с помощью SetTexture(stageIndex, pTexture). См. IDirect3Device9::SetTexture.
Код гибкого формата вершин (FVF) может определять до восьми наборов координат текстур. Данные координат текстуры отображаются пользователем в данных вершин. Данные ссылаются на отсчитываемый от нуля индекс: 0 – 7. Существует до восьми этапов смешивания текстур. Текстура связана с определенной стадией с помощью SetTexture(stageIndex, pTexture).
После этого любой набор координат текстуры можно использовать на любом этапе. Каждый набор координат связан с этапом с помощью SetTextureStageState(stageIndex, D3DTSS_TEXCOORDINDEX, текстурыCoordinateIndex). См. IDirect3Device9::SetTextureStageState. Таким образом, этапы смешивания можно настроить для использования любой текстуры и любых координат текстур. Несколько этапов могут использовать те же текстуры или координаты текстур.
Дополнительные сведения содержатся в следующих разделах.
- форматы координат текстур (Direct3D 9)
- обработки координат текстуры (Direct3D 9)
Связанные разделы