Ресурсы текстур (Direct3D 9)
Ресурсы текстур реализуются в интерфейсе IDirect3DTexture9 . Чтобы получить указатель на интерфейс текстуры, вызовите метод IDirect3DDevice9::CreateTexture или любую из следующих функций D3DX.
- D3DXCreateTexture
- D3DXCreateTextureFromFile
- D3DXCreateTextureFromFileEx
- D3DXCreateTextureFromFileInMemory
- D3DXCreateTextureFromFileInMemoryEx
- D3DXCreateTextureFromResource
- D3DXCreateTextureFromResourceEx
В следующем примере кода используется D3DXCreateTextureFromFile для загрузки текстуры из Tiger.bmp.
// The following code example assumes that D3dDevice
// is a valid pointer to an IDirect3DDevice9 interface.
LPDIRECT3DTEXTURE9 pTexture;
D3DXCreateTextureFromFile( d3dDevice, "tiger.bmp", &pTexture);
Первый параметр, который принимает D3DXCreateTextureFromFile , является указателем на интерфейс IDirect3Device9 . Второй параметр сообщает Direct3D имя файла, из которого загружается текстура. Третий параметр принимает адрес указателя на интерфейс IDirect3DTexture9 , представляющий созданный объект текстуры.
Отрисовка с использованием ресурсов текстуры
Direct3D поддерживает наложения нескольких текстур посредством концепции шагов текстурирования. Каждый шаг текстурирования содержит текстуру и операции, которые можно выполнить с текстурой. Текстуры в шагах текстурирования образуют набор текущих текстур. Дополнительные сведения см. в разделе Наложение текстур (Direct3D 9). Состояние каждой текстуры инкапсулируется в шаге текстуры.
В приложении C++ состояние каждой текстуры необходимо задать с помощью метода IDirect3DDevice9::SetTextureStageState . Передайте номер этапа (0–7) в качестве значения первого параметра. Задайте для второго параметра значение члена перечисленного типа D3DTEXTURESTAGESTATETYPE . Окончательный параметр — это значение состояния для конкретного состояния текстуры.
С помощью указателей интерфейса текстур приложение может отрисовывать смесь до восьми текстур. Задайте текущие текстуры, вызвав метод IDirect3DDevice9::SetTexture . Direct3D смешивает все текущие текстуры с примитивами, которые он отрисовывает.
Примечание
Метод IDirect3DDevice9::SetTexture увеличивает количество ссылок назначенной поверхности текстуры. Если текстура больше не требуется, необходимо задать для нее на соответствующем этапе значение NULL. Если этого не сделать, поверхность не будет освобождена, что приведет к утечке памяти.
Приложение может задать состояние упаковки текстур для текущих текстур, вызвав метод IDirect3Ddevice9::SetRenderState . Передайте значение из D3DRS_WRAP0 через D3DRS_WRAP7 в качестве значения первого параметра и используйте сочетание флагов D3DWRAPCOORD_0, D3DWRAPCOORD_1, D3DWRAPCOORD_2 и D3DWRAPCOORD_3, чтобы включить перенос в направления u, v или w.
Приложения также могут задавать перспективу текстур и состояния фильтрации текстур. См. статью Фильтрация текстур (Direct3D 9).
Связанные темы