OpenGL ES 2.0沒有ES 1.0所做的GL_POINT_SMOOTH定義。這意味着代碼我用畫圓不再起作用:使用GL_POINT_SMOOTH的OpenGL ES 2.0等同於ES 1.0圈?
glEnable(GL_POINT_SMOOTH);
glPointSize(radius*2);
glDrawArrays(GL_POINTS,0,nPoints);
是否有ES 2.0等效,或許還有在頂點着色器去,或者我必須使用多邊形每個圈?
OpenGL ES 2.0沒有ES 1.0所做的GL_POINT_SMOOTH定義。這意味着代碼我用畫圓不再起作用:使用GL_POINT_SMOOTH的OpenGL ES 2.0等同於ES 1.0圈?
glEnable(GL_POINT_SMOOTH);
glPointSize(radius*2);
glDrawArrays(GL_POINTS,0,nPoints);
是否有ES 2.0等效,或許還有在頂點着色器去,或者我必須使用多邊形每個圈?
您可以使用點精靈來模擬這個。只需啓用點精靈並獲得一個特殊變量gl_PointCoord
,您可以在片段着色器中讀取該變量。這給出了當前點平方中片段的座標。你可以用這些來讀取包含一個圓圈(像素不是圈有0顏色)的紋理,然後丟棄每一個片段,它的紋理值是0:
if(texture2d(circle, gl_PointCoord).r < 0.1)
discard;
編輯:或者你也可以做它沒有紋理,通過交易質地訪問延遲的計算複雜性和公正評估圓式:
if(length(gl_PointCoord-vec2(0.5)) > 0.5)
discard;
這可能是由丟棄的平方根(在length
功能使用)和比較反對的平方半徑進一步優化:
vec2 pt = gl_PointCoord - vec2(0.5);
if(pt.x*pt.x+pt.y*pt.y > 0.25)
discard;
但是也許內建的length
函數甚至比這更快,對長度計算進行了優化,並且可能直接在硬件中實現。
甜蜜,再次感謝基督徒:)這是現在最後一個問題! – KomodoDave
答案是 - 是的,你必須使用多邊形(如紋理四邊形)來獲得平滑點。
[OpenGL ES 2.0與iPhone:GL_POINT_SMOOTH繪製正方形與ES 2.0,但在ES 1.0中工作]的可能重複(http://stackoverflow.com/questions/7234379/opengl-es-2-0-with-iphone- gl-point-smooth-draws-squares-with-es-2-0-but-works-in) –
@Kornel該問題的答案涉及OpenGL ES 1.0,而不是ES 2.0。 – KomodoDave
還是不要問同樣的問題兩次。 –