Відповіді:
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, ви можете подивитися мій підручник з французької мови . Є повний проект з точковими спрайтами.
Дивно, але glLineWidth () також збільшує очки:
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 безпосередньо не підтримує точкові спрайти. Ви можете або текстурувати свої glPoints, або створити вручну камеру, орієнтовану на камеру, та орієнтовану на точку.
float
точність у фрагментах шейдерів - вони не маютьfloat
точності за замовчуванням, а на деяких драйверах такі шейдери можуть не вдатися зібрати.