【问题标题】:How to calculate sphere rotation based off of UV coordinates如何根据 UV 坐标计算球体旋转
【发布时间】:2018-08-19 20:45:05
【问题描述】:

我有一个纹理,我将其包裹在一个类似于 Wikipedia 上这张图片的球体上。

https://upload.wikimedia.org/wikipedia/commons/0/04/UVMapping.png

我想要实现的是从纹理中获取一个 UV 坐标,比如说 (0.8,0.8),在上面的示例中大致在俄罗斯周围。

使用这个 UV 以某种方式计算我需要应用于球体的旋转,以使该 UV 以球体为中心。

有人能指出我需要计算的数学方程式的正确方向吗?

编辑 - 有人指出我实际上是在寻找球体的旋转,因此 uv 以相机为中心。所以从 0,0,0 的旋转开始,我的相机指向 uv (0,0.5)

谢谢

【问题讨论】:

  • “让 UV 以球体为中心” -- 你的意思是让 相机 看着那个 UV?

标签: c++ math rotation geometry unreal-engine4


【解决方案1】:

这种特殊类型的球面映射具有非常方便的特性,即 UV 坐标与对应的极坐标坐标线性成比例。

为方便起见,我们假设:

  • UV (0.5, 0.5) 对应格林威治子午线/赤道 - 即(0° N, 0° E)
  • 网格最初是轴对齐的
  • 纹理以球坐标(θ, φ) = (π/2, 0) 为中心 - 即 X 轴

一张图来演示:

使用边界条件:

  • U = 0 -> φ = -π
  • U = 1 -> φ = +π
  • V = 1 -> θ = 0
  • V = 0 -> θ = π

我们可以在球体的局部空间中推导出所需的方程,以及对应的方向向量r

假设球体具有旋转矩阵R 并以c 为中心,只需使用lookAt 即可:

  • 位置c + d * (R * r)
  • 方向-(R * r)

【讨论】:

  • 您好,谢谢您,您能帮我举个例子吗?我正在尝试将其转换为虚幻引擎 4,但我觉得我不太了解数学?我正在使用左手坐标系。 UV - (0.49,0.21) 球体起始位置 (0,0,0), 旋转 (0,0,0) 相机起始位置 (0,-310,0), 旋转 (0,0,90) θ = (π (1 - 0.49)) -> 0.51π φ = (π(2*0.21 - 1)) -> -0.58π r = ( sin(0.51π) * cos(-0.58π), sin(0.51π) * sin (-0.58π), cos(0.51π) ) r = (-0.249,-0.968,-0.031) 是球体局部空间的方向向量
  • 我对你的位置和方向方程有点困惑。在虚幻引擎中,我无法获得旋转矩阵,但我可以获得一个旋转器,它可以为我提供偏航、俯仰、滚动值以及方向矢量等信息,但我不确定为什么需要这些方程或如何替换旋转矩阵。
  • Unreal 有一个 Find Look At Rotation 函数,它接受一个起始向量和目标向量并返回旋转。我想我可以把上面计算的 r 乘以我的球体半径来给它一个世界位置,因为我的球体在(0,0,0),然后使用相机位置并将这两个都插入到查看函数中,但是它没有给出预期的结果。
  • 你需要通过球体的旋转来旋转局部空间r向量以获得相机所在的world空间中的对应方向。我不熟悉 Unreal 的细节,所以对实现细节方面没有多大帮助。介意上传一些“意外结果”的屏幕截图吗?
  • 我想我在这里缺少一些东西,因为使用 90 度间隔:UV (0,0.5) = Direction -Z UV(0.25,0.5) = Direction (0.707, 0, -0.707) UV (0.5,0.5) = Direction +X UV (0.75,0.5) = Direction (0.707, 0, 0.707) UV (1,0.5) = Direction +Z 如果我将 U 坐标加倍,我得到预期的方向?我的另一个问题是这仅在我将 V 坐标保持在 0.5 时才有效,例如 UV(0.5,0.25) = Direction -Y ?
猜你喜欢
  • 2011-12-12
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多