OpenGL ES 2.0 Point Sprites Size

15

Estou tentando desenhar sprites de ponto no OpenGL ES 2.0, mas todos os meus pontos acabam com um tamanho de 1 pixel ... mesmo quando defino gl_PointSize com um valor alto no meu shader de vértice.

Como posso aumentar meu sprite de ponto?

Jonathan
fonte

Respostas:

24

O OpenGL ES 2.0 suporta Point Sprites; eu os uso para partículas. Basta usar glDrawElementscomGL_POINTS .

No shader de vértice, você define o tamanho com gl_PointSizee usa gl_PointCoordno shader de fragmento para o mapeamento de textura.

Meu 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;  
}

Meu fragmento shader:

uniform sampler2D tex0;
varying vec4 vColor;

void main() 
{
   gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}

Se você está no Android, pode ver meu tutorial em francês . Existe um projeto completo com sprites pontuais.

Ellis
fonte
Não se esqueça de especificar explicitamente a floatprecisão nos shaders de fragmento - eles não têm floatprecisão padrão e, em alguns drivers, esses shaders podem falhar na compilação.
Keaukraine
1

Surpreendentemente, glLineWidth () também aumenta os pontos:

    GLES20.glLineWidth(8); // Make the edges (and points!) thicker
    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes
Kamran Bigdely
fonte
Você é um herói. Bob abençoe.
Netpoetica 25/10/19
0

O OpenGLES 2.0 não suporta diretamente sprites de pontos. Você pode texturizar seus glPoints ou criar manualmente um quad voltado para a câmera e alinhado à câmera, centralizado em um ponto.

Grahamp
fonte
5
Falso. uso GL_POINTS e gl_PointSize no shader de vértice
Ellis
@ Ellis Bem, ele meio que disse isso. Se você olhar para o link postado ele fala sobre a parte GL ES 1, que foi preterido, e como "textura suas glPoints"
bobobobo