我正在使用现代 opengl,我的目标是调试视锥体剔除。为了实现这一点,我创建了另一个视口(viewport),这样我就可以在我的主要程序中移动时查看我的整个模型和我的平截头体移动。
它有效,但仍然有一个我不明白的奇怪行为...... 我的视口(viewport)是:
glViewport(0,0, screenWidth, screenHeight)
//render my program with motionned camera
glViewport(screenWidth/2, screenHeight/2, screenWidth/2, screenHeight/2)
//render my MotionLess Camera
由于我将它们堆叠起来,我想知道它是否会产生未定义的行为?因为我的结果不是我所期望的。 (这是您将看到的更好的抽奖!:)
事实上,我的想法是我的屏幕会像红色部分和深红色部分 => 我的程序呈现在红色部分,而我静止的相机呈现在深红色部分。但是出现了黄色部分=>我的motionned camera渲染在红色屏幕上,没关系。但是我不动的相机渲染出来的是黄色部分,其余较深的红色是黑色。
我用我的真实例子给你看:
你知道它是从哪里来的吗?
** 编辑:** 正如 datenwolf 提到的,我的问题是由于我正在渲染给 FBO 的脸。当您在 FBO 中渲染时,您似乎不想使用 (0,0) 以外的 glViewport 偏移量(参见:HereIsAnAnswer)。
最佳答案
(…) Since I'm stacking them, (…)
OpenGL 视口(viewport)不堆叠。每次调用 glViewport
都会替换之前设置的任何视口(viewport)。
(编辑):此外,视口(viewport)不一定会剪切在其外部变换的几何体,即,如果视口(viewport)只是窗口的一部分,那么视口(viewport)“外部”的东西可能仍然存在可见。为确保您实际上是在视口(viewport)外剪裁东西,您必须将其与剪刀测试 (glEnable(GL_SCISSOR_TEST)
) 结合使用,并设置剪刀矩形以匹配使用 glScissor(...)
的视口(viewport)。
关于c++ - opengl 堆栈 glViewport 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45863455/