空间划分算法
[toc]
# 空间划分算法
# 四叉树
每个四叉树节点都有四个子节点,子节点只在需要时创建
创建子节点时会触发切割,即将一个完整的树节点切割成四个等大小的子节点
切割子节点后需要确定切割前节点内的元素都在新节点的哪里,并进行更新
可以用于加速碰撞检测
# 基于四叉树的碰撞检测优化
遍历所有待碰撞检测节点
找到当前节点所在的四叉树节点
对同一四叉树节点内的物体进行碰撞检测 (可暴力)
# 非线性八叉树
Tag: 线性八叉树是非线性八叉树的优化版本,实际上并无太大区别
八叉树实际上和四叉树的创建思路一致,区别不同的是八叉树是进行空间上的划分,每次不断地将空间切分为上四下四的八个子空间...
more...
DirectX12 9. 光照
[toc] DirectX12 这本书中介绍的大部分都是 局部光照模型
# 光照
# 计算三角面法向量
先计算出三角形的两个边向量
计算两个向量的叉积
在 DirectX12 中,可以通过使用 XMVector3Normalize 函数将一个向量进行归一化,即三角形平面法线即为: XMVector3Normalize (叉积) 曲面顶点 (如三角形的三个顶点) 处的法线通常会采用一种 求法线平均值 的方式来计算顶点近似法线。
即计算该顶点周围 N 个平面的法线的和的归一化。...
more...
DirectX12 8 - 回顾第七章,使用循环渲染让CPU提前GPU
[toc]
# 利用 Direct3D 绘制几何体 (续)
# 构建 Shader
流程:
- 初始化 - 编译着色器并缓存到 ID3DBlob 中 - 设置着色器所需要从 CPU 端接受的点点着色器输入的布局描述 - 构建几何资源: BuildShapeGeometry (在这一步使用上传堆填充上面的布局描述) - 构建流水线时,将顶点着色器 Blob / 片元着色器 Blob/cb 布局以及数据等填充进 PSO (D3D12_GRAPHICS_PIPELINE_STATE_DESC) - 填充 constantBuffer,(包含 ObjectConstantsBuffer 和...
more...
DirectX12 番外: 名词摘记
# 引用
[1] 游戏引擎编程实战 https://zhuanlan.zhihu.com/p/424785264
[2] DirectX123D 游戏开发实战
[3] Direct12 入门学习 https://zhuanlan.zhihu.com/p/352433339 [toc]
# 资源
# Resource
D3D 使用资源来统一表示 GPU资源 ,不管是一块 Buffer 还是一张 texture。
GPU 不与渲染管线直接绑定,而是通过 描述符(Descriptor) 作为中间对象来绑定。
# Descriptor/View
视图与描述符是同义词 描述符,实际上 D3D...
more...
DirectX12 7.利用DirectX绘制几何体
# 输入布局
# 顶点缓冲区
GPU 会从 缓冲区 中读取数据并进行处理,如之前提到的 回读堆、默认堆 等。 创建顶点缓冲区和应用流程
1. D3D12_RESOURCE_DESC 结构体描述缓冲区资源。
2. ID3D12Device::CreateCommittedResource 创建 ID3D12Resource 对象。
3. 绑定到顶点缓冲区视图 (可以通过 ID3D12Resource 获得堆中地址)
4. 将视图绑定到渲染流水线上的一个插槽中 (input slot, 通过 ID3D12GraphicsCmmandList::IASVertexBuffers,...
more...
DirectX12 6. 坐标变换相关
[toc]
# 世界坐标到局部坐标
上图表达的主要是:
最直接的求变换矩阵的方法,就是直接求 A空间的基向量和原点 相对于 B空间 的三个基向量和原点的坐标u_x、y_x、w_x、Q_xu\_x、y\_x、w\_x、Q\_xu_x、y_x、w_x、Q_x 得到这四个变量后就可以得出上图中的变换矩阵
将向量 / 坐标在 A 空间内的值左乘上变换矩阵即可得到在 B空间 中的值 龙书上说上面那种方法虽然直观,但是求起来会比较不直观
所以一般在图形学上会使用 SRT 矩阵来求转换矩阵 这个方式由于可以直接通过模板矩阵直接得到对应的 SRT 矩阵,所以求起来会轻松很多
#...
more...
DirectX12 5. 渲染流水线
[toc]
# 颜色
DirectXMath 库使用 SIMD 技术加快数据的处理速度。
32 位颜色 (RGBA 各 1 个字节), PackedVector::XMLoadColor (COLOR 转换为 VECTOR), PackedVector::XMStoreColor (VECTOR 转换为 Color)
# 渲染流水线概述
在输出合并阶段,数据会被写到像后台缓冲区这样的纹理当中。
事实上,输出合并阶段是 CPU 和 GPU 双向的
# 输入装配阶段
输入装配阶段从显存中读取几何数据,然后装配成三角 / 线段图元 DX12 可以将 顶点缓冲区 处理成如下几种拓扑形式...
more...
DirectX12 4. 何谓命令列表、命令适配器与命令队列?
[toc]
# 引用
https://docs.microsoft.com/zh-cn/windows/win32/direct3d12/design-philosophy-of-command-queues-and-command-lists
# 概述
早先的 OpenGL 和 DirectX 在渲染时通常是在资源设置完毕后直接提交给 GPU 进行渲染,这种线性的流程很难进行并行化的设计。
为了改善这一问题,实现 工作的重用 和 多线程的利用 ,需要对 应用向GPU提交渲染工作的方式 进行根本性的设计与改变。 新版的提交当时相对于早期的提交方式主要有以下几个不同:
删除即时上下文 (...
more...