作爲我的問題的簡單演示,我試圖渲染一個大而簡單的網格到稍後使用的紋理,但奇怪的是,進一步從特定角度觀看時,此網格的相機部分會從靠近相機的部分顯示。儘管不可否認的事實是我做的毫無疑問的使用深度測試:OpenGL深度排序在單個網格上失敗時,渲染到幀緩衝而不是屏幕
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
舉個例子,我試圖呈現一個細分網格(在XZ平面)爲中心的起源,具有光滑的「山」在電網中間。
當呈現給沒有錯誤發生屏幕和網狀看起來像這樣(渲染使用正投影,並且與灰度顏色代表深度,即使網由任何一側觀察將進一步發生錯誤):
渲染到屏幕當然是通過確保幀緩衝區設置爲0(glBindFramebuffer(GL_FRAMEBUFFER, 0);
)來完成的,但我需要渲染這個場景到另一個場景的幀緩衝這是不是我的屏幕,才能使用此渲染作爲紋理。
所以我已經設置了另一個framebuffer和一個輸出紋理,現在我正在將這個場景重新渲染到framebuffer(除了framebuffer和視口大小設置爲與輸出紋理相匹配外,沒有任何更改)。爲了演示我正在嘗試的錯誤,然後將該渲染的紋理渲染到屏幕上顯示的平面上。
當網格從正x軸旋轉看,並圍繞y軸旋轉時,以其原點爲中心在-0.5π弧度和0.5π弧度之間,呈現的紋理看起來與渲染到屏幕,如上圖所示。
然而,當圍繞y軸旋轉大於0.5π弧度或小於-0.5π弧度時,更靠近相機的小山位於離相機更遠的平面之後(事實上這山更接近攝像機可以通過看顏色,它代表debth)得到證實:
(哎呦得到了標題錯了窗戶上,忽略了)
在繞y軸旋轉的邊界區域接近0.5π弧度或-0.5π弧度,場景看起來像這樣。
(哎呦再次拿到了冠軍錯誤的窗口上,再次忽略)
回顧一下。只有在使用幀緩衝區渲染到紋理時,以及僅當從特定角度查看對象時,纔會發生深度排序錯誤。當對象直接渲染到屏幕上時,不會發生錯誤。我的問題是:爲什麼會發生這種情況,以及如何(如果有的話)我可以避免避免它。
第一張照片......看起來不像一個正交投影。它看起來像一個透視投影給我。 –