glPointSizePointerOES 和 glScalef

Posted

技术标签:

【中文标题】glPointSizePointerOES 和 glScalef【英文标题】:glPointSizePointerOES and glScalef 【发布时间】:2010-08-25 08:58:58 【问题描述】:

我正在使用点精灵来显示几万个点,每个点都有不同的大小。它工作得很好,看起来很棒,而且速度很快。我正在使用带有坐标和大小的 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

【问题讨论】:

与问题无关,但glDisableClientState(GL_POINT_SPRITE_OES)看起来不对 谢谢。 (似乎什么也没做) @Bahbar +1,@hanno 请参阅khronos.org/opengles/documentation/opengles1_0/html/… 了解可能的值。 【参考方案1】:

是的,将 glPointParameter 与 GL_POINT_DISTANCE_ATTENUATION 参数一起使用。

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

不过,要做到正确是相当棘手的。

【讨论】:

嘿,真好!顺便说一句,您从哪里获得这些数据? 谢谢 ;-)。我想出了一个针对银河系恒星的启发式算法,它可以动态地为给定数量的点创建数据(臂、凸起、光谱类型的分布等)。那是因为我们对 Mily way 的全局结构还没有一个很好的了解。但所有主要特征都应该是现实的。太阳系外行星的数据是真实的。有几个提供数据的网站,例如我自己的一个:exoplanet.hanno-rein.de。

以上是关于glPointSizePointerOES 和 glScalef的主要内容,如果未能解决你的问题,请参考以下文章

gcc与g++:联系区别和命令

G.1X 和 G.2X 的 AWS Glue 工作线程定价详细信息

vim g 和 % 区别

需要帮助 w/ 恼人的 Makefile 错误 -- g++: g++ 和 shell 错误 -- 和 Multi-Makefile 设计建议

2.4g和5g的wifi区别

<g:applyLayout /> 和 <g:render template /> 有啥区别