iphone – 在OpenGL中移动相机时出现故障

我正在为iPhone编写一个基于磁贴的游戏引擎,除了下面的故障之外,它还可以正常工作.基本上,相机将始终将播放器保持在屏幕的中央,并且移动以正确地跟随播放器并在静止时正确地绘制所有内容.然而,当玩家移动时,玩家在小故障上行走的表面的瓷砖如图所示:

http://img41.imageshack.us/img41/9422/movingy.png

与静止(正确)相比:

http://img689.imageshack.us/img689/7026/still.png

有谁知道为什么会这样?

感谢到目前为止的回复.浮点错误也是我的第一个想法,我尝试稍微增加瓷砖的大小,但这没有帮助.将glClearColor更改为红色仍会留下黑色间隙,因此可能不是浮点错误.由于瓷砖一般会使用不同的纹理,我不知道是否可以使用顶点数组(我一直认为必须将相同的纹理应用于数组中的所有内容,如果我错了就纠正我),然后我不要以为VBO在OpenGL ES中可用.将过滤设置为最近邻居改进了一些事情,但是每10帧左右仍然会发生故障,并且像素结果意味着此解决方案无论如何都不可行.

我现在正在做的事情和我过去所做的事情之间的主要区别在于,这次我正在移动相机而不是世界上的静止物体(即瓷砖,玩家仍然被移动).我用来移动相机的代码是:

void Camera::CentreAtPoint( GLfloat x, GLfloat y )
{
 glMatrixMode(GL_PROJECTION); 
 glLoadIdentity();
 glOrthof(x - size.x / 2.0f, x + size.x / 2.0f, y + size.y / 2.0f, y - size.y / 2.0f, 0.01f, 5.0f);
 glMatrixMode(GL_MODELVIEW);
}  

以这种方式做事是否有问题,如果有的话有解决方案吗?

最佳答案 我的第一个猜测是
floating point rounding error.这可能导致你的四边形的坐标稍微偏离,导致你看到的差距.要验证这一点,您可能想尝试更改glClearColor()并查看间隙是否随之改变颜色.

对此的一个解决方案是使瓷砖稍大.只需要一个非常小的增量(如0.0001f)来掩盖这种错误.

或者,您可以尝试使用Vertex ArrayVBO来存储地面网格(确保相邻的正方形共享顶点).我希望这可以解决这个问题,但我不是百分百肯定 – 而且它也应该更快.

点赞