定心雪碧还是移动相机? C ++ / Opengl的

时间:2013-03-27 23:51:00

标签: c++ opengl camera tile

我正在自学C ++并玩2D平铺贴图。

我一直在阅读此scrolling帖子 here ,该帖子基于此 tiling tutorial

使用上面的教程和Pearson, Computer Graphics with OpenGL书中的一些帮助,我编写了一个小程序,用于绘制40x40平铺世界和Sprite(也是图块)。

就绘制/渲染顺序而言,地图(或世界)本身就是背层,而Sprite是最前面(或顶部)层。我假设这是一个很好的方式,因为2个瓷砖比瓷砖和自定义精灵或矩形更容易交互。这是对的吗?

我已经实施了Keyhandling()功能,可让您使用map移动viewport内的keyboards arrow keys。我有一个名为offsetx, offsety的变量,当按下一个键时会增加或减少。根据我是将变量分配给map还是sprite,我可以在屏幕上的任何方向上进行更多操作。

两者似乎都不能很好地工作,所以我将变量分配给(map和sprite),但是sprite为正值,而map为负值。因此,按下按键时,这允许我的精灵在一个方向上移动,同时地图以相反的方向移动。

我的问题是,精灵很快移动到离开窗口并且不足以将更多的地图带入场景。 (窗口一次只显示约1/8th个图块。)

我一直在思考,我认为解决此问题的一种有效/有效的方法是将sprite修复到屏幕的中心,当按下某个键时{{1}移动...我不确定如何实现这一点。

这会是一个好方法吗?或者它是否也会移动视口或相机?

1 个答案:

答案 0 :(得分:1)

你不想在角色移动时相对于Sprite移动所有内容。考虑一个更复杂的世界,你在地图上还有其他东西,例如其他精灵。最简单的方法是保持地图固定,并相对于地图移动每个精灵(如果它是一个可移动的精灵)。只要你的角色在世界各地移动,移动世界上的一切都没有多大意义。

如果你想要将你的角色永远放在中心来渲染你的世界,那就完全没问题了。最好的办法是移动相机。这样您还可以轻松地放大/缩小相机,旋转相机等,轻松跟踪世界上所有物体。

小心使用“viewport”一词。这意味着OpenGL中的一个非常具体的东西。 (即,查看函数glViewport)。如果你的书以不同的方式使用它,那很好。我只是指出这一点,因为我并不是100%清楚你的意思。