0

キューブの前面と背面のテクスチャが異なるように、キューブに複数のテクスチャを設定するにはどうすればよいですか...

ステージを使うのに疲れましたが、うまくいきませんでした。たとえば、サイコロを作りたい場合、上が 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);
4

1 に答える 1

1

テクスチャを作成し、サイコロの 6 つの面をその 1 つのテクスチャに配置します。次に、面ごとに、必要なサイコロ面を持つテクスチャの部分に対応する UV を使用します。

それができない場合は、6 回引きます。テクスチャごとに 1 回。

ただし、可能であれば、前者の方法が断然最良の方法です。DirectX 9 では、ドロー コールが少ないほど良い ...

編集:実際には、公平を期すために、他にもいくつかの方法があります。ボリューム テクスチャを使用して、各サイコロの面を 1 つのスライスに配置し、そのスライスを立方体の面にレンダリングできます。または、立方体テクスチャを使用して、必要な面にテクスチャ ルックアップが発生するように設定することもできます。

最初に説明した方法でも、おそらく最高のパフォーマンスが得られます。

于 2010-10-08T22:14:19.823 に答える