0

Direct3D C++ でのテクスチャ マッピングを手伝ってくれる人はいますか。基本的なゲームを作成し、環境にテクスチャを適用したいと考えています。私は数多くのオンラインチュートリアルを見てきましたが、これまでのところうまくいきませんでした

描画コード用のカスタム頂点を作成しています:

struct CUSTOMVERTEX
{
    FLOAT x, y, z; // The position for the vertex
    DWORD color;        // The vertex color
};

これは私が正方形を描く方法です:

CUSTOMVERTEX g_Vertices[] =
{

   {-1.0f,-1.0f,-1.0f,0xFF0000FF},{-1.0f, 1.0f,-1.0f,0xFF0000FF},
   { 1.0f, 1.0f,-1.0f,0xFF0000FF}, { 1.0f, 1.0f,-1.0f,0xFF0000FF},
   { 1.0f,-1.0f,-1.0f,0xFF0000FF},{-1.0f,-1.0f,-1.0f,0xFF0000FF},

};

バッファは次のとおりです。

//*************************** Vertex Buffer ****************************
if( FAILED( g_pd3dDevice->CreateVertexBuffer( numberOfVertecies*sizeof(CUSTOMVERTEX), 
        0 /* Usage */, D3DFVF_CUSTOMVERTEX,D3DPOOL_MANAGED, &g_pVB, NULL ) ) )
    MessageBox(hwnd,"Vertex Buffer problem",NULL,NULL);

VOID* pVertices;

if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 ) ) )
    MessageBox(hwnd,"Vertex Lock Problem",NULL,NULL);

memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );

g_pVB->Unlock();

そしてここに正方形があります:

g_pd3dDevice->SetTransform( D3DTS_WORLD, &g_matWorld );
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 20);

環境全体のテクスチャリングに進むことができるように、正方形をテクスチャリングする方法を知りたいだけですか?

4

1 に答える 1

2

テクスチャ マッピングを実装する場合は、頂点構造を次のように変更する必要があります。

struct CUSTOMVERTEX
{
    FLOAT x, y, z; // The position for the vertex
    FLOAT tu, tv; // Texture Coordinates
};

頂点を作成すると、そのカラー値がテクスチャ座標に変更されます ((0,0) 座標がテクスチャ マップの左上隅に対応することを忘れないでください。

また、頂点ストリーム宣言を調整する必要があります。

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)

D3DXCreateTextureFromFile() を使用してテクスチャをロードします。また、読み込んだテクスチャを使用するようにデバイスに指示する必要もあります。その方法については、DirectX SDK チュートリアル 5 を参照してください。

テクスチャを適用するだけの場合 (テクスチャ マッピングと頂点ごとの色ではなく、テクスチャを単純に適用できるのに、なぜ各頂点に色を付けたいのでしょうか???) ではなく、私が書いた頂点構造体を使用してください。チュートリアルで。

于 2011-11-15T21:57:14.137 に答える