Antworten:
OpenGL ES 2.0 unterstützt Point Sprites. Ich benutze sie für Partikel. Verwenden Sie einfach glDrawElements
mit GL_POINTS
.
Im Vertex-Shader legen Sie die Größe mit fest gl_PointSize
und verwenden sie gl_PointCoord
im Fragment-Shader für das Textur-Mapping.
Mein 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;
}
Mein Fragment Shader:
uniform sampler2D tex0;
varying vec4 vColor;
void main()
{
gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}
Wenn Sie auf Android sind, können Sie mein französisches Tutorial ansehen . Es gibt ein vollständiges Projekt mit Punkt-Sprites.
Überraschenderweise vergrößert glLineWidth () auch die Punkte:
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 unterstützt Punkt-Sprites nicht direkt. Sie können Ihre glPoints entweder texturieren oder manuell ein Quad mit Kameraausrichtung und Kameraausrichtung erstellen, das auf einem Punkt zentriert ist.
float
Präzision in Fragment-Shadern explizit anzugeben - sie haben keine Standardgenauigkeit,float
und bei einigen Treibern können solche Shader möglicherweise nicht kompiliert werden.