Answers:
斯科特·比拉斯(Scott Bilas)从事《地牢围攻》并撰写了论文《地牢围攻的连续世界》。虽然Dungeon Siege不是MMO,但它确实有世界,他在论文中谈到球员的位置。我发现这是一本好书。这是相关的部分:
精度问题
从一开始,工程团队就知道连续世界将对引擎和内容设计产生重大影响,而核心问题是数值稳定性。想象一下,有两个角色走在相距两米的编队中,向东离开原点。在某个点上,彼此之间的距离被与原点的距离所淹没,并且这些字符看起来像是“在同一位置”。
使用浮点运算,您离原点越远,您失去的精度就越高,这可能导致各种麻烦的问题。事情无法正确进行,相邻网格之间出现裂缝,空间开始量化,猫狗开始生活在一起。Dungeon Siege在单精度模式下使用FPU具有明显的性能优势,并与视频硬件的固有精度相匹配。但是,即使我们提高了精度,它最终也将永远无法解决问题,因为这个世界计划并最终变得非常大。
精度问题意味着不可能像大多数其他游戏一样拥有统一的世界坐标空间。相反,解决方案是将连续世界分割成一组独立的坐标空间,并定期在它们之间切换以重置精度。在这些限制条件下尝试了各种想法,我们最终决定使用标准门户网站系统的变体。
我们的解决方案由基于关系节点的坐标系统组成,其中几何的每个块(围攻节点)都有自己的坐标空间,并通过与相邻对象共享的门在空间上链接到相邻的几何对象。由门连接的节点的排列形成代表整个世界地图的连续图形。随着时间的推移,该节点系统从最初保持FPU精度的目标演变为有效细分空间的主要方法,以及无数次优化的根本。
为了封装相对于特定节点的3D位置的概念,传统(x,y,z)向量必须增加一个节点ID(x,y,z,node)并代表与原点的偏移量而不是特定节点。该4元组被封装为Siege节点位置或SiegePos。稍后,我们添加了SiegeRot(四元数,节点),以便处理节点之间方向之间的比较。
“没有世界空间”一词成为车队的口头禅,尽管从字面上看,每个人都花了数年时间才能完全理解其含义。
通常是Wow,Tibia等在线游戏。存储玩家pos。在SQl播放器元表中使用三个变量X + Y +Z。Runescape在不使用Z的情况下执行此操作-这样,播放器始终呈现在地面网格的顶部。