簡體   English   中英

opengl堆棧glViewport奇怪的行為

[英]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中使用的剪輯空間和其他坐標系的文檔:

https://learnopengl.com/#!入門/協調系統

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM