在矢量数学中的大型花车

时间:2014-09-24 12:42:18

标签: java math game-engine

我正在建立一个游戏引擎以获得乐趣,我正在尝试使用浮点数构建一个Vector3类。 在测试期间,我发现使用大浮点数表示x,y或z值会导致Vector3数学函数断开,因为它们需要使用的数字太大。

public Vector3f CrossProduct( Vector3f vector1, Vector3f vector2 ) {
    float x_ = vector1.getY( ) * vector2.getZ( ) - vector1.getZ( ) * vector2.getY( );
    float y_ = vector1.getZ( ) * vector2.getX( ) - vector1.getX( ) * vector2.getZ( );
    float z_ = vector1.getX( ) * vector2.getY( ) - vector1.getY( ) * vector2.getX( );
    return new Vector3f( x_, y_, z_ );
}

在上面的函数中,我只能使用最大为Float.Max的平方根的x,y和z值。

有没有它,所以Vector的组件可以是Float.Max? 我现在知道如何处理这个问题的唯一方法是将组件限制为Float.Max的根目录。

编辑:我接受了Chnoch的建议并查看其他游戏引擎是否以类似的方式处理了问题。从Unity3D和idSoftware的Doom3引擎(https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/idlib/math/Vector.h第630行)我可以看出,它们只允许可以用作root float.Max的最大浮点数。想想看,我真的不需要为我正在做的事情做很多数字。 感谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

如果它无论如何可能我只使用double而不是float。使用双精度表,您可以获得64位表示,从而可以访问更大范围的数字。有关浮点类型的比较,请参阅here

在不同的数学库中,Vector3f附带了一个Vector3d类,它在内部使用double值。