OpenGL ES 2.0 с iPhone: GL_POINT_SMOOTH рисует квадраты с ES 2.0, но работает в ES 1.0 - PullRequest
3 голосов
/ 29 августа 2011

Я пытаюсь рисовать круги, используя объект буфера вершин для рисования точек с включенным GL_POINT_SMOOTH в OpenGL ES 2.0 на iPhone.

Я использовал следующий код рендеринга ES 1.0 для успешного рисования кругов наiPhone 4:

glVertexPointer(2, GL_FLOAT, 0, circleVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_POINT_SMOOTH);
glPointSize(radius*2);
glDrawArrays(GL_POINTS, 0, 1);

Сейчас я пытаюсь добиться того же эффекта с помощью установочного VBO, за которым следует код рендеринга ES 2.0:

glEnable(GL_BLEND); 
glEnable(GL_POINT_SPRITE_OES);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glDrawElements(GL_POINTS, numPoints, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0));

Однако выходные вершиныочень четко квадратный, а не круговой.

Я попытался уменьшить 'glEnable' и связанные вызовы в вышеупомянутом, чтобы эмулировать первую, рабочую версию, но никаких видимых изменений в выводе не происходит;формы все еще квадратные.Я также попытался заменить вызов 'glDrawElements' на:

    glDrawArrays(GL_POINTS,0,numPoints);

.. но опять-таки без изменений.

Размер точки установлен в вершинном шейдере и шейдер успешно скомпилирован и запущен:

uniform mediump mat4 projMx;

attribute vec2 a_position;      
attribute vec4 a_color;     
attribute float a_radius;       
varying vec4 v_color;
void main()
{
    vec4 position = vec4(a_position.x,a_position.y,1.0,1.0);
    gl_Position = projMx * position;
    gl_PointSize = a_radius*2.0;
    v_color = a_color;
}

Кто-нибудь знает, почему круги не рисуются с версией glDrawElements VBO?

1 Ответ

1 голос
/ 12 сентября 2011

Так как вы включили GL_POINT_SPRITE_OES, он используется для рисования прямоугольников с точками, что полезно для рекламных щитов (это проще и быстрее, чем использование 4 вершин для рисования прямоугольника).

Попробуйте удалить glEnable (GL_POINT_SPRITE_OES); и это должно работать.

...