这是框架的第三层graphicsclass,这个类才真正可以说是整个程序的框架,因为它组织了后面所有的成员。

代码:

graphicsclass.h

 #pragma once
#include<Windows.h>
#include <d3d11.h>
#include <d3dcompiler.h>
#include <D3DX11.h>
#include <xnamath.h> #include"cameraclass.h"
#include"d3dclass.h"
#include"modelclass.h"
#include"shaderclass.h"
#include"inputclass.h"
#include"particleSysclass.h" #pragma comment(lib,"d3dx11.lib")
#pragma comment(lib,"d3d11.lib")
#pragma comment(lib,"d3dcompiler.lib")
class graphicsclass
{
public:
graphicsclass();
~graphicsclass();
bool Initialize(HWND hWnd );
void Shutdown();
bool Frame(); private:
d3dclass* m_d3d;
shaderclass* m_shader;
cameraclass* m_camera;
modelclass* m_model;
modelclass* m_model1;
inputclass* m_input;
particleSysclass *m_particles; ID3D11Device* m_device;
ID3D11DeviceContext* m_context;
};

从这个头文件里可以看到,首先包含了directx11开发需要用到的头文件和lib,其次包含了我自己写的也是框架出现过的类的头文件。从私有数据成员里也可窥见一斑。

但是多了两个

ID3D11Device* m_device;
ID3D11DeviceContext* m_context;

这样的指针。简单介绍一下,ID3D11Device是dx11的设备对象,ID3D11DeviceContext是dx11的设备上下文对象。在当前类里面并不涉及他们的创建。我们在这里申明它只是用来起一个桥梁作用。

graphicsclass.cpp

 #include "graphicsclass.h"

 graphicsclass::graphicsclass()
{
}
graphicsclass::~graphicsclass()
{
}
bool graphicsclass::Initialize(HWND hWnd)
{ m_d3d = new d3dclass;
m_d3d->Initialize(hWnd);
m_d3d->Getdevice(m_device);
m_d3d->Getcontext(m_context); m_shader = new shaderclass;
m_shader->Initialize(m_device, m_context); m_camera = new cameraclass; m_model = new modelclass;
m_model->Initialize(m_device, L"cube.txt", L"dx11.dds"); m_model1 = new modelclass;
m_model1->Initialize(m_device, L"cube.txt", L"stone.dds"); m_input = new inputclass;
m_input->Initialize(hWnd); m_particles = new particleSysclass;
m_particles->Initialize(m_device, L"star.dds", ); return true;
}
void graphicsclass::Shutdown()
{
m_input->Shutdown();
delete m_input; m_model1->Shutdown();
delete m_model1; m_model->Shutdown();
delete m_model; delete m_camera; m_shader->Shutdown();
delete m_shader; m_d3d->Shutdown();
delete m_d3d;
}
bool graphicsclass::Frame()
{
if (m_input->keydown(DIK_ESCAPE))
{
return false;
} static float t = ;
t += 0.002f; XMMATRIX view,pro;
m_d3d->Getpromtrx(pro); static float r = , n = , m = ;
int a = , b = , z = ;
if (m_input->mouseinput())
{
m_input->GetmouseI(a, b); }
r += a,n += b; m += z;
m_camera->SetPositon(, , -);
m_camera->SetRotation(n/, r/, );
m_camera->Getviewmatrix(view); XMVECTOR axis = { , , };
m_model->Setposition(, , );
m_model1->Setposition(, , );
m_model1->RotationAxis(axis, );
m_model->RotationAxis(axis, t); ID3D11VertexShader* vertexshader;
ID3D11PixelShader* pixelshader;
m_shader->GetShaders(vertexshader, pixelshader); m_d3d->Beginrender(, , , ); m_model->Render(m_context, view, pro, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST, vertexshader, pixelshader);
m_model1->Render(m_context, view, pro, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST, vertexshader, pixelshader);
m_particles->Render(m_context, view, pro, vertexshader, pixelshader); m_d3d->Endrender();
return true;
}

这段代码,我个人的感觉是非常的整齐。

Initialize()函数:就是创建对象,初始化,创建对象,初始化.....。不过与众不同的是,使用了m_d3d的Getdevice()和Getcontext()。为什么要使用呢?因为后面对象的初始化要用到ID3D11Device和ID3D11DeviceContext对象啊。这就是我所说的起到的桥梁的作用

Shutdown()函数:依然是调用组件的Shutdown()函数并释放他们,起到一个析构函数的作用

Frame()函数:调用组件的各个函数,可能是输入检测,可能是设置位置,可能是获取组件的成员,也可能是渲染。

依然好像没有涉及dx11的图形渲染。但是我们可以看到,涉及图形渲染的部分一定就在这个类所管理的组件里面了。还是继续看接下来的对各个组件的介绍吧。

C++小项目:directx11图形程序(三):graphicsclass的更多相关文章

  1. C++小项目:directx11图形程序(一):主框架

    最近在学习DIRECTX11,在学习过程中编写了一个程序,到现在发现这个程序也有几行代码了,结构还算整齐,就想把这个程序分享出来,其中涉及到了C++程序的架构,windows窗口程序编写,和Direc ...

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

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

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

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

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

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

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

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

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

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

  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. 利用scrapy-splash爬取JS生成的动态页面

    目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无 ...

  2. Lua热更系统

    1.介绍 使用脚本开发游戏业务逻辑其中一个好处就是代码可线上热更,不停机修复bug.而热更代码的写法与需要被热更的文件的代码又有着密切的关系,本文介绍一种热更方法. 2.热更原理 Lua提供一个叫re ...

  3. Eclipse 快捷键 (应用中自己总结)

    调试快捷键: 1: resume(F8) 调试中用来直接跳到下一个断点 2:  用来结束JVM 3:step into (F5)跳入函数 4: step over (F6)单步执行 5:step re ...

  4. 解决IE6,IE7下子元素使用position:relative、父元素使用overflow:auto后,子元素不随着滚动条滚动的问题

    解决IE6,IE7下子元素使用position:relative.父元素使用overflow:auto后,子元素不随着滚动条滚动的问题   在IE6,IE7下,子元素使用position:relati ...

  5. (十七)linux网络命令 vconfig ifconfig

    增删VLAN    vconfig add eth0 10    vconfig rem eth0.10重启网卡    ifconfig eth0.101 up    ifconfig eth0.10 ...

  6. AWT编程学习01(未完成)

    本文资料来源:<java疯狂讲义> 作者:李刚 终于要学习这一部分了~~虽然很多人(明明是绝大多数的人)说学这个没有用...而且有点过时了...但我觉得很有意思啊...感兴趣就学~~反正多 ...

  7. python实现查看目录下重复的文件

    该python 脚本有以下三个功能: 1. 实现查看目录下重复的文件,输出文件按修改时间升序排列 2. 将按修改时间排列比较旧的.可删除的文件列出来 3. 按目录对重复文件进行统计,比如,目录/tmp ...

  8. centos6.8服务器部署svn

    1. 安装svn yum list svn* yum install subversion 2. 测试svn安装是否成功 svnserve –version 3. 创建代码仓库 mkdir /usr/ ...

  9. 【转】OPENGL基本API概述

    本文信息资源来源于网络,欢迎转载!转载时请保留本文链接(http://www.shopliyang.com.cn/)! OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库. gl是核 ...

  10. ON DUPLICATE KEY UPDATE重复插入时更新

    mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (c ...