Я пытаюсь рисовать точечные спрайты в OpenGL ES 2.0, но все мои точки заканчиваются размером 1 пиксель ... даже когда я устанавливаю для gl_PointSize высокое значение в моем вершинном шейдере.
Как я могу увеличить свои точечные спрайты?
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
точности по умолчанию, и в некоторых драйверах такие шейдеры могут не скомпилироваться.Удивительно, но glLineWidth () также увеличивает размеры точек:
источник
OpenGLES 2.0 напрямую не поддерживает точечные спрайты. Вы можете либо текстурировать свои glPoints, либо вручную создать ориентированный на камеру и выровненный по камере квад по центру точки.
источник