游戏开发学习笔记-3.基本图元绘制
2015-06-11 10:55
423 查看
模型的组成分子:顶点
模型的基本单元:三角形
这次我们绘制一个简单的三角形。
此次仅作为一个简单的DEMO,为了不对引擎的代码造成破坏,我只对引擎增加了一个 获取D3D设备的方法,然后我们在WINmain的窗体代码中来 创建和初始化 顶点结构和数据。
引擎类中增加一个获取接口的函数
然后是winmain代码的修改:
首先是函数和顶点结构的声明:
然后是 创建顶点缓冲函数的实现
在这个创建顶点缓冲函数中, 首先填充自定义的顶点结构数组, 接下来获取D3D设备指针,然后操作指针,锁定顶点内存,复制我们填充的顶点数组到那块锁定的内存,然后释放锁定的内存区域。
在调用CreateObject 初始化了顶点数据后, 就可以开始画出顶点了。
运行截图:
最后附上源代码下载:
http://download.csdn.net/detail/qq578023708/8795283
模型的基本单元:三角形
这次我们绘制一个简单的三角形。
此次仅作为一个简单的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
相关文章推荐
- 获取系统前7天,当前时间,后七天
- mongodb
- 因特网回溯——在Drupal, WordPress 和Joomla出现之前
- 构造器(引用与值传递)
- 数据库设计模式笔记
- 菜鸟系列——线段树
- 求解两点(经纬度坐标)的距离
- iOS开发debug跟release版本屏蔽NSLog方法
- mysql集群 MySQL Cluster
- POJ 2387
- Swift学习笔记十一
- 不让input表单的输入框保存用户输入的历史记录
- 【Leetcode Database】Employees Earning More Than Their Managers
- windows 2003 远程桌面没有声音解决方法
- 阶段性整理 关于 mianshi 的一些问题
- 伪类“:before”,“:after”和伪元素“::before”、“::after”-CSS生成内容
- 09求500万以内的亲合数
- mpeg2 ts流PAT,PMT,SDT的定义
- eclipse+tomcat测试JSP
- 3-3画笔工具的使用