C++ DirectX мультити текстуры
Как я могу установить более одной текстуры на кубе, так как передняя часть куба имеет другую текстуру с обратной стороны....
Я устал использовать сцены, но это не сработало. например, если бы я хотел сделать кости, то у меня была бы верхняя сторона: 1 сторона будет 2..............
D3DXCreateTextureFromFile(d3ddev, //Direct3D Device
_T("image.png"), //File Name
&g_texture); //Texture handle
d3ddev->SetRenderState(D3DRS_LIGHTING, FALSE); // turn off the 3D lighting
d3ddev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); // turn off culling
d3ddev->SetRenderState(D3DRS_ZENABLE, TRUE); // turn on the z-buffer
d3ddev->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
d3ddev->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
d3ddev->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE); //Ignored
d3ddev->SetTexture(1,g_texture);
D3DXCreateTextureFromFile(d3ddev, //Direct3D Device
_T("images.png"), //File Name
&texture2); //Texture handle
d3ddev->SetRenderState(D3DRS_LIGHTING, FALSE); // turn off the 3D lighting
d3ddev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); // turn off culling
d3ddev->SetRenderState(D3DRS_ZENABLE, TRUE); // turn on the z-buffer
d3ddev->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
d3ddev->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
d3ddev->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE); //Ignored
d3ddev->SetTexture(0, texture2);
1 ответ
Что вы делаете, это создаете текстуру и помещаете 6 граней кубика в эту одну текстуру. Затем для каждого лица вы используете UV-лучи, которые соответствуют той части текстуры, у которой есть сторона кости, на которой вы хотите.
В противном случае вы рисуете 6 раз. Один раз для каждой текстуры.
Первый способ, безусловно, лучший способ сделать это, если вы можете, хотя. Меньше вызовов отрисовки лучше с DirectX 9 ...
Изменить: На самом деле, честно говоря, есть несколько других способов сделать это. Вы можете использовать объемную текстуру и поместить каждую грань кубика в один срез, а затем вывести этот срез на грань куба. Или вы можете также использовать текстуру куба и настроить ее так, чтобы текстура смотрела на нужную вам грань.
Первый метод, который я описал, все же, скорее всего, даст вам лучшую производительность.