【问题标题】:XNA : How to use double value within Draw() method instead of float to get precise rotation?XNA:如何在 Draw() 方法中使用 double 值而不是 float 来获得精确的旋转?
【发布时间】:2016-05-24 00:12:50
【问题描述】:

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

据我所知,要获得精确的旋转,我必须使用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() 这样的东西,因为我无法想象它是什么可以,但我找不到合适的面向新手的解释。

【问题讨论】:

  • 我非常怀疑你需要double。我怀疑您的问题出在代码的其他地方

标签: c# rotation xna double draw


【解决方案1】:

我不认为你能得到比这更精确的了。您正在使用 XNA,这意味着您无法使用 XNA 的 API。 Draw 没有过载,那里需要 double。只需float

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

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

您不能使用双精度值作为流的输入和输出。

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

对于视频游戏而言,float 对您正在做的事情不够精确是相当罕见的。我怀疑有一个单独的、真正的错误会阻止您获得足够准确的信息(即使 double 也无法拯救您),或者您可以采取一种完全不同的方法来解决它。

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

【讨论】:

  • WPF 最终使用 DirectX,所以我怀疑它也会遭受保真度损失,否则很好的答案! :)
猜你喜欢
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多