利用Direct3D绘制几何体(续) 学习目标 学会一种无须每帧都要刷新命令队列的渲染流程,以此来优化性能 了解另外两种根签名参数类型:根常量和根描述符 探索如何在程序中生成和绘制常见的几何体:如栅格.圆台和球体 研究怎样通过动态顶点缓冲区来更新CPU中的顶点数据,并且向GPU上传顶点的新的位置信息 7.1 帧资源 首先先回顾一下CPU和GPU并行工作的情形,CPU构建并提交命令列表,同时还需要执行一些必要的工作,而GPU则负责处理命令队列中的各种命令.我们的目标则是使CPU和GPU持续工作,从…
利用Direct3D绘制几何体(续) 学习目标 学会一种无须每帧都要刷新命令队列的渲染流程,由此来优化程序的性能 了解另外两种跟签名参数类型:根描述符和根常量 探索如何在程序中生成和绘制常见的几何体,如栅格.圆台和球体 研究如何通过动态顶点缓冲区来更新CPU中的顶点数据,并且向GPU中上传顶点新的位置信息 7.6. 细探根签名 在前面我们已经介绍过跟签名,它定义了在绘制调用之前,需要绑定到渲染流水线上的资源,以及这些资源如何映射到着色器的输入寄存器中. 7.6.1 .根参数 根签名是由一系列根参…
渲染流水线 学习目标: 了解用于在2D图像中表现出场景立体感和空间深度感等真实效果的关键因素 探索如何用Direct3D表示3D对象 学习如何建立虚拟摄像机 理解渲染流水线,根据给定的3D场景的几何描述,生成其2D图像的流程 5.1 3D视觉即错觉? 1.从视觉观察效果来看,平行线最终会相交于一点(消失点,又称为灭点),因此我们可以得出结论:随着深度(z方向)的增加,物体会显得越来越小.(dx是左手坐标系,OpenGL是右手坐标系). 2.我们都知道物体重叠,这是一个重要的概念,即不透明的物体可…
利用Direct3D绘制几何体 学习目标 探索用于定义.存储和绘制几何体数据的Direct接口和方法 学习编写简单的顶点着色器和像素着色器 了解如何用渲染流水线状态对象来配置渲染流水线 理解怎样创建常量缓冲区数据.并将其绑定到渲染流水线上 掌握根签名的用法 6.1 顶点与输入布局 由5.5.1节可知,除了空间位置,Direct3D的顶点还可以存储很多其他的属性数据.为了构建自定义的顶点格式,我们首先要创建一个结构体来容纳选定的顶点数据.比如: //由位置和颜色信息组成的顶点结构体 typedef…
Direct3D的初始化(上) 学习目标 了解Direct3D在3D编程中相对于硬件所扮演的角色 理解组件对象模型COM在Direct3D中的作用 掌握基础的图像学概念,例如2D图像的存储方式,页面翻转,深度缓冲,多重采样以及CPU和GPU之间的交互 学习使用性能计数器函数,依次读取高精度计时器的数值 了解Direct3D的初始化过程 熟悉本书应用程序框架的整体结构,在后续的演示程序中可以经常看到应用程序框架的整体结构 4.1预备知识 要学习Direct3D的初始化流程,我们需要了解一些基本的图…
Direct3D的初始化(下) 学习目标 了解Direct3D在3D编程中相对于硬件所扮演的角色 理解组件对象模型COM在Direct3D中的作用 掌握基础的图像学概念,例如2D图像的存储方式,页面翻转,深度缓冲,多重采样以及CPU和GPU之间的交互 学习使用性能计数器函数,依次读取高精度计时器的数值 了解Direct3D的初始化过程 熟悉本书应用程序框架的整体结构,在后续的演示程序中可以经常看到应用程序框架的整体结构 4.3初始化Direct3D 对Direct3D进行初始化可以分为以下几个步…
变换 学习目标 理解如何使用矩阵表示线性变换和仿射变换 学习对几何体进行缩放.旋转和平移的坐标变换 根据矩阵之间的乘法运算性质,将多个变换矩阵合并为一个单独的净变换矩阵 找寻不同坐标系之间的坐标转换方法,并利用矩阵来表示此坐标变换 熟悉DirectXMath库中专门为构建变换矩阵所提供的相关函数 3.1线性变换 3.1.1定义 如果有一个函数t可以使 t(u + v) = t(u) + t(v) t(ku) = tk(u) 成立,则函数t称为线性函数,也称为线性变换.其中u和v为3D向量,k为标…
仅供个人学习使用,请勿转载.谢谢! 11.模板 模板缓冲区(stencil buffer)是一种"离屏"(off-screen)缓冲区,我们可以利用它来实现一些效果.模板缓冲区.后台缓冲区以及深度缓冲区都拥有相同的分辨率,这三者相同位置上的像素可以一一对应.由4.1.5节可知,模板缓冲区要和一个深度缓冲区配合使用.模板缓冲区的作用就如同印刷过程中所使用的模板一样,我们可以用它阻止特定的像素片段渲染到后台缓冲区.(比如绘制一面镜子的时候,我们可以使用模板缓冲区来组织镜子范围之外的镜像部分…
DirectX12 3D 游戏开发与实战第八章内容(下) 8.9.材质的实现 下面是材质结构体的部分代码: // 简单的结构体来表示我们所演示的材料 struct Material { // 材质唯一对应的名称(便于查找) std::string Name; // 本材质的常量缓冲区索引 int MatCBIndex = -1; // 漫反射在SRV堆中的索引(在第九章的纹理贴图中会使用) int DiffuseSrvHeapIndex = -1; int NormalSrvHeapIndex…
8.光照 学习目标 对光照和材质的交互有基本的了解 了解局部光照和全局光照的区别 探究如何用数学来描述位于物体表面上某一点的"朝向",以此来确定入射光照射到表面的角度 学习如何正确的变换法向量 能够区分环境光.漫反射光以及镜面光 学习如何实现平行光.点光以及聚光灯 理解如何通过控制距离函数的衰减参数来实现不同的光照强度 8.1.光照和材质的交互 开启光照之后,我们不需要指定顶点的颜色,而是指定材质和光照,然后运用光照方程基于两者的交互来计算出顶点的颜色.我们可以把材质看作是确定光照和物…