将球体投影到立方体上

Mar*_*tin 2 c# math 3d xna

我正在制作一个行星上的游戏,我计划存储数据的方式是6个二维数组,这是围绕球体的高度图(在立方体的面上).我遇到的问题是,给定一个从球体中心向外指向的归一化向量,我如何确定这两个方面:

  1. 它相交的平面
  2. x/y坐标我应该在我的2d数组中查找以获得高度.

我目前的解决方案是这个(使用XNA):

  1. 构造一条沿着提供的方向向量从[0,0]指向的光线.遍历每个表面并执行光线/平面交叉(这是XNA框架提供的方法)以获得到交叉点的距离.选择最近的平面(到交叉点的最短距离)
  2. 取3D点,并将其转换为2D点,可用作数组查找以找到半径(这是我无法计算数学的位,或通过谷歌找到任何引用).

一个有用的约束是球体/立方体系统位于原点附近.

因此,需要解决的问题是: 给定方向向量,如何确定它与周围立方体的交叉点.使用此结果,我如何在2D立方体中获取正确的值,该数组在此立方体的表面上"绘制"?

SPW*_*ley 7

看看方向的3个组成部分的大小.具有最大幅度的那个告诉你你击中的立方体的哪个面(并且它的符号告诉你它是+或 - 面.)

另外两个坐标为您提供2D映射值.但是,我们需要将它们标准化.如果您的XYZ方向的X为最高幅度,那么您的2D面部坐标只是U = Y/X和V = Z/X. 这些都在-1到1之间.

要注意从正面到负面的翻转,您可能需要翻转2D U和/或V值以匹配您的坐标系.