我正在使用现代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
由于我正在堆叠它们,我想知道它是否会产生未定义的行为?因为我的结果不符合我的预期。 (这里有更好的吸引力,你会看到!)
事实上,我的想法是我的屏幕就像红色和深红色的部分=>我的程序在红色部分呈现,而我的不动相机在深红色上呈现。但黄色部分出现=>我的动画相机在红色屏幕上呈现,没问题。但我的静止相机呈现在黄色部分,其余的深红色呈黑色。
我用真实的例子告诉你:
你知道它来自哪里吗?
**编辑:**正如datenwolf所提到的,我的问题是由于我向FBO呈现的面孔。当您在FBO中渲染时,似乎不希望使用除(0,0)之外的glViewport偏移量(请参阅:HereIsAnAnswer)。
答案 0 :(得分:3)
(...)因为我正在堆叠它们,(...)
OpenGL视口不会堆叠。每次调用glViewport
都会替换之前设置的任何视口。
(EDIT):此外,视口不一定会剪切在其外部转换的几何体,即如果视口只是窗口的一部分,则视口的“外部”可能仍然存在是可见的。要确保实际上在视口外部剪切内容,必须将其与剪刀测试(glEnable(GL_SCISSOR_TEST)
)结合使用,并使用{{1将剪刀矩形设置为与视口匹配}}
答案 1 :(得分:-1)
这看起来像是使用0..1
而非-1..+1
的剪辑空间坐标进行渲染(假设“黄色”错误部分是您希望在整个暗红色部分中出现的部分)。
所以也许在顶点着色器中,你需要将顶点缩放2并减去1以从0..1坐标移动到-1 .. + 1坐标?
此外,它是glViewport()
,但这可能只是问题的一个错字。
关于在OpenGL中使用的剪辑空间和其他坐标系的文档:
https://learnopengl.com/#!Getting-started/Coordinate-Systems