c++ - 当前设置的 OpenGL C++ 小 map

标签 c++ opengl

我正在寻找一种从当前 3D 场景的顶部创建第二个 View 的方法。我想尽可能简单地做到这一点。基本思想是您有一个子窗口,将显示设置的顶 View 。

我研究过 openGL 中的子窗口,但问题是您必须重绘所有内容(基本上以 2 个不同角度的场景结束 = 不好)。也因为这将用于名为“塔盒堆叠”的 3D 游戏(你必须将盒子放在彼此的顶部并 build 一座高塔)它不可能使用子窗口的方式来做到这一点(因为你会得到 2 个场景具有不同的 block /位置/ Action /...)

那么我怎样才能将“第二台摄像机”添加到我当前的场景,然后将其放置在顶部。

最佳答案

I've looked into subwindows in openGL but the problem is you have to redraw everything (basically ending up with 2 scene's with different angle = not good)

这实际上是使用 OpenGL 执行此操作的唯一方法。

So how can I add a "second camera" to my current scene and then position it on top.

OpenGL 没有相机。它甚至没有场景。 OpenGL 仅绘制非常简单的形状:点、线和三角形。除此之外,OpenGL 不了解几何或复杂场景。

场景管理由您决定,绘制一个场景的多个 View 由您来实现。


更新:伪代码

draw_scene:
    for o in objects:
        glPushMatrix()
        glMultMatrix(o.transform)
        o.draw()
        glPopMatrix()

render_main_view:
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glFrustum(...)

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    glMultMatrix(main_camera_transform)

render_secondary_view:
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glFrustum(...)

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    glMultMatrix(secondary_camera_transform)

scissor_viewport(x,y,w,h)
    glScissor(x,y,w,h)
    glViewport(x,y,w,h)

render:
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glEnable(GL_SCISSOR_TEST)
    scissor_viewport(main_viewport.x,main_viewport.y,main_viewport.w,main_viewport.h)
    render_main_view()

    glClear(GL_DEPTH_BUFFER_BIT)
    scissor_viewport(secondary_viewport.x,secondary_viewport.y,secondary_viewport.w,secondary_viewport.h)
    render_secondary_view()

关于c++ - 当前设置的 OpenGL C++ 小 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646034/

相关文章:

c++ - C++中观察者模式实现中的循环引用

c++ - QT showstatus 提示仅在鼠标离开窗口并返回后显示

c++ - 普通 ctor(或 dtor)和用户定义的空 ctor(或 dtor)之间有什么区别

c++ - 如何在 C++ 中调用不同项目的方法?

c++ - 如何将 Cinder 安装到 Visual Studio?

c++ - 在 VIsual studio 2010 express 中使用 GLEW、SDL 和 OpenGL 无法解析的外部符号

c++ - 在构建 kd-Tree 时对 'median' 的定义感到困惑

c++ - 通过 C++ openGL 创建直升机聚光灯

c++ - ffmpeg转OpenGL纹理黑屏

openGL 在像素传输期间反转纹理方向?