Geometry 在Cg着色器中对球体进行纹理处理

Geometry 在Cg着色器中对球体进行纹理处理,geometry,mapping,textures,cg,Geometry,Mapping,Textures,Cg,所以我需要从Cg中的像素/片段着色器中将纹理映射到球体 我在每个过程中的“输入”是笛卡尔坐标x,y,z,用于球体上我希望对纹理进行采样的点。然后,我将这些坐标转换为球坐标,并分别使用角度φ和θ作为U坐标和V坐标,如下所示: u = atan2(y, z) v = acos(x/sqrt(x*x + y*y + z*z)) 我知道这个简单的贴图将在球体的极点产生接缝,但目前,我的问题是纹理在球体上重复多次。我想要和需要的是,整个纹理只环绕球体一次 我已经摆弄了着色器,搜索了几个小时,但我找不到解

所以我需要从Cg中的像素/片段着色器中将纹理映射到球体

我在每个过程中的“输入”是笛卡尔坐标x,y,z,用于球体上我希望对纹理进行采样的点。然后,我将这些坐标转换为球坐标,并分别使用角度φ和θ作为U坐标和V坐标,如下所示:

u = atan2(y, z)
v = acos(x/sqrt(x*x + y*y + z*z))
我知道这个简单的贴图将在球体的极点产生接缝,但目前,我的问题是纹理在球体上重复多次。我想要和需要的是,整个纹理只环绕球体一次


我已经摆弄了着色器,搜索了几个小时,但我找不到解决方案。我想我需要在某处应用某种缩放,但在哪里?或者我完全走错路了,我对Cg和着色器编程非常陌生。。。谢谢你的帮助

由于逆三角函数的结果是角度,它们在
[-Pi,Pi]
中对于
u
[0,Pi]
中对于
v
(尽管你不可能用从学校获得的至少三角学基本知识搜索数小时)。所以你只需要适当地调整它们
u/=2*Pi
v/=Pi
应该可以,假设你有
GL\u REPEAT
(或D3D等效)作为纹理坐标包装模式(你的描述听起来很像)。

欢迎来到StackOverflow,我希望你阅读。只是澄清一下:我实际上没有发现任何东西指向这个答案,可能是因为它太简单了。(我确实懂得三角法;我想我看不见树木,看不见树木……)