Kom*_*ave 6 geometry opengl-es-2.0
OpenGL ES 2.0没有ES 1.0所做的GL_POINT_SMOOTH定义.这意味着我用来绘制圆圈的代码不再有效:
glEnable(GL_POINT_SMOOTH);
glPointSize(radius*2);
glDrawArrays(GL_POINTS,0,nPoints);
Run Code Online (Sandbox Code Playgroud)
在ES 2.0中是否存在等价物,也许在顶点着色器中有所改变,或者我必须为每个圆使用多边形?
您可以使用点精灵来模拟它.只需启用点精灵,您就可以获得一个gl_PointCoord
可以在片段着色器中读取的特殊变量.这将为您提供当前点的平方中片段的坐标.您可以使用它们来读取包含圆形的纹理(不在圆圈中的像素的颜色为0)然后丢弃其纹理值为0的每个片段:
if(texture2d(circle, gl_PointCoord).r < 0.1)
discard;
Run Code Online (Sandbox Code Playgroud)
编辑:或者你可以没有纹理,通过交换纹理访问延迟计算复杂性,只是评估圆方程:
if(length(gl_PointCoord-vec2(0.5)) > 0.5)
discard;
Run Code Online (Sandbox Code Playgroud)
这可以通过删除平方根(在length
函数中使用)并与平方半径进行比较来进一步优化:
vec2 pt = gl_PointCoord - vec2(0.5);
if(pt.x*pt.x+pt.y*pt.y > 0.25)
discard;
Run Code Online (Sandbox Code Playgroud)
但也许内置length
函数比这更快,针对长度计算进行了优化,可能直接在硬件中实现.