ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-11-18 16:16:11  阅读:239  来源: 互联网

标签:rotation xna double draw c


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

据我所知,要获得精确的旋转,我必须使用双精度值来表示正确的弧度.
但是,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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有