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 ...

Изменить: На самом деле, честно говоря, есть несколько других способов сделать это. Вы можете использовать объемную текстуру и поместить каждую грань кубика в один срез, а затем вывести этот срез на грань куба. Или вы можете также использовать текстуру куба и настроить ее так, чтобы текстура смотрела на нужную вам грань.

Первый метод, который я описал, все же, скорее всего, даст вам лучшую производительность.

Другие вопросы по тегам