【问题标题】:Direct3D C++ texture mappingDirect3D C++ 纹理映射
【发布时间】:2011-11-16 05:57:14
【问题描述】:

大家好,谁能帮我在 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);

我只是想看看如何对正方形进行纹理化,以便继续对整个环境进行纹理化?

【问题讨论】:

    标签: c++ directx textures texture-mapping vertex-buffer


    【解决方案1】:

    如果你想实现纹理映射,你必须将你的顶点结构更改为

    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-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多