0

我是一个制作简单游戏的初学者,我为机器人建模并为其提供控制。你基本上四处走动,但有重力。它工作得很好,直到我让它掉了很长时间,当我注意到一些奇怪的事情时。

这是出现问题之前的样子: 网格变形问题之前

然后在我从平台上摔下来后,在 y 轴上大约 -2000 处,出现了变形: 当出现网格变形问题时

它在 y 轴上大约 -20,000 处变得特别极端: 当网格变形问题变得极端时

这只是一个压缩问题吗?我尝试了压缩和未压缩的两种方式,两种方式都发生了。也许是引擎中的问题?

4

1 回答 1

2

根据您提供的数字,很明显您遇到了浮点精度问题。具体效果取决于您的平台,但 OpenGL ES 着色语言规范对硬件制造商有一些最低要求:

https://www.khronos.org/files/opengles_shading_language.pdf(第 4.5.2 节)

虽然 The Khronos Group 似乎highp新版本的规范中增加了最低精度要求,这似乎是OpenGL ES 3.0所需的版本,但我不知道您到底在使用什么以及您的硬件是否符合要求到它,所以我将使用我链接的第一个规范。基于此,GLSL 浮点数具有以下最小精度:

highp  : 2^-16 = 0.0000153
mediump: 2^-10 = 0.000977
lowp   : 2^-8  = 0.00391

假设您的硬件没有超出最低要求,即使highp距离原产地 20,000 个单位,您也会遇到大约 0.3 个单位的精度问题。考虑到您的顶点位于 1x1x1 单位框内,这相当于相对于您的对象大小有大约 30% 的误差,这与您共享的图像一致。

作为一种解决方案,请尝试使您的对象更靠近原点;如果/需要时转移您的原点。

于 2018-08-14T17:31:11.680 回答