我正在使用现代的opengl,我的目标是调试视图视锥剔除。为了实现这一点,我创建了另一个视口,以便在我移动主体程序时可以查看我的整个模型和平截头体。

它可以工作,但是仍然有我不理解的奇怪行为...
我的视口是:

glViewport(0,0, screenWidth, screenHeight)
//render my program with motionned camera
glViewport(screenWidth/2, screenHeight/2, screenWidth/2, screenHeight/2)
//render my MotionLess Camera


由于我正在堆叠它们,所以我想知道它是否会创建未定义的行为?因为我的结果不是我预期的。 (这是您见过的更好的抽奖!:)

c++ - opengl堆栈glViewport奇怪的行为-LMLPHP

实际上,我的想法是我的屏幕会像红色和较暗的红色=>我的程序在红色部分上呈现,而我的不动相机在较暗的红色上呈现。但是出现了黄色部分=>我的动态摄像机呈现在红色屏幕上,没关系。但是我的静止相机是在黄色部分渲染的,其余深红色是黑色。

我以真实的例子向您展示:

c++ - opengl堆栈glViewport奇怪的行为-LMLPHP

您知道它是从哪里来的吗?

**编辑:**如datenwolf所述,我的问题是由于要渲染到FBO的面孔。在FBO中渲染时,似乎不想使用除(0,0)以外的glViewport偏移(请参见:HereIsAnAnswer)。

最佳答案

(...)因为我要堆叠它们,所以(...)


OpenGL视口不堆叠。每次调用glViewport都会替换以前设置的任何视口。

(编辑):视口也不一定会剪切在其外部变换的几何形状,即,如果视口仅是窗口的一部分,则视口“外部”的内容可能仍然可见。为了确保实际上是在视口外部裁剪内容,必须将其与剪刀测试(glEnable(GL_SCISSOR_TEST))结合使用,并使用glScissor(…)将剪刀矩形设置为与视口匹配。

关于c++ - opengl堆栈glViewport奇怪的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45863455/

10-12 15:35