Risposte:
OpenGL ES 2.0 supporta Point Sprites; li uso per le particelle. Basta usare glDrawElements
con GL_POINTS
.
Nel vertex shader, si imposta la dimensione con gl_PointSize
e si usa gl_PointCoord
nel framment shader per la mappatura delle trame.
Il mio vertex shader:
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;
}
Il mio framment shader:
uniform sampler2D tex0;
varying vec4 vColor;
void main()
{
gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}
Se sei su Android, puoi guardare il mio tutorial francese . C'è un progetto completo con sprite di punti.
Sorprendentemente, glLineWidth () aumenta anche i punti:
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 non supporta direttamente gli sprite dei punti. Puoi strutturare i tuoi glPoint o creare manualmente un quadrante rivolto verso la fotocamera e allineato su un punto centrato su un punto.
float
precisione negli shader di frammenti: non hanno unafloat
precisione predefinita e su alcuni driver tali shader potrebbero non essere compilati.