Розмір спрайтів 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точності за замовчуванням, а на деяких драйверах такі шейдери можуть не вдатися зібрати.
keaukraine

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 у вершинній шейдері
Ellis,

@Ellis Добре він це сказав. Якщо ви подивитеся на посилання, розміщене в ньому, мова йде про застарілу частину GL ES 1 та про те, як "текстурувати свої glPoints"
bobobobo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.