使用两个浮点数高效存储三维法向量的方法

4
我需要存储3D法线向量,即向量(x, y, z),其中x^2 + y^2 + z^2 = 1。但由于空间限制,我只能使用2个浮点数来存储它。
因此,通过仅存储xy,第三个分量可以计算为sqrt(1 - x^2 - y^2),即一个平方根、两个乘积和两个减法。
最有效的存储向量的方式是什么,以便尽可能快地读取它们,并且如果可能,没有偏向于一个空间方向?
编辑:
现在使用值(a, b),其中a = x-yb = x+y
1个回答

1
你可以通过使用球坐标将向量存储来满足空间限制。众所周知,单位球上的每个点,即每个单位向量,都至少有一对表征它的球坐标。

或者如果你想要一些复杂的东西:复平方函数将单位圆盘映射到其双覆盖。因此,您可以使用左半圆盘作为上半球体,右半圆盘作为下半球体。

SphereFromDisk(a,b)
    a2=a*a; b2=b*b; r2=a2+b2; // assert r2 <= 1
    x = a2 - b2;
    y = 2*a*b
    z = sqrt(1-r2*r2)
    if(a<0 or (a=0 and b<0) z=-z
    return (x,y,z)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接