DirectX 11 学习笔记-04

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Zealot_Alie/article/details/82289747

纹理 

纹理数据通常是存储在磁盘上的图像文件,我们需要将它读取出来,并载入到一个资源对象中。为纹理创建一个着色器资源视图可以将视图绑定到管线上,但需要注意设置BindFlags以指定需要绑定的管线阶段。 

纹理坐标 

过滤器 

纹理中的元素是连续图像的一系列离散采样,纹理坐标(u,v)不能总是和纹理元素点一一对应,所以对纹理进行采样时,需要使用filter来读取一个或多个纹理元素并将它们组合在一起构成一个新的值。例如点采样(Point sampling)读入单个纹理元素而线性采样(linear sampling)则会读入两个纹理元素并在它们之间做线性插值得到第三个值。当多边形的法线向量和摄像机的观察向量夹角过大的时候,可以使用各向异性过滤来缓解图象失真问题。 

寻址模式 

当uv坐标超出[0,1]范围时,需要通过寻址模式来指定此时如何获取像素元素。一共有四种寻址模式,分别为:重复(wrap)、边框颜色(border color)、截取(clamp)和镜像(mirror)。warp为默认值。 

纹理数组 

纹理数组用于存储一个纹理阵列,对2D纹理数组,其中的每一个纹理都要有相同的文件格式和尺寸,另外也要有相同的mipmap level。在C++中2D纹理数组和2D纹理都用ID3D11Texture2D表示。在着色器中,Texture2DArray表示2d纹理数组。2D纹理数组也可以进行采样操作,但与2D纹理不同,纹理数组采样需要一个3d纹理坐标,前两个纹理坐标是普通2d纹理的uv坐标,最后一个坐标代表纹理数组中纹理的索引。 

混合 

混合在输出合并阶段完成。此时模板/深度测试已经完成,渲染管线需要将所有的像素片段组合在一起形成最终的像素。通过设置混合状态可以指定管线如何混合这些像素片段。 

设Csrc 为当前正在进行光栅化处理的第ij 个像素(源像素)的颜色,Cdst 为后台缓冲区 中的第ij 个像素(目标像素)的颜色。当不使用混合时,Csrc 会覆盖Cdst 的值(假设该值已通过深度/模板测试)并成为后台缓冲区中的第ij 个像素的新颜色。但是当使用混合时,Csrc和Cdst 会被组合为一个新颜色C 并覆盖Cdst 的值(即,混合颜色C 会成为后台缓冲区中的第ij 个像素的新颜色)。Direct3D 使用如下混合方程混合源像素和目标像素颜色:

C = Csrc ⊗ Fsrc ⊞ Cdst ⊗ Fdst 

上述方程只负责处理RGB分量。Alpha分量要由另一个方程来处理: 

A = AsrcFsrc ⊞ AdstFdst 

一般我们只处理RGB分量。 

混合方程主要由两个混合系数和一个二进制运算符组成。 

需要注意的是min和max中会忽略混合因子。 

混合系数的取值较多,故不一一列出,需要时可以查阅D3D11_BLEND。比较特殊的是D3D11_BLEND_BLEND_FACTOR和D3D11_BLEND_INV_BLEND_FACTOR,这两个混合系数是在OMSetBlendState时指定的,允许我们自定义混合系数。 

同样的,要配置混合系数和混合运算符,我们需要创建一个混合状态。同样,创建通过Device的CreateBlendState来完成。我们需要填写一个D3D11_BLEND_DESC来配置我们的混合状态。 

D3D11_BLEND_DESC中有三个主要参数。 

  1. AlphaToCoverageEnable是一种多重采样技术,在渲染植物的叶子或铁丝网纹理时非常有用。使用alpha-to-coverage 需要开启多重采样。 
  2. IndependentBlendEnable。Direct3D 11 支持最多8个rendertarget,设置这个参数为true可以在不同的rendertarget上使用不同的混合处理。 
  3. RenderTarget 包含8个D3D11_RENDER_TARGET_BLEND_DESC 元素的数组。在只有一个rendertarget或者IndependentBlendEnable未开启时我们只需要配置第一个Desc即可。这个Desc中的参数和混合方程对应,此外还有一个参数RenderTargetWriteMask用于指定将哪些颜色写入后台缓冲区,通过这个mask我们可以屏蔽一部分颜色。 

创建好混合状态后,使用OMSetBlendState绑定混合状态到管线中,设置空值可以将混合状态恢复为默认值。 

需要注意的是混合会在每个像素上执行额外的工作,所以我们仅在需要的时候开启它。 

猜你喜欢

转载自blog.csdn.net/Zealot_Alie/article/details/82289747