如何从 TextureCubeArray 中采样

How to sample from a TextureCubeArray

所以我出乎意料地无法找到任何关于从纹理立方体数组中采样的信息。在 mdsn 文档中,它声明 TextureCubeArray.Sample() 的 uv 输入是 vector4。这对我来说毫无意义。在二维 (x, y) 中,uv 从 [0, 1] 开始,这很简单。在 3d 中,它是从 [-1, 1] 到三个维度 (x, y, z) 的方向。

所以我直接猜测,4d uv 的 w 坐标也从 -1 到 1。如果这是真的,那么给定立方体贴图 [i] 的 uv 的 w 坐标来自大小为 L 的数组是 uv.w = (i / L) * 2 - 1 (+ eps?)。完全正确吗? (顺便说一句,我想你必须添加 epsilon 来解释可能的浮点错误,或者是做这一切的更好方法?)

TextureCubeArray 像 TextureCube 一样需要 vector3 进行采样,但由于它是一个 array 立方体,因此您需要数组的索引。

对于 TextureCube,您将其采样为:

sampler Sampler : register(s0);
TextureCube<float4> cubeMap : register(t0);

...

float3 envcoord = reflect(-eyeVector, worldNormal);
float4 color = cubeMap.Sample(Sampler, envcoord);

您必须为 TextureCubeArray 使用 float4,其中 .w 是立方体索引。

sampler Sampler : register(s0);
TextureCubeArray<float4> cubeMap : register(t0);

...

float3 envcoord = reflect(-eyeVector, worldNormal);
float4 color = cubeMap.Sample(Sampler, float4(envcoord, cubeIndex));