OpenGL ES 2.0与iPhone:GL_POINT_SMOOTH在ES 2.0中绘制正方形,但在ES 1.0中有效。

3

我正在尝试使用顶点缓冲对象在OpenGL ES 2.0上启用GL_POINT_SMOOTH绘制点来绘制圆。

我曾经使用下面的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版本时无法绘制圆吗?

嘿,是的,我解决了另一个问题并在另一个线程中回复了;) 谢谢! - KomodoDave
只是为了向其他人澄清一下:这个帖子中的问题还没有解决! - KomodoDave
1个回答

1

这是因为您启用了GL_POINT_SPRITE_OES,它用于使用点绘制矩形,这对于广告牌非常有用(它比使用4个顶点绘制矩形更简单和更快)。

尝试删除glEnable(GL_POINT_SPRITE_OES);,然后它应该可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接