【问题标题】:Multiple OpenGL contexts / views多个 OpenGL 上下文/视图
【发布时间】:2015-06-09 14:02:57
【问题描述】:

我应该编写一个 OpenGL 程序,它显示一个对象的 3D 视图,两个视图分别显示 3D 对象的横截面,一个视图显示对象的扫描信号。所有这些都驻留在一个 Windows 窗口(对话框窗口)中。根据定义,这四个视图的内容是相互关联的,但是从 OpenGL 的角度来看,我很难弄清楚如何实现这四个视图。

  • 我应该选择多 OpenGL 上下文还是多视口解决方案?
  • 如何将着色器程序链接到每个单独的上下文或视口?每个视图会有单独的着色器程序吗?

【问题讨论】:

  • 我没做过,不过相信你用glViewport把画布限制在窗口的一部分,然后正常渲染;对每个视图重复。

标签: opengl


【解决方案1】:

正如您已经发现的那样,您基本上有两种选择如何从不同的角度展示模型。选择哪一个取决于您的需求,因为两者都有一些优点和一些缺点。

解决方案 1:一个上下文

在这种情况下,您可以使用 glViewport 指定要渲染每个视图的区域,然后正常渲染。在这种情况下,您只需要一次数据和着色器,因为您在相同的上下文中进行渲染。这种方法的缺点是,所有视图一起必须跨越一个矩形区域,它们之间没有任何其他控件。此外,不可能在不同的窗口中呈现不同的视图。

解决方案 2:多个视口

在这里,每个视图分别有一个窗口句柄(和一个上下文)。在这种情况下,对不同视图的排列没有限制,但是您必须多次加载数据和着色器(在每个上下文中加载一次)。根据您正在使用的系统,可能有一些选项可以在不同的上下文之间共享 OpenGL 对象。

【讨论】:

    【解决方案2】:

    即使使用单个 OpenGL 上下文,您也可以通过多种方式实现此目的。一些明显的选择是:

    • 使用glViewport - 此函数定义OpenGL 将在窗口上绘制的位置(以像素为单位的矩形)。为 3D 视图调用一次(可能类似于 glViewport(0, 0, window_width / 2, window_height / 2)),渲染 3D 视图,调用第一个横截面,渲染它,等等。
    • 使用离屏渲染 - 创建一个帧缓冲区,渲染到帧缓冲区的指定角落(可以认为是一个虚拟屏幕),并在窗口上从帧缓冲区绘制最终纹理。

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 2013-02-04
      • 1970-01-01
      • 2012-08-23
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2013-02-23
      相关资源
      最近更新 更多