2017-07-29 99 views
0

我一直在努力的3D游戏引擎和我遇到的振荡对象有问题的对象都在颤抖:OpengGL:如果旋转相机

img

如果旋转相机(没有翻译) ,然后对象开始晃动。此外,我注意到,在一个轨道(这是一个空间模拟器的原型)之后,摇晃和我开始游戏时一样低。我认为摇动不会更糟的时候,相机坐标几乎为零。

摄像机被绑定到对象,因此它应该是不可能的震动来自于动摇对象的物理坐标,因为这时相机应该动摇了。

我计算的视图和投影矩阵是这样的:

cameraAndProjectionMatrixSmallObjects = 
glm::perspective(glm::radians(70.f), 1.9f, 0.001f, 100.0f);* 
glm::lookAt(worldPosition, heading + worldPosition, up); 

我认为可能是与浮点精度的问题,但如果是这样的事情我不知道该怎么解决它。

+0

是您的向上向量垂直于视线('heading')的线,或者是它在相同的方向设置错误几乎一样的视线(当相机摇动)? – Rabbid76

+0

这是正常的标题,如果标题旋转,然后向上将旋转相同的矩阵。 –

+0

@DariusDuesentrieb看看这里:[?是否有可能使大小和质量的物质现实正体太阳能系统仿真(https://stackoverflow.com/a/28020934/2521214)。使用相对坐标将会有很大帮助(在传递给OpenGL **之前,翻译网格使得(0.0.0)是相机位置)。 – Spektre

回答

1

你的对象是来自世界原点太远。 GPU的精度浮点数有限,如果使用大数字,则对象开始晃动。尝试缩放1000倍的所有内容。您可以在此找到有关此问题的详细说明here

+0

我做到了,但它没有更好。也许我误解了你。 –

+0

检查大数字传递给OpenGL并更改您的代码以避免它们。 – abenci