|
Следуя моим урокам, вы уже научились создавать треугольник. Значит, вы уже можете создавать объекты. Но сами цветные объекты выглядят немного некрасиво, лучше бы их затекстурировать. Для этого вам надо во-первых изменить теп точки, добавить в нее текстурные координаты:
struct CUSTOMVERTEX
{
D3DXVECTOR3 pos;
float diffuse;
float tu, tv;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE|D3DFVF_TEX1)
Теперь tu и tv –текстурные координаты вершины. Внимание: не забудьте поменять содержание и размер структуры, содержащей параметры точек, а то будут глюки и работать ничего не будет. Но теперь вам надо создать саму текстуру. Для этого вы должны найти функцию InitApp() и добавит туда:
LPDIRECT3DTEXTURE8 g_pTexture; // в начало файла
D3DXCreateTextureFile( g_pd3dDevice, "Texname.bmp", &g_pTexture );
Теперь вы загрузили свой текстуру как g_pTexture. Дпльше вам надо перед прорисовкой указать, чтобы она использовалась при рендеринге. Найдите Render() и вставьте перед DrawPrimitive следуюшее:
g_pd3dDevice->SetTexture( 0, g_pTexture );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
Здесь SetTexture задает текущюю текстуру, а SetTextureStageState – ее параметры.
Теперь после рендеринга вы увидите текстурированный объект.
P.S. Текстурные координаты находятся в пределах от 0 до 1. Если координата больше 1 и, например, равна 2, то текстура будет наложена 2 раза.
|