如何在 DirectX11 中将纹理环绕方向从 U 更改为 V,反之亦然?
How can the texture wrapping direction be changed from U to V and vice-versa in DirectX11?
在 DirectX 9 中它曾经是这样的:
d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);
这样你就可以改变 Direct3D 如何感知 u 方向和 v 方向的纹理坐标之间的最短路线。对球体和圆柱体纹理环绕非常有用。
这里有很好的解释https://docs.microsoft.com/en-us/windows/desktop/direct3d9/texture-wrapping
但经过大量研究后,我很难弄清楚如何在 DirectX11 中实现相同的结果,因为它现在使用多个渲染状态 none 似乎具有类似的功能。
此功能未在 Direct3D 11 中实现。您应该手动将模型坐标映射到纹理坐标。
一种方法是在接缝线上创建一个边缘,您希望纹理在该处包裹,并独立处理接缝两侧的模型面。
另一种方法是使用[0;之外的纹理坐标。 1] 范围以及一种寻址技术(您在采样器状态描述结构中指定)。 D3D11_TEXTURE_ADDRESS_MODE
枚举 (https://docs.microsoft.com/en-us/windows/desktop/api/d3d11/ne-d3d11-d3d11_texture_address_mode) 中列举了这种技术。但是在 d3d11 中没有 "shortest route" 纹理环绕的选项,就像您提供的 MSDN 文章中描述的那样。
在 DirectX 9 中它曾经是这样的:
d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);
这样你就可以改变 Direct3D 如何感知 u 方向和 v 方向的纹理坐标之间的最短路线。对球体和圆柱体纹理环绕非常有用。
这里有很好的解释https://docs.microsoft.com/en-us/windows/desktop/direct3d9/texture-wrapping
但经过大量研究后,我很难弄清楚如何在 DirectX11 中实现相同的结果,因为它现在使用多个渲染状态 none 似乎具有类似的功能。
此功能未在 Direct3D 11 中实现。您应该手动将模型坐标映射到纹理坐标。
一种方法是在接缝线上创建一个边缘,您希望纹理在该处包裹,并独立处理接缝两侧的模型面。
另一种方法是使用[0;之外的纹理坐标。 1] 范围以及一种寻址技术(您在采样器状态描述结构中指定)。 D3D11_TEXTURE_ADDRESS_MODE
枚举 (https://docs.microsoft.com/en-us/windows/desktop/api/d3d11/ne-d3d11-d3d11_texture_address_mode) 中列举了这种技术。但是在 d3d11 中没有 "shortest route" 纹理环绕的选项,就像您提供的 MSDN 文章中描述的那样。