简体   繁体   中英

How to draw point sprites of different sizes in OpenGL?

I'm making a small OpenGL Mac app that uses point sprites. I'm using a vertex array to draw them, and I want to use a similar "array" function to give them all different sizes.

In OpenGL ES, there is a client state called GL_POINT_SIZE_ARRAY_OES, and a corresponding function glPointSizePointerOES() which do exactly what I want, but I can't seem to find an equivalent in standard OpenGL.

Does OpenGL support this in any way?

OpenGL does not support this Apple extension, but you can do it other other way:

For fixed pipeline: (opengl 1.4 and above)

You need to setup point parameters:

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 will calculate point size for you that way

Shaders

Here is some info for rendering using shaders: http://en.wikibooks.org/wiki/OpenGL_Programming/Scientific_OpenGL_Tutorial_01

To expand a little on Fen's answer, the fixed function OpenGL pipeline can't do exactly what you want. It can do 'perspective' points which get smaller as the Z distance increases, but that's all.

For arbitrary point size at each vertex you need a custom vertex shader to set the size for each. Pass the point sizes either as an attribute array (re-use surface normals or tex coords, or use your own attribute index) or in a texture map, say a 1D texture with width equal to size of points array. The shader code example referred to by Fen uses the texture map technique.

If by "Does OpenGL support this", you mean "Can I do something like that in OpenGL", absolutely.

Use shaders. Pass a 1-dimensional generic vertex attribute that represents your point size. And in your vertex shader, set that point size as the gl_PointSize output from the vertex shader. It's really quite simple.

If you meant, "Does fixed-function OpenGL support this," no.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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