我只是想知道如何在 HLSL 中使用 Texture2DArray。
我正在尝试实现一个模型加载器,其中模型具有不同数量的纹理。目前,我的 HLSL 使用大小为 2 的 Texture2D(纹理和普通纹理),但由于我的模型具有不同数量的纹理,我希望使用 Texture2DArray 但不知道从哪里开始。我一直试图在互联网上找到示例等,但没有运气:(
我加载了编译为“ID3D11ShaderResourceView*”的纹理,所以我应该创建一个变量 ID3D11ShaderResourceView**,我创建一个指向纹理的点数组,然后将其传递给着色器或什么?
有什么帮助吗?
最佳答案
创建时只需设置D3D11_TEXTURE2D_DESC
的ArraySize
字段即可。
一个ShaderResourceView
查看整个数组,不需要多个 View 。如果您没有在创建时提供自己的 D3D11_SHADER_RESOURCE_VIEW_DESC
(而是传递 nullptr),那么您已经设置好了。
如果您要传递自己的 D3D11_SHADER_RESOURCE_VIEW_DESC
,则将 ViewDimension
字段设置为 D3D11_SRV_DIMENSION_TEXTURE2DARRAY
,然后填写 的所有 4 个成员 View 描述的 Texture2DArray
字段(MostDetailedMip
、MipLevels
、FirstArraySlice
、ArraySize
)。
在 HLSL 中你只需要指定:
Texture2DArray myTexture;
代替
Texture2D myTexture;
并且在采样时,uv 坐标是三维的。 x 和 y 是正常的,但 z 是您要从中读取的数组切片的索引。
如果您在创建时使用 D3D11_SUBRESOURCE_DATA
结构初始化您的纹理,那么您只需传递一个指向 D3D11_SUBRESOURCE_DATA
数组的指针,每个数组一个切片在数组中。
关于c++ - 如何在 HLSL DirectX11 C++ 中使用 Texture2DArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20721760/