Próbuję rysować sprite'y punktowe w OpenGL ES 2.0, ale wszystkie moje punkty kończą się rozmiarem 1 piksela ... nawet kiedy ustawię gl_PointSize na wysoką wartość w moim module cieniującym wierzchołki.
Jak mogę powiększyć moje sprity punktowe?
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.
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ć.Zaskakujące jest to, że glLineWidth () również zwiększa punkty:
źródło
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.
źródło