2011-08-29 80 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);它应该工作。