我只是想知道如何在HLSL中使用Texture2DArray。
我正在尝试实现一个模型加载器,其中模型具有不同的纹理量。目前我的HLSL使用尺寸为2的Texture2D(纹理和普通纹理),但由于我的模型具有不同数量的纹理,我希望使用Texture2DArray,但不知道从哪里开始。我一直试图在互联网上找到例子,但没有运气:(
我加载了编译为'ID3D11ShaderResourceView *'的纹理,所以我应该创建一个变量ID3D11ShaderResourceView **,我创建了一个纹理点数组,然后将其传递给着色器或什么?
任何帮助?
答案 0 :(得分:7)
您只需在创建ArraySize
时设置D3D11_TEXTURE2D_DESC
字段。
一个ShaderResourceView
查看整个数组,您不需要多个视图。如果您没有在创建时提供自己的D3D11_SHADER_RESOURCE_VIEW_DESC
(而是传递nullptr),那么您已经设置好了。
如果您要传递自己的D3D11_SHADER_RESOURCE_VIEW_DESC
,请将ViewDimension
字段设置为D3D11_SRV_DIMENSION_TEXTURE2DARRAY
,然后填写视图说明的Texture2DArray
字段的所有4个成员({ {1}},MostDetailedMip
,MipLevels
,FirstArraySlice
)。
在HLSL中,您只需指定:
ArraySize
而不是
Texture2DArray myTexture;
当采样时,uv坐标是三维的。 x和y正常,但z是要读取的数组切片的索引。
如果您使用Texture2D myTexture;
结构在创建时初始化纹理,那么您只需要将指针传递给D3D11_SUBRESOURCE_DATA
的数组,每个切片对应一个数组。< / p>