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

来源:互联网 发布:淘宝4钻店铺值多少钱 编辑:程序博客网 时间:2024/05/18 02:14

模型的组成分子:顶点

模型的基本单元:三角形

 

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

 

此次仅作为一个简单的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

 

0 0
原创粉丝点击