Размер спрайтов OpenGL ES 2.0


15

Я пытаюсь рисовать точечные спрайты в OpenGL ES 2.0, но все мои точки заканчиваются размером 1 пиксель ... даже когда я устанавливаю для gl_PointSize высокое значение в моем вершинном шейдере.

Как я могу увеличить свои точечные спрайты?

Ответы:


24

OpenGL ES 2.0 поддерживает точечные спрайты; Я использую их для частиц. Просто используйте glDrawElementsс GL_POINTS.

В вершинном шейдере вы устанавливаете размер с gl_PointSizeпомощью gl_PointCoordфрагментного шейдера и используете его для наложения текстуры.

Мой вершинный шейдер:

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;  
}

Мой фрагмент шейдера:

uniform sampler2D tex0;
varying vec4 vColor;

void main() 
{
   gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}

Если вы на Android, вы можете посмотреть мой французский учебник . Есть полный проект с точечными спрайтами.


Не забудьте явно указать floatточность в фрагментных шейдерах - они не имеют floatточности по умолчанию, и в некоторых драйверах такие шейдеры могут не скомпилироваться.
кеукраина

1

Удивительно, но glLineWidth () также увеличивает размеры точек:

    GLES20.glLineWidth(8); // Make the edges (and points!) thicker
    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes

Вы герой. Боб благослови.
netpoetica

0

OpenGLES 2.0 напрямую не поддерживает точечные спрайты. Вы можете либо текстурировать свои glPoints, либо вручную создать ориентированный на камеру и выровненный по камере квад по центру точки.


5
Ложь. использовать GL_POINTS и gl_PointSize в вершинном шейдере
Эллис

@ Эллис Ну, он вроде как сказал это. Если вы посмотрите на опубликованную ссылку, в ней рассказывается о части GL ES 1, которая устарела, и о том, как «текстурировать ваши glPoints»
bobobobo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.