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?
O OpenGL ES 2.0 suporta Point Sprites; eu os uso para partículas. Basta usar glDrawElements
comGL_POINTS
.
No shader de vértice, você define o tamanho com gl_PointSize
e usa gl_PointCoord
no 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.
float
precisão nos shaders de fragmento - eles não têmfloat
precisão padrão e, em alguns drivers, esses shaders podem falhar na compilação.Surpreendentemente, glLineWidth () também aumenta os pontos:
fonte
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.
fonte