所以我需要从 Cg 中的像素/片段着色器中将纹理映射到球体。
我在每次传递中作为“输入”的是笛卡尔坐标 x、y、z,用于球体上我希望对纹理进行采样的点。然后我将这些坐标转换为球坐标,并分别使用角度 Phi 和 Theta 作为 U 和 V 坐标,如下所示:
u = atan2(y, z)
v = acos(x/sqrt(x*x + y*y + z*z))
我知道这个简单的映射会在球体的两极产生接缝,但目前,我的问题是纹理在球体上重复了几次。我想要和需要的是整个纹理恰好围绕球体缠绕一次。
我已经摆弄了着色器并搜索了几个小时,但我找不到解决方案。我想我需要在某处应用某种缩放,但在哪里?或者,也许我完全走错了路,我对 Cg 和着色器编程很陌生……感谢您的帮助!