Odpowiedzi:
OpenGL ES 2.0 obsługuje Sprite'y punktowe; używam ich do cząstek. Po prostu użyj glDrawElements
z GL_POINTS
.
W module cieniującym wierzchołki ustawiasz rozmiar gl_PointSize
i używasz gl_PointCoord
w module cieniującym fragmentów do mapowania tekstur.
Mój moduł cieniujący wierzchołek:
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;
}
Mój shader fragmentów:
uniform sampler2D tex0;
varying vec4 vColor;
void main()
{
gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}
Jeśli korzystasz z Androida, możesz zajrzeć do mojego francuskiego samouczka . Istnieje pełny projekt z punktowymi duchami.
Zaskakujące jest to, że glLineWidth () również zwiększa punkty:
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 nie obsługuje bezpośrednio ikonek punktowych. Możesz albo teksturować swoje glPoints, albo ręcznie utworzyć quad skierowany w stronę kamery i dopasowany do kamery na środku punktu.
float
precyzji w modułach cieniujących fragmenty - nie mają one domyślnejfloat
precyzji, a w niektórych sterownikach moduły cieniujące mogą się nie skompilować.