[osg-users] Draw vertex as Circle with color given by some Vec4 array
Bruno Oliveira
bruno.manata.oliveira at gmail.com
Mon Jan 2 11:21:14 PST 2017
Hello,
I have an array of 3d points that I want to render in a scene. I want to
render them as circles, centered on each point coordinates, with a given
radius and a color that is given by a color array I have in memory.
For now, I am creating a node for each point, that consists of a
PrimitiveSet (polygon) that I iterate around the point center. (Check code
below).
Now I know this can be done with Shaders. I can draw the circle directly in
the fragment shader with this example (
http://www.geeks3d.com/20130705/shader-library-circle-disc-fake-sphere-in-glsl-opengl-glslhacker/).
But I need to pass the vertex centers and respective colors. Is it possible
to pass a osg::Vec3Array* with vertex centers and a osg::Vec4Array* of
colors directly to a Shader, so that I can , in a single compiled Shader
program, handle all point positions and colors?
Here is teh code for drawing the circle, I use this for each vertex:
osg::Vec3Array* getArray(const float radius, const int points, const
osg::Vec3& center) {
auto array = new osg::Vec3Array();
const float ratio = (float(2.0*osg::PI) / float(points));
for (int i = 0; i < points; i++) {
const float angle = float(i) * ratio;
array->push_back(osg::Vec3(
center.x() + radius*cosf( angle ),
center.y() + radius*sinf( angle ),
center.z())
);
}
return array;
}
osg::Geometry* getGeometry(const float radius, const int points, const
osg::Vec3& center) {
osg::Geometry* geom = new osg::Geometry();
geom->setVertexArray(getArray(radius, points, center));
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POLYGON,
0, points));
return geom;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20170102/d3f3b14c/attachment-0002.htm>
More information about the osg-users
mailing list