directx11专题

DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS

前言顶点结构与描述创建并绑定输入布局 前言   在前几篇文章中我们主要学习了概念上的渲染管线, 那时我们更加注重说明渲染管线的含义和作用, 现在我们会转换方向, 开始学习使用API来配置渲染管线, 定义shader, 并把几何体提交到渲染管线渲染.   我们将重点学习以下几点: 定义, 存储, 渲染图形数据的接口.编写基础的顶点shader和像素shader.学习如何

DirectX11笔记(四)--渲染管线

前言渲染管线INPUT ASSEMBLERVERTEX SHADERTESSELLATIONGEOMETRY SHADERRASTERIZATIONPIXEL SHADEROUTPUT MERGER结语 前言   在正式开始学习Dx11渲染之前还需要学习一个重要概念—-渲染管线. 渲染管线负责将3D摄像机(相当于人眼)看到的3D场景转换成一张2D图片显示在屏幕上.

DirectX11笔记(三)--Direct3D初始化代码

这里先提出InitDevice方法, 讲解请参考前一篇文章: DirectX11笔记(三)–Direct3D初始化2 HRESULT InitDevice( ){// 窗口信息RECT rc;GetClientRect( g_hWnd, &rc );UINT width = rc.right - rc.left;UINT height = rc.bottom - rc.top;// 创建交换链

DirectX11笔记(三)--Direct3D初始化2

一 总览 初始化Direct3D的步骤二 创建设备 ID3D11Device 和上下文 ID3D11DeviceContext 三 检查所支持的4倍MSAA质量等级四 交换链 描述交换链创建交换链 五 同时创建设备 上下文和交换链六 创建Render Target视图七 创建深度模板缓冲和视图 创建深度模板缓冲创建深度模板视图 八 绑定视图到渲染管线九 设置视口 Viewport

DirectX11笔记(二)--Direct3D初始化1之基本概念

纹理 Texture 交换链 Swap Chain 深度缓冲 Depth Buffer 纹理资源视图 Texture Resourse View 多重采样 Multisampling 特征等级 Feature Level 纹理( Texture )   2D纹理是一个数据元素的矩阵,2D纹理的一种使用场景是存储一张2D图片每一个像素的颜色,但是他一般都不只有这一种用途。

DirectX11笔记(一)--配置DirectX工程

新建Win32项目链接DirectX库设置VC目录保存配置 新建Win32项目   打开Visual Studio 2012, 创建一个Win32 Project. 填写项目名, 项目路径, 点击确定. 在下一个对话框中点击下一步(注意不要直接点完成), 确认应用程序类型是Windows 应用程序, 附加选项中的空项目选中, 即可点击完成.   这样我们得到了一个W

【Visual C++】游戏开发笔记三十 DirectX11 2D纹理映射知识全攻略

本节知识先是对DirectX11关于2D纹理映射方面基础知识的一个讲解,然后通过一个demo的创建过程来将学到的理论知识付诸实践。       一、引言     在之前我们提到过,纹理实际上就是映射到物体表面的数据。其实,纹理也可能是其他的一些信息片段,比如用于映射的常规映射值,用于控制透明度的alpha值,等等。 通常情况下,纹理是通过一个叫做纹理映射的过程来映射一幅图像到表面上

DirectX11 混合状态

DirectX11混合状态 1. 什么是混合状态? 在D3D11中,“混合”发生在像素着色器阶段的下一阶段,即Output Merger Stage。整个场景在全部经历过像素着色器阶段后,对应于屏幕上每一点像素,可能有多个片段(Fragment)。如下图所示: 当混合功能被打开时,决定最终颜色的方法有所不同。当一个片段通过深度测试后,并不是直接取代后缓冲区中P点的当前颜色,而是通过一定

DirectX11 创建视图-投影矩阵

创建视图-投影矩阵 1. 什么是视图矩阵和投影矩阵? 视图矩阵:在游戏中,特别是 3D 游戏,照相机扮演一个很大的角色。照相机取向用于几何体来模拟现实照相机的效果。照相机所代表的矩阵叫做视图矩阵。 投影矩阵:为了模拟照相机的位置和方向,我们增加一个投影的概念。一个投影矩阵用于模拟正投影(orthogonal)或透视(perspective)投影。我们能够通过操纵投影矩阵来实现一些效果,比如

DirectX11 常量缓存

常量缓存 1. 常量缓存的作用是什么? 当我们渲染精灵的时候,我们使用位置、旋转和缩放值,来构建精灵的世界矩阵,一旦该世界矩阵构建好后,我们就使用常量缓存将该矩阵传递给顶点着色器,来实现数据的高速运输。常量缓存用于发送模型-视图矩阵给顶点着色器,使得它能够对输入的几何图形进行变换。 2. 如何创建常量缓存? 常量缓存,像其它所有的DirectX 11缓存一样是 ID3D11BUFF

DirectX11 采样状态对象

采样状态对象 1. 采用状态对象有什么用? 采样状态描述用于描述纹理贴图的采样方式。一个采样状态对象允许我们访问一个纹理的采样状态信息。后面我们看采样状态描述结构体就知道有哪些内容可以描述了。 2. 采样状态可以描述哪些内容? 我们来看采样状态描述结构体D3D11_SAMPLER_DESC有哪些成员: Filter,它指定被采样的纹理怎样过滤。纹理过滤描述从源数据怎样被读取和联合,

DirectX11 着色器资源视图

着色器资源视图 1. 着色器资源视图是什么? 通常一个着色器还要附加其他资源才能发挥着色器的效果(比如法线高光着色器要附加一张基础纹理,是以基础纹理的alpha通道作为反射贴图和高光贴图的一个考量),着色器资源视图用于着色器中访问其他资源(如纹理)。一个着色器资源视图就是一个用于访问资源的着色器对象。当我们载入贴图图像到内存时,需要创建一个着色器资源视图对象,用于通过一个着色器来访那些数据。

DirectX11 顶点缓存

顶点缓存 1. 顶点缓存的作用? 为了让GPU访问顶点数组,我们必须把它放置在一个称为缓冲(buffer)的特殊资源容器中,该容器由ID3D11Buffer接口表示。 用于存储顶点的缓冲区称为顶点缓冲(vertex buffer)。Direct3D缓冲不仅可以存储数据,而且还说明了如何访问数据以及数据被绑定到图形管线的那个阶段。要创建一个顶点缓冲,我们必须执行以下步骤: 1.填写一个D3D

DirectX11 顶点和顶点布局

顶点和顶点布局 1. 如何描述顶点? 5.5.1节已经讲过,在Direct3D中,顶点由空间位置和各种附加属性组成,Direct3D可以让我们灵活地建立属于我们自己的顶点格式;换句话说,它允许我们定义顶点的分量。要创建一个自定义的顶点格式,我们必须先创建一个包含顶点数据的结构体。例如,下面是两种不同类型的顶点格式;一个由位置和颜色组成,另一个由位置、法线和纹理坐标组成。 struct Ver

DirectX11 几何着色器阶段

几何着色器阶段 1. 几何着色器阶段有什么功能? 几何着色器阶段(geometry shader stage)是可选的,我们在第11章之前不会用到它,所以这里只做一个简短的概述。几何着色器以完整的图元作为输入数据。例如,当我们绘制三角形列表时,输入到几何着色器的数据是构成三角形的三个点。(注意,这三个点是从顶点着色器传递过来的。)几何着色器的主要优势是它可以创建或销毁几何体。例如,输入图元可以

DirectX11 顶点着色器阶段

顶点着色器阶段 1. 顶点着色器阶段完成什么工作? 在完成图元装配后,顶点将被送往顶点着色器(vertex shader)阶段。顶点着色器可以被看成是一个以顶点作为输入输出数据的函数。每个将要绘制的顶点都会通过顶点着色器推送至硬件;实际上,我们可以概念性地认为在硬件上执行了如下代码: for(UINT i = 0; i < numVertices; ++i)outputVertex[i] =

DirectX11 输入装配阶段

输入装配阶段 输入装配(Input Assembler,简称IA)阶段从内存读取几何数据(顶点和索引)并将这些数据组合为几何图元(例如,三角形、直线)。(索引将在随后的小节中讲解。简单地说,索引规定了顶点的组织形式,解释了该以何种方式组成图元。) 1. 顶点 从数学上讲,三角形的顶点位于两条边相交的位置上;而直线的顶点是端点。对于一个单个点来说,点本身就是顶点。下图说明了顶点的几何图形。

DirectX11 基本计算机颜色

基本计算机颜色 1. 128位颜色 通常,在颜色中会包含一个附加的颜色分量,叫做alpha分量。alpha分量用于表示颜色的不透明度,我们会在第9章“混合”中使用alpha分量。(由于我们目前还用不到混合,所以现在暂且将alpha分量设置为1。) 包含alpha分量意味着我们要使用4D向量(r,g,b,a)来表示颜色,其中0≤r,g,b,a≤1。要表示一个128位颜色(每个向量分量就是一个3

DirectX11 演示程序框架

演示程序框架 本书中的演示程序均使用d3dUtil.h、d3dApp.h、d3dApp.cpp文件中的代码,这些文件可以从本书网站下载。由于本书的第Ⅱ部分和第Ⅲ部分的所有演示程序都会用到些常用文件,所以我们把些文件保存在了Common目录下,使些文件被所有的工程共享,避免多次复制文件。d3dUtil.h文件包含了一些有用的工具代码,d3dApp.h和d3dApp.cpp文件包含了Direct3

DirectX11 计时和动画

计时和动画 要正确实现动画效果,我们就必须记录时间,尤其是要精确测量动画帧之间的时间间隔。当帧速率高时,帧之间的时间间隔就会很短;所以,我们需要一个高精确度计时器。 1. 性能计时器 我们使用性能计时器(或性能计数器)来实现精确的时间测量。为了使用用于查询性能计时器的Win32函数,我们必须在代码中添加包含语句“#include __int64 currTime;QueryPerf

DirectX11 Direct3D初始化

Direct3D初始化 1. Direct3D初始化步骤 下面将讲解如何初始化Direct3D。我们将Direct3D的初始化过程分为如下几个步骤: 1.使用D3D11CreateDevice方法创建ID3D11Device和ID3D11DeviceContext。 2.使用ID3D11Device::CheckMultisampleQualityLevels方法检测设备支持的4X多重采样

摸爬滚打DirectX11_day07——DirectInput接口

在普通的Windows程序中,用户通过键盘或者鼠标输入的消息并不是通过应用程序直接处理的,二十通过Windows的消息机制转发Windows操作系统对这些消息进行响应后,通过回调应用程序的窗口过程函数进行消息处理。 但是这显然满足不了对于性能要求更高的游戏程序,在DirectX中,微软为我们提供了名为DirectInput接口对象来实现用户输入的。DirectInput直接和硬件驱动打交道,因此

DirectX11学习笔记十三 进阶的程序框架

其实就是Chili Framework,我想从头到尾把框架再梳理一遍,可能不按教程顺序,代码也不是最新的。主要记录思路,有的放矢。 一 从最底层说起 1. Bindable&Codex模式 对于渲染一个最基本的立方体来说,一般最最最简单的步骤是这样的(忽略掉WindowsSDK那些东西): void Init(){DXGI_SWAP_CHAIN_DESC sd = {};sd.Buffe

C++Directx11开发笔记三:绘制图形

在前面我们讲过了如何初始化D3D11Device设备初始化等等,这里所讲的绘制图形将在上一篇文章的项目里进行扩展,在屏幕中绘制图形。在3D的呈现中最小的单位为三角形,无论我们看到的是多么大或多么小的,都是有一个或很多个三角形通过各种方向,角度构成的,当然这会涉及到很多数学中的几何学问题,最悲剧的就是我在大学里却没学好代数以及几何学,有学也忘记了。不过Directx SDK中以及为我们解决了很多几

DirectX11 颜色立方体示例Demo

颜色立方体示例Demo 1. 核心代码 我们已经讲解了足够多的内容,现在我们可以开始编写一个简单的颜色立方体演示程序了。这个例子基本上包含了我们前面讲到的所有内容。读者应该对照前面的几节,仔细研究这些代码,直到把每一行代码都弄懂为止。 核心代码(建议下载Demo在VS看会更方便,DX11龙书官网有项目源代码下载,请读者自行下载): //***************************

DirectX11 压缩纹理格式

压缩纹理格式 1. 为什么需要压缩纹理? 一个虚拟场景可能会载入数百幅纹理,而些纹理会占用大量的GPU内存(记住,我们必须让所有的纹理驻留在GPU内存中,只有这样着色器才能快速地访问纹理)。使用这些格式的好处是它们可以压缩存储在GPU内存中,当使用时由GPU实时解压缩。将纹理存储为DDS压缩文件的另一个好处是可以减少磁盘空间的占用量。 2. 压缩纹理格式有哪些? 了缓解GPU内存压力,Di