[C++]DirectX 12 3D游戏开发实战—第12章 学习笔记02 2019.5.8

个人学习使用,请勿转载

12.3 纹理数组

12.3.1 概述

纹理数组即为存放纹理的数组。C++代码中纹理数组也由ID3D12Resource接口表示,创建ID3D12Resource对象时,可以通过设置DepthArraySize属性指定纹理数组所存储的元素个数。在d3dApp文件中创建深度/纹理模板时总是将该值设为1。CreateD3DResource12函数。

Texture2DArray gTreeMapArray;

12.3.2对纹理数组进行采样

公告牌示例:

float3 uvw = float3(pin.TexC,pin.PrimID%4);
float4 diffuseAlbedo = gTreeMapArray.Sample(
	gsamAniosotropicWrap,uvw)*gDiffuseAlbedo;
  • List item

使用纹理数组需要3个坐标值,前两个坐标是2D纹理坐标,第三个坐标则是纹理数组的索引。
公告牌示例中采用的是一个具有4个纹理元素的纹理数组 ,每个元素中存有独特的树木纹理。但是每次调用所画出的树木多于4棵,所以图元ID要大于3,所以对图元ID进行模4运算,将其值映射为123,使数组元素拥有合理的索引。

  • 纹理数组的优点之一是可以在以此绘制调用中画出一系列不同纹理的图元,一般必须用不同的纹理对每个用用独立渲染项的网格进行处理,是用来纹理数组就可以将设置纹理与绘制调用的过程都减少到一次。
SetTextureArray();
DrawPrimitivesWithTextu

你可能感兴趣的:(C++,DirectX12)