Respostas:
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.
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
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.
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.