最近在学习DIRECTX11,在学习过程中编写了一个程序,到现在发现这个程序也有几行代码了,结构还算整齐,就想把这个程序分享出来,其中涉及到了C++程序的架构,windows窗口程序编写,和DirectX11图形程序的知识。希望大家喜欢。程序风格和很多知识来源于这个网站:http://www.rastertek.com/index.html 。大家想深入学习Dx的可以去看看。

  先说程序框架吧。我的程序结构及文件如图所示:

在这里,main.cpp是入口函数(WinMain)所在的文件,其余的既有cpp文件又有h文件的都是类。

main文件里生成了system对象,system类的成员里面有graphic对象,然后则是graphic类里面生成了剩余所有类的对象,并使用了了他们的方法。

各个类的作用

system类:生成windows窗口,初始化graphic类,设置windows消息循环,在消息循环里调用graphic的渲染函数。

graphic类:初始化各个组件,调用各个组件的方法。它是组织各个组件的管家。

D3D类:生成交换链,D3D设备对象,D3D设备上下文对象(devicecontext,简称DC,和MFC里的CDC,windows特有数据结构HDC,应该是同一种东西。)生成深度缓存,渲染表面,设置视口,设置视口后很得到投影矩阵。

input类:创建硬件(鼠标、键盘)设备对象,获取设备状态。

shader类:创建着色器,设置输入布局。这个程序里只创建两个着色器,顶点着色器和像素着色器。

 camera类:设置观察者(eye)和观察目标(at)位置,最终输出一个观察矩阵。

model类:载入模型和模型用到的纹理文件,创建模型的顶点缓存,索引缓存,常量缓存,及取样器状态。并提供一个将模型渲染出来的方法。

particlesys类:这是粒子系统类,用来生成粒子特效,它控制着粒子的生死,运动,和纹理。

接下来将列出各个类的代码,并介绍其中有关的directx的知识。

本小节就先说main.cpp吧。先上代码:

 #include"systemclass.h"

 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)
{
systemclass* system;
bool result; system = new systemclass;
if (!system)
{
return ;
} result = system->Initialize();
if (result)
{
system->Run();
} system->Shutdown();
delete system;
system = ; return ;
}

  可以看到这里只有一个WinMain主函数,也是入口函数。函数非常简单,只是单纯的生成了一个systemclass对象,然后调用它的Initialize()方法,成功后再调用它的Run()方法,再调用Shutdown()方法,最后释放systemclass对象。

  它看起来好像什么都没做,但是它确确实实是整个程序的框架。我们只有用一种栈的思维去看这个函数,才能看出程序内部是怎么工作的。接下来介绍systemclass,你就能进一步了解这这个main.cpp里做了什么了。1

最新文章

  1. avalonjs
  2. Fragment 与 Fragment 相互传值
  3. ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544
  4. Linux进程间通信IPC学习笔记之同步一(线程、互斥锁和条件变量)
  5. [SignalR]在非Hub继承类中使用脚本方法
  6. 聊聊dmClock算法
  7. 算法模板——sap网络最大流 3(递归+邻接矩阵)
  8. hihocoder Challenge 29 D. 不上升序列
  9. vue.js+socket.io+express+mongodb打造在线聊天[二]
  10. 从字节码和JVM的角度解析Java核心类String的不可变特性
  11. Python内置函数(2)——all
  12. golang IO streaming
  13. MySQL 全文检索 ngram Mybatis
  14. NOIP 2000 乘积最大
  15. Java+大数据开发——Hadoop集群环境搭建(一)
  16. ssh中的 Connection closed by ***
  17. ajax跨域名
  18. 43. Multiply Strings 字符串表示的大数乘法
  19. 安装淘宝cnpm镜像
  20. js继承——扩展Object方式实现继承

热门文章

  1. JavaScript中Ajax
  2. arm-linux-androideabi-addr2line
  3. 采用dom4j和反射模拟Spring框架的依赖注入功能
  4. scss/css 中添加ie hack
  5. Jquery实现账单全部选中和部分选中管理
  6. Apache Commons BeanUtils
  7. ActiveReport 同一单元格内图片跟文字按条件显示
  8. SPSS数据分析-时间序列模型
  9. 50道 Sql语句题
  10. 51nod 1244 莫比乌斯函数之和