Taille des sprites à points OpenGL ES 2.0

15

J'essaie de dessiner des sprites ponctuels dans OpenGL ES 2.0, mais tous mes points se retrouvent avec une taille de 1 pixel ... même lorsque j'ai défini gl_PointSize sur une valeur élevée dans mon vertex shader.

Comment agrandir mes sprites de point?

Jonathan
la source

Réponses:

24

OpenGL ES 2.0 prend en charge les sprites ponctuels; je les utilise pour les particules. Utilisez simplement glDrawElementsavec GL_POINTS.

Dans vertex shader, vous définissez la taille avec gl_PointSizeet utilisez gl_PointCoorddans 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.

Ellis
la source
N'oubliez pas de spécifier explicitement la floatprécision dans les shaders de fragments - ils n'ont pas de floatprécision par défaut et sur certains pilotes, ces shaders peuvent ne pas être compilés.
keaukraine
1

É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
Kamran Bigdely
la source
Vous êtes un héros. Bob bénisse.
netpoetica
0

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.

grahamp
la source
5
Faux. utiliser GL_POINTS et gl_PointSize dans vertex shader
Ellis
@Ellis Eh bien, il a en quelque sorte dit cela. Si vous regardez le lien affiché, il parle de la partie GL ES 1 qui a été dépréciée et comment "texturer vos glPoints"
bobobobo