HLSL常量缓冲区打包规则 1. C++中的结构体数据是以字节流的形式传输给HLSL的 例1.1 2. HLSL常量缓冲区中的向量不允许拆分 例2.1 例2.2 3. HLSL常量缓冲区中多个相邻的变量若有空缺则优先打包进同一个4D向量中 例3.1 例3.2 4. 对于在常量缓冲区的结构体,也会进行打包操作 例4.1 例4.2 5. 对于在常量缓冲区的数组,需要特殊对待 例5.1 例5.2 例5....

文章目录 前言 常见包围盒 包围球(Bounding Box) 轴对齐包围盒(Axis-aligned bounding box) 有向包围盒(Oriented bounding box) 包围视锥体(Bounding Frustum) 包围盒的相交、包含、碰撞检测及变换 包围盒与平面的相交检测 包围盒与包围盒的包含检测 包围盒与包围盒的碰撞检测 包围盒的变换 包围盒的其它方法 获取包围盒的八个顶...

文章目录 前言 实现雾效 HLSL代码 树的公告板效果 HLSL代码 图元ID 顶点ID 纹理数组 纹理数组的采样 纹理数组的加载 CreateDDSTextureFromFileEx函数--使用更多的参数,从文件中读取DDS纹理 纹理子资源(Texture Subresources) D3D11CalcSubresource函数--计算子资源的索引值 ID3D11DeviceContext::M...

文章目录 前言 .obj格式 .obj文件结构简述 .mtl文件结构简述 简单示例 使用自定义二进制数据格式提升读取效率 ObjReader--读取.obj/.mbo格式模型 Model类 GameObject类 GameObject::Draw方法 模型加载演示 Obj文件完整说明 前言 一个模型通常是由三个部分组成:网格、纹理、材质。在一开始的时候,我们是通过Geometry类来生成简单几何体...

文章目录 前言 交换律 深度测试 关闭深度测试 开启深度测试但关闭深度写入 利用深度测试和模板测试来绘制闪电特效与其镜面 RenderStates类的变化 加法混合 关闭深度测试 允许深度测试,但不写入深度值的状态 BasicObjectFX类的变化 BasicObjectFX::SetDrawBoltAnimNoDepthTest方法 BasicObjectFX::SetDrawBoltAnim...

文章目录 前言 几何着色器 可编程的几何着色器 从一个看似没什么用的几何着色器代码入手 实战1: 将一个三角形分割成三个三角形 HLSL代码 实战2: 通过圆线构造圆柱体侧面 HLSL代码 实战3: 画出顶点的法向量 HLSL代码 C++代码的部分变化 BasicObjectFX的变化 BasicObjectFX::SetRenderSplitedTriangle方法--渲染分裂的三角形 Basi...

文章目录 前言 混合等式 混合状态 混合运算符的设置 混合因子的设置 ID3D11Device::CreateBlendState方法--创建混合状态 ID3D11DeviceContext::OMSetBlendState方法--输出合并阶段设置混合状态 常用混合等式 无颜色写入混合 颜色加法混合 透明混合 光栅化状态 ID3D11Device::CreateRasterizerState方法-...

文章目录 前言 世界矩阵和观察矩阵 摄像机 摄像机抽象基类 第一人称/自由视角摄像机 构造观察矩阵 第三人称摄像机 球面坐标系 构造观察矩阵 合理对常量缓冲区进行分块 GameObject类--管理游戏物体 ID3D11DeviceContext::XXGetConstantBuffers系列方法--获取某一着色阶段的常量缓冲区 GameApp类的变化 GameApp::OnResize方法的变化...

文章目录 前言 鼠标输入 鼠标状态追踪 键盘输入 键盘状态追踪 D3DApp::MsgProc方法的变化 前言 提供键鼠输入可以说是一个游戏的必备要素。在这里,我们不使用DirectInput,而是使用Windows的消息处理机制,不过要从头开始实现会让事情变得很复杂。DXTK提供了鼠标输入的Mouse.h和键盘输入的Keyboard.h,对消息处理机制进行了封装,使用Mouse类和Keyboar...

前言 有关计算着色器的基础其实并不是很多。接下来继续讲解如何使用计算着色器实现水波效果,即龙书中所实现的水波。但是光看代码可是完全看不出来是在做什么的。个人根据书中所给的参考书籍找到了对应的实现原理,但是里面涉及到比较多的物理公式。因此,要看懂这一章需要有高数功底(求导、偏导、微分方程),我会把推导过程给列出来。 本章演示项目还用到了其他的一些效果,在学习本章之前建议先了解如下内容: 章节内容 1...

前言 编写本内容仅仅是为了完善当前的教程体系,入门级别的内容其实基本上都是千篇一律,仅有一些必要细节上的扩充。要入门HLSL,只是掌握入门语法,即便把HLSL的全部语法也吃透了也并不代表你就能着色器代码了,还需要结合到渲染管线中,随着教程的不断深入来不断学习需要用到的新的语法,然后尝试修改着色器,再根据实际需求自己编写着色器来实现特定的效果。 注意:在翻阅HLSL文档的时候,要避开Effects1...