XNA:如何在 Draw() 方法中使用 double 值而不是 float 来获得精确的旋转?

XNA : How to use double value within Draw() method instead of float to get precise rotation?

我想根据通过切线计算的特定角度向目标绘制一条定向线,这将给出弧度结果。

据我所知,为了获得精确的旋转,我必须使用 double 值来表达正确的弧度。 但是,Spritebatch.Draw 需要一个 float 值作为旋转:

public void Draw (
         Texture2D texture,
         Vector2 position,
         Nullable<Rectangle> sourceRectangle,
         Color color,
         **float rotation,**
         Vector2 origin,
         float scale,
         SpriteEffects effects,
         float layerDepth
)

如果我将 double 值转换为 float,角度不正确,它将错过我期望相交的目标。

如何根据我的 double 而不是 float 绘制正确的方向线?

最好的情况可能是追踪 Update() 内的线而不是 Draw() 但我认为我没有足够的经验来实现像 Vector2.Transform() 这样的东西因为我无法想象它会做什么,也找不到合适的面向新手的解释。

我认为您无法获得比这更精确的信息。您正在使用 XNA,这意味着您无法使用 XNA API。 Draw 没有重载需要 double 。就 float.

无论如何,显卡对双打的支持不是很好。考虑这个 link:https://msdn.microsoft.com/en-us/library/windows/desktop/bb509646%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

这讨论了 HLSL 可以支持的不同标量类型。它确实将 double 列为一个选项,但它指出

You cannot use double precision values as inputs and outputs for a stream.

XNA 实际上是 DirectX 的一个相当薄的包装器,所以我不希望它在双打方面支持太多。事实上,我很难想到 任何 使用 double 的游戏框架。 WPF 是我能想到的最接近的,它是一个 UI 框架,而不是游戏开发框架。

就视频游戏而言,float 对您正在做的事情来说不够精确的情况很少见。我怀疑有一个单独的、真正的 bug 阻止你获得足够准确的东西(即使 double 也不能拯救你),或者你可以采取一种完全不同的方法来绕过它。

我知道您已经想到了这一点,但如果精度真的是这里唯一的问题,您可以提前单独进行数学运算,然后在将其传递给 Draw打电话。