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