使用 GLUT 渲染多个视口
Rendering Multiple Viewports using GLUT
我想使用 OpenGL 和 GLUT 从两个不同的视点渲染一个场景。对于第一个视点,它是使用着色器的标准透视投影。对于第二个视点,它是深度缓冲区的可视化。我希望这两张图片并排包含在同一个 window 中。
到目前为止,我一直在使用GLUT进行展示。例如,我使用:
glutInitWindowSize(1000, 1000);
glutInitWindowPosition(500, 200);
glutCreateWindow("OpenGL Test");
这将为我定义的一个视口绘制整个 window 的场景。但是我可以使用 GLUT 从两个不同的视口绘制两个不同的图像,如上所述吗?或许仅使用 GLUT 并不容易,我需要在我的操作系统中本地创建一个 window(我使用的是 Ubuntu),然后在其中定义两个不同的区域 window 我应该借鉴...
谢谢!
您可以通过两种方式做到这一点:
您可以使用 glutCreateWindow()
创建一个新的 window。请注意,这将具有不同的 OpenGL 上下文。另请注意,它有一个 return 值,一个整数。
您可以 select 使用 glViewport()
的 window 部分,然后再次调用 glViewport()
以绘制相同的不同部分window.
GLUT最终与它无关。它创建并管理一个 window。你在 内 window 做什么完全取决于你。
您需要做的是使用viewport transform. Because the viewport happens after clipping, no primitives outside of the range of the viewport transform will be rendered to (by drawing commands。缓冲区清除仍将清除整个帧缓冲区)。这有效地定义了所有顶点将位于的 window 区域。
所以你调用glViewport
,指定window的一半。然后你在那一半渲染你想要的东西。然后调用 glViewport
指定另一半。然后你在那里渲染你想要的东西。然后你就完成了;只是交换缓冲区。
然而,这也意味着仅在 GLUT 调整大小回调中调用 glViewport
的典型策略将不起作用。您必须存储 window 的当前大小,然后在您的显示函数中使用它。
始终可以选择将您的两个视图渲染到一个纹理中,然后简单地制作一个屏幕大小的四边形并将该纹理渲染到您的四边形上。
我不确定它是否会满足您的所有需求,但从视觉角度来看,这应该会给您相同的结果。
我想使用 OpenGL 和 GLUT 从两个不同的视点渲染一个场景。对于第一个视点,它是使用着色器的标准透视投影。对于第二个视点,它是深度缓冲区的可视化。我希望这两张图片并排包含在同一个 window 中。
到目前为止,我一直在使用GLUT进行展示。例如,我使用:
glutInitWindowSize(1000, 1000);
glutInitWindowPosition(500, 200);
glutCreateWindow("OpenGL Test");
这将为我定义的一个视口绘制整个 window 的场景。但是我可以使用 GLUT 从两个不同的视口绘制两个不同的图像,如上所述吗?或许仅使用 GLUT 并不容易,我需要在我的操作系统中本地创建一个 window(我使用的是 Ubuntu),然后在其中定义两个不同的区域 window 我应该借鉴...
谢谢!
您可以通过两种方式做到这一点:
您可以使用
glutCreateWindow()
创建一个新的 window。请注意,这将具有不同的 OpenGL 上下文。另请注意,它有一个 return 值,一个整数。您可以 select 使用
glViewport()
的 window 部分,然后再次调用glViewport()
以绘制相同的不同部分window.
GLUT最终与它无关。它创建并管理一个 window。你在 内 window 做什么完全取决于你。
您需要做的是使用viewport transform. Because the viewport happens after clipping, no primitives outside of the range of the viewport transform will be rendered to (by drawing commands。缓冲区清除仍将清除整个帧缓冲区)。这有效地定义了所有顶点将位于的 window 区域。
所以你调用glViewport
,指定window的一半。然后你在那一半渲染你想要的东西。然后调用 glViewport
指定另一半。然后你在那里渲染你想要的东西。然后你就完成了;只是交换缓冲区。
然而,这也意味着仅在 GLUT 调整大小回调中调用 glViewport
的典型策略将不起作用。您必须存储 window 的当前大小,然后在您的显示函数中使用它。
始终可以选择将您的两个视图渲染到一个纹理中,然后简单地制作一个屏幕大小的四边形并将该纹理渲染到您的四边形上。
我不确定它是否会满足您的所有需求,但从视觉角度来看,这应该会给您相同的结果。