2013-07-14 81 views
0

我想通過在OpenGLES 2.0模擬器(在PC上)繪製帶有分辨率尺寸的框架並查看繪製的框架來檢查我的分辨率。 我line_strip這些座標繪製:在OpenGLES 2.0中繪製一個分辨率尺寸的框架

-1.0f, 1.0f, 0.0f, 
-1.0f, -1.0f, 0.0f, 
1.0f, -1.0f, 0.0f, 
1.0f, 1.0f, 0.0f, 
-1.0f, 1.0f, 0.0f, 

通過此功能:

glDrawArrays (GL_LINE_STRIP, 0, 5); 

,我只看到右側和上側,並沒有看到左側和下側。看起來他們不在屏幕上(如果我不是從-1.0f開始畫這些邊,而是稍微高一些,如-1.0f + 1/screen_width,那麼我可以看到所有邊)。 你能解釋我嗎,爲什麼我沒有看到所有的雙方?

回答

0

原因是四捨五入的價值。呈現屏幕邊框的值不會呈現特定像素,而是呈現像素之間的值。對於您的具體情況,似乎您已經使用「正交」方法在區間[-1,1]上定義邊界。假設您的視圖僅包含4個像素爲2x2:在這種情況下,您仍然在間隔[-1,1]上定義了邊框,但實際像素位置爲(-.5, -.5), (-.5, .5), (.5, -.5), (.5, .5)。現在,繪製代表邊框的線條時,您只需填充3個像素(2行)即可。它們中的哪一個將被填充取決於將.5浮點值四捨五入爲整數值:如果.5四捨五入爲1,則可以預計左上角部分被填充,在其他情況下,可以填充底部和右側(注意術語「左,右,向上,向下「取決於內部緩衝區結構,而不是顯示屏上顯示的內容)。

因此,以填補行了正確的像素,你需要像這樣(只左邊部分):

-1 + (2/bufferWidth)*.5 

進行分解:-1是邊界值; 2是在「ortho」(右 - 左)中定義的間隔寬度; bufferWidth表示像素的數量; (2/bufferWidth)是像素寬度; .5來獲取像素的中心。

要解決這個問題在你的情況下,只需將線寬設置爲1.5就足夠了。

+0

不幸的是,唯一支持的線寬是1.0,但現在我明白了這個問題,並且計算會幫助我,非常感謝! – user893269

+0

你知道,即使你需要它進行一次平局調用,你也可以隨時在管道中更改「正射影像」。只需將其設置爲(0,寬度,0,高度),在特定像素處繪製線條,然後交換回[-1,1]。 –