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
打电话。
我想根据通过切线计算的特定角度向目标绘制一条定向线,这将给出弧度结果。
据我所知,为了获得精确的旋转,我必须使用 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
打电话。