Respuestas:
OpenGL ES 2.0 es compatible con Point Sprites; Los uso para partículas. Solo use glDrawElements
con GL_POINTS
.
En el sombreador de vértices, establece el tamaño gl_PointSize
y utiliza el gl_PointCoord
sombreador de fragmentos para el mapeado de texturas.
Mi sombreador de vértices:
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;
}
Mi sombreador de fragmentos:
uniform sampler2D tex0;
varying vec4 vColor;
void main()
{
gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}
Si estás en Android, puedes mirar mi tutorial en francés . Hay un proyecto completo con sprites puntuales.
Sorprendentemente, glLineWidth () también aumenta los puntos:
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 no admite directamente sprites de punto. Puede texturizar sus glPoints o crear manualmente un quad orientado hacia la cámara y alineado con la cámara centrado en un punto.
float
precisión en sombreadores de fragmentos: no tienenfloat
precisión predeterminada y en algunos controladores, tales sombreadores pueden fallar al compilar.