glPointSizePointerOES и glScalef - PullRequest
       4

glPointSizePointerOES и glScalef

3 голосов
/ 25 августа 2010

Я использую точечные спрайты для отображения нескольких десятков тысяч точек, каждый из которых имеет свой размер.Он хорошо работает, отлично выглядит и довольно быстро.Я использую VBO с координатами и размерами в нем (4 поплавка на точку).

Вот мой код дисплея

glEnable(GL_POINT_SPRITE_OES);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, pointTexture);
glTexEnvi( GL_POINT_SPRITE_OES, GL_COORD_REPLACE_OES, GL_TRUE );
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, pointVertices);
glVertexPointer(3, GL_FLOAT, 4*sizeof(float), 0);
glEnableClientState(GL_POINT_SIZE_ARRAY_OES);
glPointSizePointerOES(GL_FLOAT,4*sizeof(float),(GLvoid*) (sizeof(GL_FLOAT)*3));
glDrawArrays(GL_POINTS, 0, pointNum);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableClientState(GL_POINT_SIZE_ARRAY_OES);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);
glDisable(GL_POINT_SPRITE_OES);

Теперь я также хотел бы иметь возможность увеличения, т.е. использовать glScalef.Можно ли соответственно изменить размер точек без обновления VBO?glPointSize не имеет никакого эффекта, так как я использую GL_POINT_SIZE_ARRAY_OES.

1 Ответ

4 голосов
/ 25 августа 2010

Да, используйте glPointParameter с параметром GL_POINT_DISTANCE_ATTENUATION.

http://www.khronos.org/opengles/sdk/1.1/docs/man/glPointParameter.xml

Впрочем, сложно понять, как правильно.

...