
Directx11
文章平均质量分 89
水果先生
Tencent AI
展开
-
摸爬滚打DirectX11_day02——VS2010+DirectX11的环境配置
由于本人希望从DirectX11的基础sample开始学习,所以选择了VS2010+Microsoft DirectX SDK(June 2010)的开发环境学习龙书DirectX11版本,运行课本的Sample必须要在VS2010的环境下,不然会报错,想要完全专注于DX11的学习,那么请选择VS2010。安装Microsoft DirectX SDK(June 2010)安装失败 S1023的解决原创 2016-12-09 19:59:38 · 2435 阅读 · 0 评论 -
摸爬滚打DirectX11_day_11——三维天空
在计算机的三维世界中,三维天空的绘制肯定不可能像现实生活中的天空一样,这种天空就类似于一个足够大的容器,这个容器足以罩住我们的视线,可以是一个立方体,也可以是一个半球,甚至是一个足够大的平面。三维天空的技术主要包括: 1.平面型天空,代表用一个平面放到玩家头顶,真实感很低 2.天空穹庐, 真实感最强,但是涉及到天空无缝斜街素材匮乏的限制。 3.天空盒,天空盒由24个顶点,6个面组成的立方体,可原创 2017-02-04 19:15:25 · 562 阅读 · 0 评论 -
摸爬滚打DirectX11_day_11——三维粒子系统
粒子系统广泛应用于计算机中各种模糊景物的模拟,包括火焰,爆炸,烟雾,水流,火花,落叶,云雾雪,尘,流行等等抽象视觉效果。这些物体模型很难再计算机中用具体的形状和大小来描述。粒子几何特征十分简单,可以用一个像素或一个小多边形来表示。粒子系统最大的缺陷是,当粒子数量巨大时,对机器的性能要求更加苛刻。粒子系统三要素1.群体性 粒子系统由大量可见元素构成。 2.统一性 每个元素都具有相同的表现规律。原创 2017-02-04 19:24:04 · 1159 阅读 · 1 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 1~3章
Direct3D使用所谓的左手坐标系(left-handed coordinate system)。假如你把左手手指指向x轴正方向,然后朝y轴正方向弯曲四指,大拇指就会指向z轴正方向。图1.5展示了左手坐标系和右手坐标系之间的区别。 左边是左手坐标系,z轴正方向向页面内部延伸。右边是右手坐标系,z轴正方向向页面外部延伸。观察右手坐标系。假如你把右手手指指向x轴正方向,然后朝y轴正方向弯曲四指原创 2017-02-16 15:31:50 · 1659 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 4.1 初识Direct3D
概述Direct3D是一种底层绘图API(application programming interface,应用程序接口),它可以让我们可以通过3D硬件加速绘制3D世界。从本质上讲,Direct3D提供的是一组软件接口,我们可以通过这组接口来控制绘图硬件。在Direct3D 9中,设备可以只支持Direct3D 9的部分功能;所以,当一个Direct3D 9应用程序要使用某一特性时,应用程序就必须原创 2017-02-16 16:26:46 · 972 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 4.2Direct3D进行初始化
我们将Direct3D的初始化过程分为如下几个步骤:1.使用D3D11CreateDevice方法创建ID3D11Device和ID3D11DeviceContext。2.使用ID3D11Device::CheckMultisampleQualityLevels方法检测设备支持的4X多重采样质量等级。3.填充一个IDXGI_SWAP_CHAIN_DESC结构体,该结构体描述了所要创建的交换链的特原创 2017-02-16 17:21:26 · 2246 阅读 · 0 评论 -
摸爬滚打DirectX11_day_09——模板技术
模板缓存是一个专门用于制作特效的离屏缓存。模板缓存可以用于实现镜面特效。模板测试对于特效的绘制需要精确到每个像素。先对娴熟进行检查,最后得出是否需要绘制的结论,从而实现特效。模板测试就是这个检查的过程。模板测试过程1.创建模板缓冲区与深度缓冲区同时创建,把深度缓冲区的一部分作为模板缓冲区使用。2.清除模板缓冲区 在使用模板测试渲染每一帧之前,都需要先清除上一帧保存在模板缓冲区中的模板值。镜面特效的原创 2017-01-17 18:48:58 · 308 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 4.3 计时和动画
要正确实现动画效果,我们就必须记录时间,尤其是要精确测量动画帧之间的时间间隔。当帧速率高时,帧之间的时间间隔就会很短;所以,我们需要一个高精确度计时器。性能计时器我们使用性能计时器(或性能计数器)来实现精确的时间测量。为了使用用于查询性能计时器的Win32函数,我们必须在代码中添加包含语句“#include<windows.h>”。性能计时器采用的时间单位称为计数(count)。我们使用QueryP原创 2017-02-16 18:03:00 · 1265 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 4.4 演示程序框架
4.4.1 D3DApp4.4.2 非框架方法4.4.3 框架方法4.4.4 帧的统计数值4.4.5 消息处理函数4.4.6 全屏模式4.4.7 初始化Direct3D演示程序本书中的演示程序均使用d3dUtil.h、d3dApp.h、d3dApp.cpp文件中的代码,这些文件可以从本书网站下载。由于本书的第Ⅱ部分和第Ⅲ部分的所有演示程序都会用到些常用文件,所以我们把些文件保存在了Co原创 2017-02-17 13:51:10 · 678 阅读 · 0 评论 -
摸爬滚打DirectX11_day10——游戏摄像机
摄像机类的设计右分量,上分量,观察分量和位置分量,可以确定一个摄像机相对于世界坐标系的位置和朝向。(这几个分量都是用向量表示的,实际上来说是为摄像机定义了一个局部坐标系)左分量,上分量和观察分量定义了摄像机在世界坐标系中的朝向,即方向向量。他们之间两两之间相互垂直,且都是单位向量,可以将这3个向量完全理解为三维坐标系的X,Y,Z轴。关于向量计算的函数讲解D3DXVec3Normalize函数用来对向原创 2017-01-29 12:57:02 · 546 阅读 · 0 评论 -
关于WIN10 VS2015下调试DirectX11 DEMO错误的解决方案
http://www.d3dcoder.net/Data/Book4/d3d11Win10.htm原创 2017-02-25 15:43:48 · 960 阅读 · 0 评论 -
Direct3D11学习环境搭建
参考链接成功地创建了一个空的Win32项目。但是要能创建DirectX项目示例,我们还需要做一些事情。链接DirectX库文件1.编译Effect库 Effect框架是微软额外提供的一个程序框架,用于管理着色器程序和渲染状态的工具代码,使用户在程序中使用shader时与C++程序更方便地衔接。这个框架对于编写D3D程序来说不是必需的,好比D3DX库对于D3D程序来说也是可有可无的。但它毕竟大大方便原创 2017-02-17 15:15:23 · 3652 阅读 · 2 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 5 渲染管线(一)
渲染管线是指:在给定一个3D场景的几何描述及一架已确定位置和方向的虚拟摄像机(virtual camera)时,根据虚拟摄像机的视角生成2D图像的一系列步骤(如图5.1所示)。本章的内容大部分是理论性的——下一章才会把理论用于实践。在我们开始学习渲染管线之前,读者应该先了解两个基本概念:一是构成3D视觉的基本要素(也就是,研究如何通过2D屏幕来呈现3D场景);二是讲解如何在Direct3D中以数学方原创 2017-03-10 16:06:50 · 531 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 5 渲染管线(二)
输入装配阶段图元拓扑顶点是以一个叫做顶点缓冲区的Direct3D数据结构的形式绑定到图形管线的。顶点缓冲区只是在连续的内存中存储了一个顶点列表。它并没有说明以何种方式组织顶点,形成几何图元。例如,是应该把顶点缓冲区中的每两个顶点解释为一条直线,还是应该把顶点缓冲区中的每三个顶点解释为一个三角形?我们通过指定图元拓扑来告诉Direct3D以何种方式组成几何图元:void ID3D11Device::I原创 2017-03-12 14:00:16 · 694 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 5 渲染管线(三)
规范化深度值你可能认为在投影之后可以丢弃原始的3D z坐标,因为所有的投影点已经摆放在2D投影窗口上,形成了我们最终看到的2D图像,不会再使用3D z坐标了。其实不然,我们仍然需要为深度缓存算法提供3D深度信息。就如同Direct3D希望我们把x、y投影坐标映射到一个规范化区间一样,Direct3D也希望我们将深度坐标映射到一个规范化区间[0,1]中。所以,我们需要创建一个保序函数(order pr原创 2017-03-12 14:19:41 · 665 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(一)
顶点和顶点布局在Direct3D中,顶点由空间位置和各种附加属性组成,Direct3D可以让我们灵活地建立属于我们自己的顶点格式;换句话说,它允许我们定义顶点的分量。要创建一个自定义的顶点格式,我们必须先创建一个包含顶点数据的结构体。例如,下面是两种不同类型的顶点格式;一个由位置和颜色组成,另一个由位置、法线和纹理坐标组成。struct Vertex1 { XMFLOAT3 Pos;原创 2017-03-12 14:21:53 · 1922 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(二)顶点着色器
下面是一个顶点着色器的示例,它的代码非常简单:cbuffer cbPerObject { float4x4 gWVP; }; void VS(float3 iPosL : POSITION, float4 iColor : COLOR, out float4 oPosH : SV_POSITION, out float4 oColor : COLOR) {原创 2017-03-13 16:49:46 · 683 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(三)像素着色器
由顶点着色器(或几何着色器)输出的顶点属性都已经过了插值处理。这些插值随后会作为像素着色器(pixel shader)的输入数据传入像素着色器。假设这里没有几何着色器,图6.5说明了目前顶点数据的流动过程。 图6.5 D3D11_INPUT_ELEMENT_DESC数组为每个顶点元素指定了一个关联语义,而顶点着色器的每个参数都有一个附加语义。这些语义描述了顶点元素和顶点着色器参数之间的对应关系原创 2017-03-13 16:57:42 · 648 阅读 · 0 评论 -
摸爬滚打DirectX11_day10——三维地形的构建
以上三幅图概括了三微地形模拟的大体走向与思路。图1描绘的是在同一平面上的三角形网格组成的一个大的矩形区域。显然他是一个二维的平面,图中的每一个顶点都可以用一个二维的坐标(x,y)来唯一表示。图2我们为每个顶点赋予了一个高度,那么图1就变成了一个三维图形,对于每个顶点可以用一个三维坐标(x,y,z)来唯一表示。图3我们为其镀上纹理,其实也就是一个纹理包装的过程。高度图高度图说白了就是一组连续的数组,这原创 2017-01-31 12:25:15 · 768 阅读 · 0 评论 -
摸爬滚打DirectX11_day07——DirectInput接口
在普通的Windows程序中,用户通过键盘或者鼠标输入的消息并不是通过应用程序直接处理的,二十通过Windows的消息机制转发Windows操作系统对这些消息进行响应后,通过回调应用程序的窗口过程函数进行消息处理。但是这显然满足不了对于性能要求更高的游戏程序,在DirectX中,微软为我们提供了名为DirectInput接口对象来实现用户输入的。DirectInput直接和硬件驱动打交道,因此处理起原创 2016-12-18 14:14:28 · 1882 阅读 · 0 评论 -
摸爬滚打DirectX11_day08——深度测试与Z缓存(深度缓存)
微软提供了深度缓存(Z缓存)配套着深度测试技术,来实现物体之间相互的遮挡关系。深度测试类似于一口井,每个物体都被赋予了一个深度值,深度越深的物体离井口越远,深度越浅,离井口就越近。深度浅的物体会把深度深的物体遮挡。 井口的深度也就是物体在世界坐标中矩阵的Z坐标值。深度缓冲区(Z缓存),Direct3D中用来存储(只存储深度信息)绘制到屏幕上的每个像素点的深度信息的一块内存缓冲区,如果屏幕分辨率为8原创 2016-12-22 19:22:22 · 1861 阅读 · 0 评论 -
摸爬滚打DirectX11_day01——VS2015与DirectX11的配置
**什么是DirectX11?**DirectX,微软提供的应用程序接口集(APIs),被设计为在运行 windows 操作系统平台上用来提供给开发人员控制硬件的底层接口。它的各个组件提供了访问不同硬件的能力,包括图形(显卡),声音(声卡),GPU,输入设备以及所有的标准接口(译者注:比如游戏操纵杆,鼠标等)。DirectX 是首先被游戏制作者用来在 Windows 和 Xbox 平台上使用的标准原创 2016-11-29 23:19:36 · 4010 阅读 · 0 评论 -
摸爬滚打DirectX11_day03——关于COM接口对象的一些介绍
目前Windows平台下的开发,主要是以C++与COM接口配DirectX为主要方案。COM(Component Object Model,组件对象模型)是一项能够使DirectX独立于编程语言并向下兼容的技术。我们常称COM对象为接口,可将其视为一个C++的类来使用。在以C++语言和COM接口方式开发的DirectX应用程序中,可以直接访问COM接口和对象。COM接口对象说白了就是一组具有特定功能原创 2016-12-11 10:30:49 · 757 阅读 · 0 评论 -
摸爬滚打DirectX11_day03——Direct3d程序流程分析
3D游戏编程其实就是一门渲染的艺术。从上图可以得知,Direct3d程序的基本结构主要可以分为以下5个部分。创建一个Windows窗口Direct3d的初始化消息循环渲染图形结束应用程序,消除在初始化阶段所创建的COM对象,并退出程序DirectX程序的开发过程就是一个基于SDK包开发的过程。和普通的WIN32程序开发没有很大的区别,首先创建一个具有主窗口的应用程序,并在显示和更新窗口之原创 2016-12-11 09:57:27 · 687 阅读 · 0 评论 -
摸爬滚打DirectX11_day03——Direct3D的初始化
Direct3D的初始化分为四步创建Direct3D接口对象(注意区别Direct3D设备接口)获取设备的硬件信息填充D3DPRESENT_PARAMETERS结构体创建Direct3D设备接口1.创建Direct3D接口对象LPDIRECT3D pD3D=NULL;if(NULL==(pD3D=Direct3DCreate9(D3D_SDK_VERSION))) return原创 2016-12-11 11:12:53 · 848 阅读 · 0 评论 -
摸爬滚打DirectX11_day03——DirectX9中的固定功能渲染流水线体系(已移除,了解)
DirectX9中的固定功能渲染流水线体系空间中的物体是用三维坐标来表示的,但是由于我们的显示器是二维的,那么想要实现三维场景的渲染,首先要将三维坐标在退回到二维坐标的表示(也就是世界坐标到屏幕坐标的转换,这也是Direct3D中的顶点坐标交换,也就是摄像机将三维场景拍摄到二维相片上的一种转换,通常用矩阵来表示)。在固定功能渲染流水线体系中,主要分为两个阶段第一阶段:坐标转换以及光照处理(T&L阶段原创 2016-12-11 13:59:27 · 608 阅读 · 0 评论 -
摸爬滚打DirectX11_day03——Direct3D(DX9)中二维文本的绘制
在DX11中已经移除了这两个函数,所以DX11很难绘制中文文字(只能通过第三方库和软件),所以DX11可能很难再国内普及,不知道DX12中的绘制文字有没有方便一些,此处留下疑问。1.D3DXCreateFont函数 2.DrawText函数原创 2016-12-11 14:09:45 · 2234 阅读 · 0 评论 -
摸爬滚打DirectX11_day03——Direct3D中的渲染五部曲
对于Direct3D中的渲染函数,我们每秒钟都要调用成千上万次。渲染五部曲清屏操作开始场景正式绘制结束场景翻转显示注意:每一步的操作的需要Direct3D初始化过程中创建的设备接口来实现。1.清屏操作IDirect3DDevice9::Clear//g_pd3dDevice表示的是设备对象g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOL原创 2016-12-11 14:29:06 · 856 阅读 · 0 评论 -
摸爬滚打DirectX11_day03——如何获取每秒帧数(FPS)
通过静态变量来实现原创 2016-12-11 14:33:41 · 2279 阅读 · 0 评论 -
摸爬滚打DirectX11_day04——顶点缓存介绍
在计算机所描绘的3D世界中,所有的物体模型都是通过多边形网格(三角形,四边形)来逼近表示的,之后在这些网格轮廓的表面贴上相应的图片。任何物体都可以用三角形网格来逼近表示。(这里的多边形不仅仅有顶点的坐标位置,还含有颜色等其他属性)顶点缓存如果想在Direct3D中创建物体,那么首先就要创建可以构成物体的所有顶点结构。而这些顶点的数据保存在顶点缓存中(某一块内存空间或显卡的显存中)。使用顶点缓存设计顶原创 2016-12-12 17:21:39 · 734 阅读 · 0 评论 -
摸爬滚打DirectX11_day04——关于D3D中的AGP内存,系统内存和显存
AGP内存(非本地显存)很久以前,显卡的内存十分小,所以要想运行纹理较多的3D程序,就需要想系统内存借点用用了,这就时AGP内存的由来。通常我们可以在BIOS中的AGP Aperture中设置显卡可以使用系统内存的最大值,通常是64M。系统内存其实就是我们平时插在电脑主机上的内存条。关于速度,系统内存对于CPU的读写速度最快,但是当显卡要用系统内存的话就会慢很多。AGP内存在显卡使用时的速度一般,没原创 2016-12-12 17:22:23 · 573 阅读 · 0 评论 -
摸爬滚打DirectX11_day06——光照模型与光源类型
在Direct3D中巧妙的运用光照可以增强3D场景的真实感。光照模型1.环境光 环境光没有位置或者方向上的特征,只有一个颜色亮度值,并且不会衰减,所以在所有方向和所有物体表面上投射的环境光的数量是恒定不变,所以环境光一般用于较低代价和开销的模拟光照。pd3dDevice->SetRenderState(D3DRS_AMBIENT,D3DCOLOR_XRGB(36,36,36));2.漫反射光太阳的原创 2016-12-16 22:34:34 · 763 阅读 · 0 评论 -
摸爬滚打DirectX11_day06——材质与顶点法线
材质对于光照计算来说,光照和材质两者缺一不可,物体表面的材质属性决定了它能反射什么颜色的光线以及反射多少光线。顶点法线使用光照绘制3D场景时,计算物体顶点的颜色值除了需要知道光源和物体的材质信息外,好需要知道每个顶点的法向量,根据光线的入射方向与法向量的夹角,计算发射光线的最终颜色值。顶点法线和面法线面法线就是垂直于三角形平面的一条法线。 从法线的定义来看,顶点是不存在法线的。那么顶点法线究竟是什原创 2016-12-16 22:46:25 · 518 阅读 · 0 评论 -
摸爬滚打DirectX11_day05——索引缓存
关于顶点缓存,如果想要绘制一个正方形,那么就需要两个三角形,即顶点缓存中存储6个顶点,在实际情况中,如果要绘制多边形,使用顶点缓存存可能会浪费大量内存存储不必要存储的顶点,而Direct3D绘制图形时,查找这些顶点也会浪费时间,那么,此时产生了索引缓存。索引缓存其实就是顶点缓存中某一个顶点位置的索引。索引缓存可以提高使用顶点缓存绘制3D图像的效率。使用顶点缓存和索引缓存的方法在绘制正方形时可以只需要原创 2016-12-14 13:25:00 · 463 阅读 · 0 评论 -
摸爬滚打DirectX11_day05——三维世界中的四大变换
四大变换:世界变换 在指定位置绘制图形取景变换 从不同视角观察图形投影变换 较劲较远的图形在同一个平面显示可以呈现出近大远小的效果视口变换 控制显示图形的窗口大小,比例以及深度前三个变换都与矩阵变换有关世界变换世界坐标系与局部坐标系 世界变换就是可以将物体模型从自己的局部坐标系转换到时间坐标系中,将所有的物体组织成同一个场景。世界变换包括平移,旋转和缩放变换对应在D3DX API中原创 2016-12-14 13:52:11 · 817 阅读 · 0 评论 -
摸爬滚打DirectX11_day08——纹理映射
纹理映射其实就是将创建好的3D模型用2D图像贴图,从而实现更好的显示效果,使三维模型更加逼真。纹理绘制是三维渲染中的中流砥柱。为了提高纹理贴图的效率,通常使用2的N次方(128*128,256*256)的正方形图片。原创 2016-12-19 17:35:16 · 345 阅读 · 0 评论 -
摸爬滚打DirectX11_day08——.X文件的导入
.X文件是微软定义的3D模式文件格式,可以由3DMAX和MAYA生成的.obj,.max,.mb通过插件转换得到。在DirecX中,通过网络模型接口ID3DXMESH载入.X文件。这个接口实际上是三维物体的顶点缓存的集合,他将创建顶点缓存,定义灵活顶点格式和绘制顶点缓冲区等功能封装在一个COM对象中,这样复杂的三维物体绘制就变得更加简便了。ID3DXMESH接口中的D3DXCreateMesh()可原创 2016-12-22 17:16:49 · 966 阅读 · 0 评论 -
摸爬滚打DirectX11_day08——Alpha混合技术
Alpha通道是计算机中存储一张图片的透明和半透明度信息的通道。它是一个8位的灰度通道,用256级灰度来记录图像中的透明度信息,第一透明、不透明和半透明区域,黑表示全透明,白表示不透明,灰度表示半透明。混合(Blending)是计算机图形学中的常用技术,即混合像素,我们通常用已经光栅化的像素光栅化同一位置的娴熟,或者说是在某图元上混合图元。Alpha混合其实作用就是实现一种半透明的效果,设B的透明度原创 2016-12-22 18:46:04 · 1334 阅读 · 1 评论 -
Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(四)渲染状态
渲染状态从本质上讲,Direct3D是一个状态机(state machine)。在我们改变它的状态之前,驻留在状态机内的当前状态是不会改变的。例如,我们在6.1节、6.2节和6.3节中看到,当顶点缓冲和索引缓冲绑定到管线的输入装配阶段时,如果我们不绑定其他缓冲,那么它们就会一直驻留在那里;同样,在没有改变图元拓扑之前,当前的图元拓扑设置会一直有效。另外,Direct3D将配置信息封装在状态组中,我们原创 2017-03-13 17:02:48 · 605 阅读 · 0 评论