OpenGL中的地形小地图?

Pol*_*878 2 c++ opengl graphics

所以我本质上是一个游戏...这个游戏有地形。我希望能够创建一个自顶向下的视图小地图,以便“玩家”可以看到他们要去的地方。我正在地形上做一些阴影处理,所以我也希望将其显示在小地图中。看来我只需要创建第二台摄像机,然后以某种方式使该摄像机的显示出现在特定的框中。我也在想像镜子这样的东西会起作用。

我正在寻找可以采用的方法,基本上可以给我与当前相同的观点,只是自上而下...这似乎可行吗?随时提出问题...谢谢!

cha*_*tar 5

一种方法是创建一个附加了渲染缓冲区的FBO(帧缓冲区对象),向其渲染您的小地图,然后将FBO绑定到纹理。然后,您可以将纹理映射到任何想要的东西,通常是四边形。您可以对各种HUD对象执行此操作。这也意味着您不必像主视图那样频繁地重绘HUD /菜单对象的内容。仅根据需要更新关联的缓冲区。在这种情况下,您通常需要对在FBO上渲染的对象/场景进行降采样(从多边形计数的角度而言)。您要检查的API中的函数是:

  • glGenFramebuffersEXT
  • glBindFramebufferEXT
  • glGenRenderbuffersEXT
  • glBindRenderbufferEXT
  • glRenderbufferStorageEXT
  • glFrambufferRenderbufferEXT
  • glFrambufferTexture2DEXT
  • glGenerateMipmapEXT

gamedev.net上有关于使用FBO的文章。另一个潜在的优化是,如果小地图的内容是静态的,而您只是在静态视图上移动摄像机(实际上只是一个地图)。您可以通过调整映射到其上的对象的纹理坐标来渲染比实际要显示给播放器大得多的地图部分,并伪造相机。仅当您的小地图为正交投影时,此方法才有效。

  • 是的,您可以以与在窗口的帧缓冲区中正常绘制完全相同的方式绘制到 FBO(与在与前台缓冲区交换之前渲染到后台缓冲区相同)。您可以在每个 FBO 中使用不同的 gluPerspective/gluLookAt。好处是如果您不需要为当前帧重新绘制,则不必在 FBO 中重新绘制,FBO 可以是任何尺寸,并且在用于纹理时速度非常快,因为您不需要使用一个 glCopyTexImage。您可以创建许多 FBO 并使用 glBindFramebufferEXT 在它们之间切换(0 绑定您曾经使用的窗口的帧缓冲区)。 (2认同)