您的位置:首页 > 其它

游戏开发学习笔记-3.基本图元绘制

2015-06-11 10:55 423 查看
模型的组成分子:顶点

模型的基本单元:三角形

 

这次我们绘制一个简单的三角形。

 

此次仅作为一个简单的DEMO,为了不对引擎的代码造成破坏,我只对引擎增加了一个 获取D3D设备的方法,然后我们在WINmain的窗体代码中来 创建和初始化 顶点结构和数据。

引擎类中增加一个获取接口的函数

LPDIRECT3DDEVICE9 GetDev(); //获取D3D设备


 

LPDIRECT3DDEVICE9 Engine::GetDev()
{
return m_Dev; //直接返回接口指针
}


然后是winmain代码的修改:

 

首先是函数和顶点结构的声明:

//声明顶点格式
#define D3DFVF_CUSTOM D3DFVF_XYZRHW|D3DFVF_DIFFUSE
//创建顶点缓冲
bool CreateObject();
LPDIRECT3DDEVICE9 g_dev=NULL; //D3D设备指针
LPDIRECT3DVERTEXBUFFER9 g_VertexBuff=NULL; //顶点缓冲指针

//声明顶点结构
struct CustomVertex
{
float x,y,z,rhw;
long color;
};


 

然后是 创建顶点缓冲函数的实现

bool CreateObject()
{
//填充顶点结构
CustomVertex Vertexs[]=
{
{400,100,0.5f,1.0f,0xffff0000},
{600,350,0.5f,1.0f,0xff00ff00},
{200,350,0.5f,1.0f,0xff0000ff},
{200,350,0.5f,1.0f,0xff0000ff},
{600,350,0.5f,1.0f,0xff00ff00},
{400,600,0.5f,1.0f,0xffff0000}
};
g_dev=engine.GetDev(); //获取D3D设备指针,用于接下来的操作
if (FAILED(g_dev->CreateVertexBuffer(sizeof(Vertexs),0,D3DFVF_CUSTOM,D3DPOOL_DEFAULT,&g_VertexBuff,NULL)))
{
return false;
}
void* data; //锁定的顶点区指针
if (FAILED(g_VertexBuff->Lock(0,sizeof(Vertexs),(void**)&data,0)))
{
return false;
}
memcpy(data,Vertexs,sizeof(Vertexs));
g_VertexBuff->Unlock();
return true;

}


在这个创建顶点缓冲函数中, 首先填充自定义的顶点结构数组, 接下来获取D3D设备指针,然后操作指针,锁定顶点内存,复制我们填充的顶点数组到那块锁定的内存,然后释放锁定的内存区域。

 

在调用CreateObject 初始化了顶点数据后, 就可以开始画出顶点了。

 

void GameLoop()
{
engine.ClearScreen();
engine.StartRender(); //开始渲染

g_dev->SetStreamSource(0,g_VertexBuff,0,sizeof(CustomVertex)); //设置顶点流源数据
g_dev->SetFVF(D3DFVF_CUSTOM); //设置顶点格式
g_dev->DrawPrimitive(D3DPT_TRIANGLELIST,0,2); //画出图形

engine.EndRender(); //结束渲染
}


 

运行截图:



 

 

最后附上源代码下载:

http://download.csdn.net/detail/qq578023708/8795283

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: