其他分享
首页 > 其他分享> > XNA:如何在Draw()方法中使用双精度值而不是float以获得精确的旋转?

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

作者:互联网

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

据我所知,要获得精确的旋转,我必须使用双精度值来表示正确的弧度.
但是,Spritebatch.Draw需要浮点值作为旋转值:

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()之类的东西来实现这一点还没有足够的经验,因为我无法直观地看到它将做,我找不到合适的面向noob的解释.

解决方法:

我认为您将无法获得比这更精确的结果.您正在使用XNA,这意味着您无法使用XNA的API. Draw没有重载,而在那里需要加倍.刚浮.

无论如何,图形卡并没有很好地支持双打.考虑以下链接: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的方式提供很多支持.实际上,我很难考虑使用double的任何游戏框架. WPF是我能想到的最接近的东西,它是一个UI框架,而不是游戏开发者框架.

出于视频游戏的目的,浮动对您所做的操作不够精确是非常罕见的.我怀疑是存在一个单独的,真正的错误使您无法使事情变得足够准确(甚至翻倍也无法为您节省),或者您可能采取的另一种完全不同的方法将使您摆脱困境.

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

标签:rotation,xna,double,draw,c
来源: https://codeday.me/bug/20191118/2029544.html