最近在学习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

C++小项目:directx11图形程序(一):主框架的更多相关文章

  1. C++小项目:directx11图形程序(四):d3dclass

    主菜终于来了.这个d3dclass主要做的工作是dx11图形程序的初始化工作,它将创建显示表面交换链,d3d设备,d3d设备上下文,渲染目标表面,深度模板缓存:设置视口,生成投影矩阵. D3D设备:可 ...

  2. C++小项目:directx11图形程序(九):总结

    整篇文章中对于directx11的知识的介绍并不多,我也不知道怎么介绍,也应该说对于directx,它有它自己的部分,比如设备(device),设备上下文(devicecontext),顶点缓存,索引 ...

  3. C++小项目:directx11图形程序(三):graphicsclass

    这是框架的第三层graphicsclass,这个类才真正可以说是整个程序的框架,因为它组织了后面所有的成员. 代码: graphicsclass.h #pragma once #include< ...

  4. C++小项目:directx11图形程序(八):particleSysclass

    粒子系统类,粒子系统是游戏里细小元素的控制系统,虽然感觉上它对游戏的影响不大,但是其实有了它能给游戏增色不少.粒子系统控制着细小元素的生死,运动,纹理.对它的编写让我知道,游戏里的这一片从天空飘落的雪 ...

  5. C++小项目:directx11图形程序(七):modelclass

    模型类是世界空间中的表示物体的类,那么他的所做的事就是加载模型,移动模型,渲染模型 modelclass.h #pragma once #include <d3d11.h> #includ ...

  6. C++小项目:directx11图形程序(二):systemclass

    先上代码: systemclass.h #pragma once #include"graphicsclass.h" const bool FULLSCREEN = true; c ...

  7. C++小项目:directx11图形程序(六):cameraclass

    cameraclass是一个相机类,它的作用是生成非常重要的观察矩阵.本小节涉及到一点数学知识,相对前面需要只是填充,调用,算是比较有趣的吧. cameraclass.h #pragma once # ...

  8. C++小项目:directx11图形程序(五):shadersclass

    这个类是用来创建着色器并设置输入布局的. 这个类比较特殊,它创建的着色器与Effect文件有关,effect文件是用高级着色语言(hlsl)编写的. shadersclass.h #pragma on ...

  9. Android小项目之七 应用程序的更新安装

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...

随机推荐

  1. R中数据拆分和整合

    library(data.table)ID <- c(NA,1,2,2)IDTime <- c(1,2,NA,1)TimeX1 <- c(5,3,NA,2)X1X2 <- c( ...

  2. C程序中常见的内存操作错误

    对C/C++程序员来说,管理和使用虚拟存储器可能是个困难的, 容易出错的任务.与存储器有关的错误属于那些令人惊恐的错误, 因为它们在时间和空间上, 经常是在距错误源一段距离之后才表现出来. 将错误的数 ...

  3. language model —— basic model 语言模型之基础模型

    一.发展 起源:统计语言模型起源于 Ponte 和 Croft 在 1998年的 SIGIR上发表的论文 应用:语言模型的应用很多: corsslingual retrieval distribute ...

  4. <开心一笑> 码农 黑客和2B程序员之间的区别

    笔记本电脑 码农: 黑客: 2B程序员: 求2的32次方: 码农: System.out.println(Math.pow(2, 32)); 黑客: System.out.println(1L< ...

  5. 解决hibernate删除时的异常

    由于关联关系是一对多和多对一的关系,于是在代码中需要删除多的一方的对象时出现了 deleted object would be re-saved by cascade (remove deleted ...

  6. 推荐6款常用的Java开源报表制作工具

    JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表.JasperReports 支持PDF.HTML.XLS.CSV和XML文件输出格 ...

  7. 雅虎(yahoo)前端优化十四条军规

    第一条.尽可能的减少 HTTP 的请求数 (Make Fewer HTTP Requests ) http请求是要开销的,想办法减少请求数自然可以提高网页速度.常用的方法,合并css,js(将一个页面 ...

  8. javascript进阶系列专题:闭包(Closure)

    在javascript中,函数可看作是一种数据,可以赋值给变量,可以嵌套在另一个函数中. var fun = function(){ console.log("平底斜"); } f ...

  9. 分枝定界的matlab实现

    function [optSolution,optValue,exists]=BranchBound(c,A,b) % 分支定界法 % 整数规划问题标准型 % min c'*x % s.t. % A* ...

  10. 《精通C#》十四章-.NET程序集入门

    在书中,这一章节的开头说的是自定义命名空间和使用命名空间,在以我目前有限的经验来说,程序集就是一个类库经过编译之后,所生成的一个在引用命名空间,进而使用该文件中已经定义好的字段,属性以及方法的文件,以 ...