Rozmiar Sprite'ów punktowych OpenGL ES 2.0

15

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?

Jonathan
źródło

Odpowiedzi:

24

OpenGL ES 2.0 obsługuje Sprite'y punktowe; używam ich do cząstek. Po prostu użyj glDrawElementsz GL_POINTS.

W module cieniującym wierzchołki ustawiasz rozmiar gl_PointSizei używasz gl_PointCoordw 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.

Ellis
źródło
Nie zapomnij wyraźnie określić floatprecyzji w modułach cieniujących fragmenty - nie mają one domyślnej floatprecyzji, a w niektórych sterownikach moduły cieniujące mogą się nie skompilować.
keaukraine
1

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
Kamran Bigdely
źródło
Jesteś bohaterem. Bob błogosławi.
netpoetica
0

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.

grahamp
źródło
5
Fałszywy. użyj GL_POINTS i gl_PointSize w shaderze wierzchołków
Ellis,
@Ellis Cóż, on tak powiedział. Jeśli spojrzysz na opublikowany link, mówi on o części GL ES 1, która była przestarzała, oraz o tym, jak „nadać tekstury glPoints”
bobobobo