Réponses:
OpenGL ES 2.0 prend en charge les sprites ponctuels; je les utilise pour les particules. Utilisez simplement glDrawElements
avec GL_POINTS
.
Dans vertex shader, vous définissez la taille avec gl_PointSize
et utilisez gl_PointCoord
dans fragment shader pour le mappage de texture.
Mon 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;
}
Mon fragment shader:
uniform sampler2D tex0;
varying vec4 vColor;
void main()
{
gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}
Si vous êtes sur Android, vous pouvez consulter mon tutoriel français . Il existe un projet complet avec des sprites ponctuels.
Étonnamment, glLineWidth () agrandit également les points:
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 ne prend pas directement en charge les sprites ponctuels. Vous pouvez soit texturer vos glPoints, soit créer manuellement un quad face à la caméra et aligné à la caméra centré sur un point.
float
précision dans les shaders de fragments - ils n'ont pas defloat
précision par défaut et sur certains pilotes, ces shaders peuvent ne pas être compilés.