【问题标题】:Texturing a sphere in a Cg shader在 Cg 着色器中对球体进行纹理处理
【发布时间】:2015-03-13 09:26:50
【问题描述】:

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

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

u = atan2(y, z)
v = acos(x/sqrt(x*x + y*y + z*z))

我知道这个简单的映射会在球体的两极产生接缝,但目前我的问题是纹理在球体上重复了几次。我想要和需要的是整个纹理恰好围绕球体缠绕一次。

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

【问题讨论】:

  • 欢迎来到 StackOverflow,希望您阅读FAQ

标签: geometry mapping textures cg


【解决方案1】:

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

【讨论】:

  • 只是为了澄清:我实际上没有找到任何指向这个答案的东西,可能是因为它太简单了。 (我确实有三角学知识;我猜我只见树木不见森林......)
猜你喜欢
  • 2011-09-08
  • 2013-12-23
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多