2011-08-29 107 views
3

我想通過使用頂點緩衝區對象繪製圓以在iPhone上的OpenGL ES 2.0中啓用GL_POINT_SMOOTH。使用iPhone的OpenGL ES 2.0:GL_POINT_SMOOTH使用ES 2.0繪製正方形,但在ES 1.0中工作

我用以下ES 1.0渲染代碼畫圓成功在iPhone 4:

glVertexPointer(2, GL_FLOAT, 0, circleVertices); 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnable(GL_POINT_SMOOTH); 
glPointSize(radius*2); 
glDrawArrays(GL_POINTS, 0, 1); 

我現在嘗試使用一個建立VBO隨後該ES 2.0,以達到同樣的效果渲染代碼:

glEnable(GL_BLEND); 
glEnable(GL_POINT_SPRITE_OES); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glEnable(GL_POINT_SMOOTH); 
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); 
glDrawElements(GL_POINTS, numPoints, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0)); 

但是,輸出頂點非常清晰,不是圓形。

我試着減少'glEnable'和上面的相關調用來模擬第一個工作版本,但輸出中沒有可見的變化;形狀仍然是方形的。我也嘗試用以下代碼替換'glDrawElements':

glDrawArrays(GL_POINTS,0,numPoints); 

..但再次沒有變化。

點大小設置在頂點着色器,並且着色器成功編譯和運行:

uniform mediump mat4 projMx; 

attribute vec2 a_position;  
attribute vec4 a_color;  
attribute float a_radius;  
varying vec4 v_color; 
void main() 
{ 
    vec4 position = vec4(a_position.x,a_position.y,1.0,1.0); 
    gl_Position = projMx * position; 
    gl_PointSize = a_radius*2.0; 
    v_color = a_color; 
} 

有誰知道爲什麼圓不與glDrawElements VBO版本繪製?

+0

嘿是的,我解決了其他問題,並在其他線程迴應;)謝謝! – KomodoDave

+0

只是爲了澄清他人:這個線程中的問題沒有解決! – KomodoDave

回答

1

這就是因爲您啓用了GL_POINT_SPRITE_OES,它用於繪製帶有點的矩形,這對於廣告牌很有用(它比使用4個頂點繪製矩形更簡單快捷)。

嘗試刪除glEnable(GL_POINT_SPRITE_OES);它應該工作。