С++ 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);

person Ramilol    schedule 08.10.2010    source источник


Ответы (1)


Что вы делаете, так это создаете текстуру и помещаете 6 граней игральных костей в эту текстуру. Затем для каждой грани вы используете UV, соответствующие той части текстуры, на которой находится та сторона кубика, которую вы хотите.

В противном случае вы рисуете 6 раз. Один раз для каждой текстуры.

Первый метод, безусловно, лучший способ сделать это, если вы можете. Меньше вызовов отрисовки лучше с DirectX 9...

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

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

person Goz    schedule 08.10.2010