繁体   English   中英

如何在OpenGL中绘制不同大小的点精灵?

[英]How to draw point sprites of different sizes in OpenGL?

我正在制作一个使用点精灵的小型OpenGL Mac应用程序。 我正在使用顶点数组绘制它们,并且我想使用类似的“数组”函数为它们提供所有不同的大小。

在OpenGL ES中,有一个名为GL_POINT_SIZE_ARRAY_OES的客户端状态,以及一个对应的函数glPointSizePointerOES()可以完全满足我的要求,但是我似乎找不到标准OpenGL中的等效项。

OpenGL是否以任何方式支持此功能?

OpenGL不支持此Apple扩展,但是您可以通过其他方式进行操作:

对于固定管道:(OpenGL 1.4及更高版本)

您需要设置点参数:

float attenuation[3] = {0.0f, 1.0f, 0.0f};    
glPointParameterfvEXT(GL_POINT_DISTANCE_ATTENUATION, attenuation);

glPointParameterfEXT(GL_POINT_SIZE_MIN, 1.0f);
glPointParameterfEXT(GL_POINT_SIZE_MAX, 128.0f);

glEnable(GL_POINT_SPRITE);

OpenGL将以这种方式为您计算点大小

着色器

以下是使用着色器进行渲染的一些信息: http : //en.wikibooks.org/wiki/OpenGL_Programming/Scientific_OpenGL_Tutorial_01

为了扩展芬的答案,固定功能的OpenGL管道无法完全满足您的要求。 它可以做随着Z距离增加而变小的“透视”点,仅此而已。

对于每个顶点上的任意点大小,您需要一个自定义顶点着色器以设置每个顶点的大小。 将点大小作为属性数组(重复使用曲面法线或tex坐标,或使用自己的属性索引)或在纹理贴图中传递,例如将一维纹理的宽度等于点数组的大小。 Fen引用的着色器代码示例使用纹理贴图技术。

如果通过“ OpenGL是否支持此功能”,则表示“绝对可以在OpenGL中执行类似的操作”。

使用着色器。 传递一个表示您的点大小的一维通用顶点属性。 然后在您的顶点着色器中,将该点大小设置为顶点着色器的gl_PointSize输出。 这真的很简单。

如果您的意思是“固定功能OpenGL是否支持此功能”,否。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM