Answers:
OpenGL ES 2.0支持Point Sprites;我将它们用于颗粒。只需glDrawElements
与一起使用GL_POINTS
。
在顶点着色器中,可以使用设置大小gl_PointSize
并gl_PointCoord
在片段着色器中使用它来进行纹理映射。
我的顶点着色器:
uniform mat4 uMvp;
uniform float uThickness;
attribute vec3 aPosition;
attribute vec2 aTexCoord;
attribute vec4 aColor;
varying vec4 vColor;
void main() {
vec4 position = uMvp * vec4(aPosition.xyz, 1.);
vColor = aColor;
gl_PointSize = uThickness;
gl_Position = position;
}
我的片段着色器:
uniform sampler2D tex0;
varying vec4 vColor;
void main()
{
gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}
如果您使用的是Android,则可以查看我的法语教程。有一个包含点精灵的完整项目。
令人惊讶的是,glLineWidth()也使点变大:
GLES20.glLineWidth(8); // Make the edges (and points!) thicker
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes
OpenGLES 2.0不直接支持点精灵。您可以纹理化glPoints或手动创建以点为中心的面向照相机并对准照相机的四边形。
float
在片段着色器中明确指定精度-它们没有默认float
精度,并且在某些驱动程序上,此类着色器可能无法编译。