c++ - 使 Sprite 居中还是移动相机? C++/Opengl

标签 c++ opengl camera tile

我正在自学 C++ 并玩弄 2D tile mapping。

我一直在阅读这篇滚动 帖子 here ,这是基于这个 tiling tutorial .

使用上面的教程和Pearson,OpenGL 计算机图形学 一书的一些帮助,我编写了一个小程序来绘制一个40x40 平铺世界和一个 Sprite(也是一个图 block )。

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

我已经实现了一个 Keyhandling() 函数,让您可以使用 keyboards arrow keysviewport 移动 map/。我有一个名为 offsetx, offsety 的变量,当按下某个键时它会增加或减少。根据我是将变量分配给 map 还是 sprite,我可以在屏幕上的任何方向增加一个或另一个。

两者似乎都不是很好,所以我将变量分配给两者( map 和 Sprite ),但 Sprite 的值为正, map 的值为负。因此,只要按下一个键,我的 Sprite 就可以朝一个方向移动,而 map 会朝相反的方向移动。

我的问题是, Sprite 很快移动到足以离开窗口,但不足以将更多 map 带入场景。 (该窗口一次仅显示大约 1/8 的图 block )。

我一直在思考一整天,我认为解决这个问题的一种高效/有效的方法是将 sprite 固定在屏幕中央,当按下一个键时 map 四处移动...不过我不确定如何实现它。

这会是个好方法吗?还是希望它也移动视口(viewport)或相机?

最佳答案

您不想在角色移动时移动与 Sprite 相关的所有内容。考虑一个更复杂的世界,您在 map 上还有其他东西,例如其他 Sprite 。最简单的方法是保持 map 固定,并相对于 map 移动每个 Sprite (如果它是可移动的 Sprite )。每当您的角色在世界中四处移动时,移动世界上的一切就没有多大意义。

如果您希望渲染您的世界时始终以您的角色为中心,那完全没问题。最好的办法是移动相机。这还允许您放大/缩小相机、旋转相机等,而无需跟踪世界上的所有对象。

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

关于c++ - 使 Sprite 居中还是移动相机? C++/Opengl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671729/

相关文章:

android - Android 中的 setPreviewSize() 错误?

c++ - 从 vector 中提取特定的数字序列

c++ - 在 .vcproj RelativePath 中使用 "User Macro"

python - 如何在 python 中加载 *.obj 文件并对其应用纹理

c++ - 我想知道像素/片段的原始模板值,零还是一?如果可能得到什么具体的行动修改模板值?

java - 多个摄像头同时openimaj

Android 来自自定义相机的新拍摄照片不会出现在图库(媒体商店)中

c++ - "using Time = cppClassDefinition<withT>"的 Cython 等价物

C++ 条件等待竞争条件

c++ - 如何将 GLEW 与 MinGW 一起使用