我应该编写一个OpenGL程序,它显示一个对象的3D视图,两个视图显示3D对象的横截面,一个视图显示对象的扫描信号。所有这些都驻留在一个Windows窗口(对话框窗口)中。根据定义,这四个视图的内容是相互关联的,但我在某种程度上难以弄清楚如何从OpenGL的角度来实现这四个视图。
答案 0 :(得分:0)
正如您已经发现的那样,您基本上有两种选择如何从不同的角度展示模型。选择哪一个取决于你需要什么,因为它们都有一些优点和一些缺点。
解决方案1:一个上下文
在这种情况下,您可以使用glViewport指定要在其中渲染每个视图的区域,然后正常渲染。在这种情况下,您只需要一次数据和着色器,因为您在相同的上下文中进行渲染。这种方法的缺点是,所有视图一起必须跨越矩形区域,而它们之间没有任何其他控件。此外,不可能在不同的窗口中呈现不同的视图。
解决方案2:多个视口
这里,每个视图都有一个窗口句柄(和一个上下文)。在这种情况下,对于不同视图的排列没有限制,但您必须多次加载数据和着色器(在每个上下文中一次)。根据您正在使用的系统,可能有一些选项可以在不同的上下文之间共享OpenGL对象。
答案 1 :(得分:0)
即使使用单个OpenGL上下文,您也可以通过多种方式实现这一目标。一些明显的选择是:
glViewport
- 此函数定义OpenGL将在窗口上绘制的位置(以像素为单位的矩形)。将其调用一次用于3D视图(可能类似于glViewport(0, 0, window_width / 2, window_height / 2)
),渲染3D视图,调用第一个横截面,渲染它等等。