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

标签 c++ opengl

我正在使用现代 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

由于我将它们堆叠起来,我想知道它是否会产生未定义的行为?因为我的结果不是我所期望的。 (这是您将看到的更好的抽奖!:)

enter image description here

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

我用我的真实例子给你看:

enter image description here

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

** 编辑:** 正如 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/

相关文章:

c++ - TBB concurrent_queue,unsafe_size有多不安全?

java - 使用 LWJGL 链接和编译 OpenGL 3.3 和 2.1 的着色器

c++ - 对于不同的点 OpenGL 查看相同的颜色

c++ - friend 功能和 friend 类有什么区别?

c++ - 质因数分解的除数

python - 如何生成圆环结?

opengl - 在计算着色器中写入空 3D 纹理

c++ - OpenGL 多重纹理 - glActiveTexture 为 NULL

c++ - 这是在 C++ 中实现组合的正确方法吗?

c++ - 为什么没有 std::move_if 算法?