渲染流水线
渲染流水线是以虚拟摄像机为视角进行观察,并据此生成给定3D场景的2D图像的一套处理步骤.
输入装配阶段
数据表示
在数学上,顶点只是几何图元中的特殊点.在Direct3d中,顶点的意义往往不止如此.事实上,顶点中还可以包含其他信息.这使得我们能够利用它来表现出更多的渲染效果.
比方说下面的代码定义了两种不同的顶点结构.Vertex1包含有颜色的额外信息.而Vertex2则包含了当前的法向量和两组2D的纹理坐标.
1 | struct Vertex1 { |
在D3D中,我们通过一种名为顶点缓冲区的线性结构,来存储一系列的顶点,将其与渲染流水线绑定.同时利用图元拓扑来告知顶点之间的关系.
1 | m_command_list -> IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINELIST) |
上述代码便是指定图元拓扑为线列表模式.即每两点构成一条线段.
同理还有 D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST 三角形带.
值得注意的是三角形带的奇数好和偶数好的三角形的绕序是不一样
以上举了两个图元拓扑的例子.具体可以参考官方文档给出的详细枚举列表.
索引
下面两个顶点数组展示用于构建四边形的三角形链表.1
2
3
4Vertex quad[6]= {
v0,v1,v2,
v0,v2,v3
}
为三角形指定顺序的工作是非常重要的.
确定的绕续能让我们更好的计算一个三角形的的正反面
….
理论部分先滚蛋.pipeline state的每一层都可以挖太多的坑.如果单纯的去记忆而不和实践结合,估摸着一会就能忘完.所以我们先通过实例来解决学习上的问题.
定义
我们先前定义了几何点的数据结构,但是c++不是java,D3D很显然不可能知道我们定义的节点结构的每月含义.我们依靠D3D12_INPUT_LAYOUT_DESC来描述这个结构的每一个成员所代表的含义.
1 | typedef struct D3D12_INPUT_LAYOUT_DESC{ |