如何在HLSL DirectX11 C++中使用Texture2DArray
How to use Texture2DArray in HLSL DirectX11 C++
我只是想知道如何在HLSL中使用Texture2DArray。
我正在尝试实现一个模型加载器,其中模型具有不同数量的纹理。目前,我的HLSL使用大小为2(纹理和普通纹理)的Texture2D,但由于我的模型具有不同数量的纹理,我希望使用Texture2DArray,但不知道从哪里开始。我一直试图在互联网上找到例子之类的,但没有运气:(
我加载编译为"ID3D11ShaderResourceView*"的纹理,所以我应该创建一个变量ID3D11ShaderResourceView**,我创建一个指向纹理的点数组,然后将其传递给着色器还是什么?
有什么帮助吗?
在创建时设置D3D11_TEXTURE2D_DESC
的ArraySize
字段。
一个ShaderResourceView
查看整个数组,您不需要多个视图。如果您没有在创建时提供自己的D3D11_SHADER_RESOURCE_VIEW_DESC
(而是传递 nullptr),那么您已经设置好了。
如果要传递自己的D3D11_SHADER_RESOURCE_VIEW_DESC
则将ViewDimension
字段设置为 D3D11_SRV_DIMENSION_TEXTURE2DARRAY
,然后填写视图描述的 Texture2DArray
字段的所有 4 个成员(MostDetailedMip
、MipLevels
、FirstArraySlice
、ArraySize
)。
在 HLSL 中,您只需要指定:
Texture2DArray myTexture;
而不是
Texture2D myTexture;
采样时,UV 坐标是三维的,x 和 y 正常,但 z 是要从中读取的数组切片的索引。
如果您在创建时使用D3D11_SUBRESOURCE_DATA
结构初始化纹理,则只需传递一个指向D3D11_SUBRESOURCE_DATA
数组的指针,数组中的每个切片对应一个。