Direct3D C++;纹理映射 嘿,有人能帮助我在Direct3D C++中进行纹理映射。我已经创建了一个基本的游戏,并希望纹理的环境。我看了很多在线教程,但到目前为止运气不好
我正在为我的图形代码创建自定义顶点:Direct3D C++;纹理映射 嘿,有人能帮助我在Direct3D C++中进行纹理映射。我已经创建了一个基本的游戏,并希望纹理的环境。我看了很多在线教程,但到目前为止运气不好,c++,directx,textures,texture-mapping,vertex-buffer,C++,Directx,Textures,Texture Mapping,Vertex Buffer,我正在为我的图形代码创建自定义顶点: 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},
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);
我只是想看看如何对正方形进行纹理处理,以便继续对整个环境进行纹理处理?如果要实现纹理映射,必须将顶点结构更改为
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了解如何执行此操作
如果您只想应用纹理(而不是纹理贴图和逐顶点颜色,如果您可以简单地应用纹理,为什么要为每个顶点指定颜色???),那么请使用我编写的顶点结构,而不是教程中的结构