我正在制作一个使用点精灵的小型OpenGL Mac应用程序。我正在使用顶点数组来绘制它们,我想使用类似的“数组”函数来为它们提供所有不同的大小。
在OpenGL ES中,有一个名为GL_POINT_SIZE_ARRAY_OES的客户端状态,以及相应的函数glPointSizePointerOES(),它完全符合我的要求,但我似乎无法在标准OpenGL中找到它。
OpenGL是否以任何方式支持这一点?
答案 0 :(得分:2)
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
答案 1 :(得分:2)
为了扩展Fen的答案,固定功能OpenGL管道无法完全按照您的要求进行操作。它可以做“透视”点,随着Z距离的增加而变小,但就是这样。
对于每个顶点的任意点大小,您需要一个自定义顶点着色器来设置每个顶点的大小。将点大小作为属性数组(重复使用曲面法线或tex坐标,或使用您自己的属性索引)或在纹理贴图中传递,例如宽度等于点阵列大小的1D纹理。 Fen引用的着色器代码示例使用纹理贴图技术。
答案 2 :(得分:1)
如果通过“OpenGL支持这个”,你的意思是“我可以在OpenGL中做那样的事情”,绝对是。
使用着色器。传递表示点大小的1维通用顶点属性。在顶点着色器中,将该点大小设置为顶点着色器的gl_PointSize
输出。这真的很简单。
如果你的意思是“固定功能OpenGL支持这个,”没有。