【问题标题】:Terrain minimap in OpenGL?OpenGL中的地形小地图?
【发布时间】:2009-11-14 06:26:29
【问题描述】:

所以我有一个本质上是游戏的东西......这个游戏中有地形。我希望能够创建一个自上而下的小地图,以便“玩家”可以看到他们要去的地方。我正在地形上做一些阴影等,所以我希望它也出现在小地图中。似乎我只需要创建第二个相机并以某种方式让该相机的显示屏显示在特定的框中。我也在想像镜子之类的东西会起作用。

我正在寻找我可以采取的方法,这些方法基本上会给我与我目前的观点相同的观点,只是自上而下......这看起来可行吗?随时提出问题...谢谢!

【问题讨论】:

    标签: c++ opengl graphics


    【解决方案1】:

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

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

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

    【讨论】:

    • 使用多个视口也可以吗?我可以将多边形渲染到帧缓冲区吗?显然我对图形编程很陌生哈哈。
    • 是的,您可以使用与在窗口的帧缓冲区中正常绘制完全相同的方式绘制到 FBO(与在与前缓冲区交换之前渲染到后缓冲区相同)。您可以在每个 FBO 中使用不同的 gluPerspective/gluLookAt。好处是如果你不需要为当前帧重新绘制FBO,你不必在FBO中重绘,FBO可以是任何尺寸,而且当你不需要使用纹理时它非常快一个 glCopyTexImage。您可以创建许多 FBO 并使用 glBindFramebufferEXT 在它们之间切换(0 绑定您以前使用的窗口帧缓冲区)。
    【解决方案2】:

    好吧,我没有回答您的具体问题,但在游戏中,使用上方的正交透视图将世界渲染为图像,并将其用于小地图是很常见的。与动态渲染相比,它的性能至少要低一些。

    【讨论】:

      猜你喜欢
      • 2011-12-08
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多