| netlib.narod.ru | < Назад | Оглавление | Далее > |
Выборка для текстур в пиксельном шейдере осуществляется с помощью специальных встроенных функций HLSL tex*.
В общем случае эти функции требуют, чтобы мы указали две вещи:
Координаты текстуры (u, v), используемые для индексации элементов текстуры.
Текстуру в которой выполняется индексация.
Координаты текстуры (u, v), как вы помните, передаются во входных данных пиксельного шейдера. Текстура, элемент которой нам надо получить, идентифицируется в пиксельном шейдере с помощью специального объекта HLSL, называемого объект выборки (sampler). Можно думать об объектах выборки как об объектах, идентифицирующих текстуру и этап выборки. Для примера предположим, что мы используем три этапа текстурирования, а значит в пиксельном шейдере нам требуется возможность ссылаться на каждый из этих этапов. Для этого в пиксельном шейдере напишем:
sampler FirstTex; sampler SecondTex; sampler ThirdTex;
Direct3D свяжет каждый из этих объектов выборки с уникальным этапом выборки. Затем в приложении мы определяем этап, которому соответствует объект выборки и устанавливаем для этого этапа требуемые текстуру и режимы выборки. Приведенный ниже код показывает, как приложение может установить текстуру и режимы выборки для FirstTex:
// Создание текстуры
IDirect3DTexture9* Tex;
D3DXCreateTextureFromFile(Device, "tex.bmp", &Tex);
.
.
.
// Получение дескриптора константы
FirstTexHandle = MultiTexCT->GetConstantByName(0, "FirstTex");
//Получение описания константы
D3DXCONSTANT_DESC FirstTexDesc;
UINT count;
MultiTexCT->GetConstantDesc(FirstTexHandle, &FirstTexDesc, &count);
.
.
.
// Устанавливаем текстуру/режимы выборки для
// объекта выборки FirstTex. Мы определяем этап с которым
// связан FirstTex по значению члена данных
// D3DXCONSTANT_DESC::RegisterIndex:
Device->SetTexture(FirstTexDesc.RegisterIndex, Tex);
Device->SetSamplerState(FirstTexDesc.RegisterIndex,
D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
Device->SetSamplerState(FirstTexDesc.RegisterIndex,
D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
Device->SetSamplerState(FirstTexDesc.RegisterIndex,
D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
| netlib.narod.ru | < Назад | Оглавление | Далее > |