c++ - 如何在 DirectX11 中将纹理环绕方向从 U 更改为 V,反之亦然?

标签 c++ directx textures texture-wrapping

在 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/

相关文章:

c++ - 如何在长表达式中提升操作数?

c# - 快速多窗口渲染

c++ - 使用 DirectX 9 显示网格

javascript - webgl纹理格式,类型和internalFormat的无效组合

c++ - 启用 c++17 intellisense 打开文件夹 visual studio ninja-clang

c++ - 我们什么时候在 new (::new) 之前使用作用域解析运算符?

javascript - 如何在飞机的正面和背面放置两种不同的纹理?

java - opengl java 加载 png 纹理无法正常工作

c++ - 数组错误

c++ - 如何刷新图形避免黑屏?