所以我最近觀看了Z戰的視頻,並且學會了一種簡單的方式來照顧它 - 主要是。給出的解決方案是實際上歪斜投影,以便爲更精確的深度測試提供更多空間(因爲浮點只能如此精確),並且將更遠的物體塞入投影的一小部分區域。現在,我對OpenGL和圖形編程還很陌生(只是慢慢地開展工作),實際上我沒有做出任何足夠複雜的工作,但這對我來說是個問題,但我將來可能需要知道這一點。無論如何,上述解決方案帶來的新問題更加嚴重的是在遠距離的Z-戰鬥(例如,天際山,鐵鏽山等)。是否有更好的解決方案,即使它具有性價比,也不涉及圖形折衷?假設地說(因爲我對OpenGL管線還不是很舒服),程序中的Z值在進行深度測試之前是否可以加倍加倍?如何避免Z距離戰鬥?
讓我澄清。想想天際。注意山脈有時會閃爍嗎?當使用OpenGL渲染場景時,所有對象都會被擠壓或「夾」到Z值爲-1.0到1.0的小座標平面中。然後對每個物體進行深度測試 - 樹木,雪,山脈,動物,房屋,您可以對其進行命名,以便在被其他物體覆蓋時不會繪製任何物體。然而,浮點只能達到一定的精度,因此將數百個物體夾在一個小空間中不可避免地會導致某些物體具有完全相同的Z座標,並且這兩個物體在屏幕上一起閃爍,稱爲「Z -戰鬥」。我在問每個對象的深度(z-)座標是否可以轉換爲雙精度,以便它們具有足夠的精度(值得爲可忽略的一段時間使用可忽略的額外內存),以便按正確的順序精確繪製對象,而不會相互剪切。
不錯的問題,但「鑄造」到一個更大的類型不會自動增加細節。如果您將Pi的值存儲在float中並稍後將其轉換爲double,則它不會自動獲得更有意義的數字。 – usr2564301
不會,只有在z值被強制調整之前,它們纔會使z值增加一倍 - 這樣當它們夾在-1.0和1.0之間時,精度就會高得多,而且不會像重複的Z值那麼容易。 –
您必須記住OpenGL的深度緩衝區需要爲每個像素*存儲深度值*。增加其保真度的唯一方法是將其深度設置爲使用更多字節。 (並且請注意,一些OpenGL實現對此大小有限制。)您可能需要閱讀https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm。 – usr2564301