我使用点精灵来显示几万个点,每个点都有不同的大小。它效果很好,看起来很棒而且非常快。我正在使用一个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
。
答案 0 :(得分:4)
是的,请将glPointParameter与GL_POINT_DISTANCE_ATTENUATION参数一起使用。
http://www.khronos.org/opengles/sdk/1.1/docs/man/glPointParameter.xml
尽管如此,这是非常棘手的。