[英]opengl stack glViewport strange behaviour
我正在使用現代的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 )。
(...)因為我要堆疊它們,所以(...)
OpenGL視口不堆疊。 每次調用glViewport
替換之前設置的任何視口。
(編輯):同樣,視口也不一定會剪切在其外部變換的幾何形狀,即,如果視口只是窗口的一部分,則視口“外部”的內容可能仍然可見。 為了確保實際上是在視口外部裁剪內容,您必須將其與剪刀測試結合使用( glEnable(GL_SCISSOR_TEST)
),並使用glScissor(…)
將剪刀矩形設置為與視口匹配。
看起來您正在使用從0..1
而不是-1..+1
剪輯空間坐標進行渲染的某個地方(假設“黃色”錯誤部分就是您希望在整個暗紅色部分中出現的部分)。
因此,也許在頂點着色器中,您需要將頂點縮放2並減去1,才能從0..1坐標移動到-1 .. + 1坐標?
另外,它是glViewport()
,但可能只是問題中的錯字。
有關OpenGL中使用的剪輯空間和其他坐標系的文檔:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.