2013-04-29 30 views
9

我的用戶的一個非常小的比例(< 1%)正在使用我的遊戲的OpenGL UI發生奇怪的失真。看來我的像素完美的投影設置:奇怪的OpenGL像素缺陷

glViewport(0, 0, clientSizeWidth, clientSizeHeight); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, clientSizeWidth, clientSizeHeight, 0, -1.0, 1.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
double transAmount = 0.375; 
glTranslated(transAmount, transAmount, 0.0); 

正在導致他們的系統出現問題。而且我一直沒有收集有關他們系統的細節,但我相信他們可以成功運行類似的OpenGL遊戲。所以我相信我的代碼有問題。

這裏是視覺假像的照片:

visual artifacts

這裏是沒有視覺假象圖片(忽略OS差):

without visual artifacts

雖然我遊戲將最終渲染縮放爲2倍,通過在1x渲染已經執行之後通過一次調用glSubTexImage2D來實現Rmed指。這意味着第一個屏幕截圖中的工件出現在像素加倍之前(因此爲什麼工件也像素加倍)。所以像素倍增不能成爲問題的根源。

有什麼想法可能會導致此?我目前無法測試。絕大多數用戶(包括我自己)都沒有體驗視覺文物。

編輯(4月30日):波蘭用戶告訴我他/她的視頻卡遇到這些工件,並且是「nVidia 9500 GS」。不知道這是否意味着9500M GS9500 GT,但都顯得相當現代。

+0

'0.375'從哪裏來? – 2013-04-29 23:43:38

+0

@BenVoigt它來自OpenGL紅皮書。請參閱[this](http://glprogramming.com/red/appendixg.html#name1)或[this](http://msdn.microsoft.com/en-us/library/ms537007%28VS.85%29。 ASPX)。 – 2013-04-29 23:46:15

+3

事實上,它只發生在某些表面2)發生在不同的表面上,對於不同的表面應該是問題代碼出現的一個重要提示。 – Patashu 2013-04-29 23:46:18

回答

6

有90%的概率,用戶遇到這個問題在其nVidia控制面板上的紋理質量切換在某些非默認值。在你的情況下,GL_NEAREST應該有助於避免這樣的問題(所以它不會平均鄰近紋理元素用於放大圖像)。但首先,請他將nVidia控制面板設置設置爲默認值,以證明或破壞理論。

+0

重要!特定的nVidia覆蓋似乎是「抗鋸齒 - 模式」,我測試了它並得到了類似的像素缺陷。案件解決了! – 2013-07-03 18:09:01