Articles of 浮点

Unity3d Transform.position浮点范围

我以为浮点数有很大的范围,比如3.4 * 10 ^ 38 。 不过今天我试图把我的播放器的Transform.position.x设置为1000000,它给了我一个警告: “由于浮点精度限制,建议将GameObject的世界坐标放在一个较小的范围内”。 这是否意味着我的单个场景必须小于1000000 * 1000000 * 1000000。 这被认为足够大吗? 如果我想要一个更大的世界,我将需要多个场景? 当一个新的场景被加载,我的球员的位置将被重置? 我如何管理头寸数据以避免超出范围? 我正在使用Unity3D Pro。

旧的飞行模拟器中的协调处理是如何工作的?

我目前正在为自己的乐趣纯粹的战斗飞行模拟器。 使用浮动起源,我认为在精确浮动是历史,但是这是这种情况,直到我试图添加多人游戏。 服务器是authorative,我正在殴打我的头在服务器上定位的球员和处理枪的命中和碰撞。 使用扇区我重置客户的来源,但服务器保持原来的位置。 这将导致在服务器上的精度浮动,因此物理和碰撞检查是可怕的。 现在我只是想知道Airwarrior,Warbirds和aceshigh这些游戏如何克服这些问题。 他们用什么方法? 我假设别的东西。 如果只有我能够使用双精度,甚至固定点,但我绑在一个物理模型与浮动工作。 我不想改变这种情况,除非我没有别的select。 感谢任何指针。 斯蒂芬

在空间游戏中解决float造成的限制

我正在制作一个程序化的外太空游戏。 就像在现实世界中一样,游戏世界将会有99%的空洞,而行星/星星/太阳系等则相距甚远。 例如在游戏开始的时候,你几乎会被困在你产生的太阳系中,因为即使是从行星飞到星球也需要很长的时间。 从一个太阳系飞到另一个太阳系在理论上是可能的,然而这需要几天的IRL时间而没有获得游戏中相当于一个驱动器的时间。 我认识到所有成千上万的行星/星星等……他们不能每秒更新60次,我可以处理这个问题。 让我描述一下我的问题。 好吧,让我们说1米是16像素。 Earth diameter = 12,756,000 meters Earth diameter = 204,096,000 pixels Earth circumference = 640,861,440 pixels 好的,这仍然是可以控制的。 显然不会有earth.png ,它可以被程序化渲染。 但是情况变得更糟: Distance from earth to sun = 149,600,000,000 meters Distance from earth to sun = 2,393,600,000,000 pixels 所以,如果我们把地球定义为我们的任意起源,并且我们乘船到太阳, int main() { // Distance to sun: // 2393600000000 float X = […]

我怎样才能处理地形块之间的顶点精度错误?

我正在使用OpenGL渲染以下场景,使用stream行的MMORPG的地图文件中的顶点数据。 数据被分块并且图片场景由256(16×16)块组成。 然而,在大块之间,我看到了我认为由于浮点精度而导致的毛刺。 然而,我并没有做大的翻译,而是非常接近原文,我应该看到这个问题吗? 当你沿着块边缘闪烁不同的点时,你飞过场景,这个毛刺非常明显。 我在想,如果我忽略了一些简单的东西,或者有其他游戏用来掩盖这个问题的技巧。 我猜源数据可能是这个问题的原因,但我不知道它发生在原来的游戏。 在新窗口中查看截图以查看问题。

模拟弹性球碰撞迅速升级为灾难

我试图学习HTMLcanvas,并且正在进行一个基本的物理模拟,在这个模拟中,一些球被绘制并运动,并且程序模拟它们碰撞并且从墙壁和彼此反弹。 这是模拟。 每个球最初被赋予一个随机的位置,方向和一个恒定的起始速度。 为了简单起见,球的质量等于其半径。 速度vector被存储为(x,y)而不是极坐标,以使得计算更简单并且模拟更快,但是这显然具有意想不到的后果。 在上面的模拟中,我从10个球开始,每个球初始速度大小为3,所以系统的初始“速度”应该是30(= 10 * 3)。 在每一帧中,我计算所有球的总速度,并在一个表单域中读出来,用10个大小均匀的球,总速度似乎保持在30个单位以下。最小和最大半径减小,所有的球都是5号,或增加到20:总速度保持相对均匀。 然而,有趣的事情发生时,球的大小变化。 例如,如果将minRadius更改为5,将maxRadius更改为15,则会注意到系统的总速度随着时间的推移而开始攀升。 差距越大,速度越快失控。 所以我的第一个猜测是,我搞砸了物理,但我不知道如何。 我的另一个猜测是,这是由积累浮点错误引起的,但有趣的是,它只是向上增长,并且从不向零。 另外,它似乎有一个限制; 虽然它不断波动,但它似乎被限制在与最小和最大球尺寸之间的三角洲相关的一些值上。 我的问题是要真正理解为什么发生这种情况? 我只是搞砸了一些简单的东西,或者是更险恶的事情呢?

我怎样才能简化这个代码来计算两个角度之间的最短旋转?

下面的代码将find最短的旋转(以弧度表示)(从pi到-pi),我需要将它应用于from离开。 Scalar rotationBetween(Scalar from, Scalar to) { Scalar fromMod = std::signbit(from) ? pi * 2 + std::fmod(from, pi * 2) : std::fmod(from, pi * 2); Scalar toMod = std::signbit(to) ? pi * 2 + std::fmod(to, pi * 2) : std::fmod(to, pi * 2); Scalar rotation = toMod – fromMod; if(rotation > pi) return rotation – […]

如何渲染在64位浮点环境中表示的几何graphics?

在这个关于星际公民的video中 ,在时间线的12:30标记处,你可以看到玩家放大的位置明显超出了32位浮点数的极限。 据我所知,在这个游戏中,他们使用64位浮点精度进行位置计算。 我想实现类似的东西:一个环境,其中的对象用64位浮点精度表示,但仍然可以在32位GPU上呈现。 我不明白Star Citizen如何能够以32位GPU正确比例渲染它,因为我已经读过大多数GPU在双精度模式下运行速度慢了3倍。 换句话说,我应该如何将顶点位置和其他渲染数据精确地传递给底层渲染硬件? 我应该怎么做的数据在32位的空间? 还是应该使用双精度GPU?

顶点与大相机位置值一起摇动

基本上,当我将我的相机(我的角色在游戏中)的位置设置为较高值时,几何graphics似乎在摇动,位置值越高,摇动得越多。 在低位置值你似乎无法注意到任何震动。 我创建了一个video,使其easyer解释: http : //www.youtube.com/watch?v= dxg6wIl1U1Q 在video中,我将更改为chunkAmount从100 – > 100000这是我在以下使用的值: player.position.z = blocksize*((chunksamount/2)*blocksPerRow); player.position.x = blocksize*((chunksamount/2)*blocksPerRow); 这是50'000 * 32 * 16 => position.x = 25600000

连续的世界和非常大的水平:与Ogre3D绕过FPU限制

我现在正在使用Ogre3D,我想知道是否有可能使用正确的场景管理器有一个非常大的水平(数百公里)。 存储或拥有关卡不是问题,因为我可以通过程序重复对象,我的目标是关卡的大小,而不是质量。 取自http://floatingorigin.com/mirror/continuous-world.htm : 想象一下,两个角色在距离原点东方两米的地方行走。 在某一时刻,距离彼此的距离被来自原点的距离所压倒,并且角色将看起来是“在相同的位置”。 我想知道是否唯一可行的解​​决scheme,如地牢围攻文章中描述的那些问题的解决scheme,如果它需要深度引擎修改或不。 我不确定分页的场景管理员或PCZ场景管理员如我所想重置零。

我应该使用浮点数,双精度还是小数点作为统计,位置等?

float和double的问题在于它们不是确切的。 如果你要做一些类似商店的重播,那么这个值必须是精确的。 十进制的问题是它们大约比浮动和双打慢了16倍(通过search和个人testing证实)。 不能Vector2s是另一个问题,因为他们在所有的组件内部使用浮动? 其他游戏如何解决这个问题? 我敢肯定,他们必须使用浮动和双打,但不是不确定性跨平台和不同的架构? SC2等游戏的重放文件以线性方式运行,所以不能跳过,因此如何解决浮点数的确定性问题?