5.3.2:128位颜色
它是常见的合并一个额外的颜色的格式,多出来的部分称为alpha。alpha组件通常用来表示颜色的不透明度,这在混合中很有用(第10章)。包含alpha分量,表示可以用4维颜色向量(r, g, b, a)表示一种颜色,其中0≤r, g, b, a≤1。这样就可以使用XMVECTOR类型在代码中表示一种颜色,就能利用到SIMD。对于componentwise multiplication,DirectX数学库提供了以下函数:
XMVECTOR XM_CALLCONV XMColorModulate( // Returns c1 ⊗ c2
FXMVECTOR C1,
FXMVECTOR C2);
5.3.3:32位颜色
通过映射将32位Color转换到[0,1]区间内,这样就可以转化成其它位数颜色。DirectXMath库定义了以下函数可以做转换:
XMVECTOR XM_CALLCONV PackedVector::XMLoadColor( const XMCOLOR* pSource);
注意Alpha通道在最前面32位一个UINT。,XMCOLOR类使用ARGB布局。DirectX数学库还提供了一个将XMVECTOR颜色转换为XMCOLOR的函数:
void XM_CALLCONV PackedVector::XMStoreColor(
XMCOLOR* pDestination,
FXMVECTOR V);
通常,128位颜色值用于需要高精度颜色操作的地方(例如,在像素着色器中);这样,我们的计算就有了很多的精度,所以算术错误不会累积太多。但是,最终的像素颜色通常以32位颜色值存储在后台缓冲区中。当前的物理显示设备无法利用分辨率更高的颜色。
5.4 渲染管道的概述
前面将3维幻视和颜色说完后,后面开始关于渲染管道的内容了。下图显示了构成渲染管道的各个阶段的示意图,以及GPU内存资源。
从资源内存池到阶段的箭头表示该阶段可以访问作为输入的资源;例如,像素着色器阶段可能需要从存储在内存中的纹理资源中读取数据来完成它的工作。从阶段到内存的箭头表示阶段写入GPU资源;例如,输出合并阶段将数据写入回缓冲和深度/模板缓冲等纹理。输出合并阶段的箭头是双向的(它读取和写入GPU资源)。
5.5 输入组成阶段
输入汇编器(IA)阶段从内存中读取几何数据(顶点和索引),并使用其组装几何图元(例如,三角形,直线)。(索引将在后面的小节中介绍,但要简要说明一下,它们定义了应如何将顶点放在一起以形成图元)。
5.5.1 顶点
数学上,三角形的顶点是两条边的交点;直线的顶点是端点;对于单点,这个点本身就是顶点。下图以图形的方式说明了顶点。
从上图看来,顶点只是几何图元中的一个特殊点。但是,在Direct3D中,顶点比这更通用。本质上,Direct3D中的顶点除了空间位置外还可以包含其他数据,这使我们能够执行更复杂的渲染效果。例如,在第8章中,我们将向顶点添加法线向量以实现光照,而在第9章中,我们将向顶点添加纹理坐标以实现纹理 Direct3D使我们可以灵活地定义自己的顶点格式(它允许我们定义顶点的组成部分)。
顶点以顶点缓冲区的特殊的Direct3D数据结构绑定到呈现管道。顶点缓冲区只是在连续内存中存储一列顶点。然而,它并没有说明这些顶点应该如何放在一起形成何种几何图元。我们告诉Direct3D如何通过指定原始拓扑从顶点数据形成几何图元:
Void ID3D12GraphicsCommandList::IASetPrimitiveTopology(
D3D_PRIMITIVE_TOPOLOGY Topology);
t