<div dir="ltr"><div><div>Hello,<br><br><br></div>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.<br><br>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).<br><br><br></div>Now I know this can be done with Shaders. I can draw the circle directly in the fragment shader with this example (<a href="http://www.geeks3d.com/20130705/shader-library-circle-disc-fake-sphere-in-glsl-opengl-glslhacker/">http://www.geeks3d.com/20130705/shader-library-circle-disc-fake-sphere-in-glsl-opengl-glslhacker/</a>). <br><br>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?<br><div><br>Here is teh code for drawing the circle, I use this for each vertex:<br><br>osg::Vec3Array* getArray(const float radius, const int points, const osg::Vec3& center) {<br>    auto array = new osg::Vec3Array();<br>    const float ratio = (float(2.0*osg::PI) / float(points));<br>    for (int i = 0; i < points; i++) {<br>        const float angle = float(i) * ratio;<br>        array->push_back(osg::Vec3(<br>                    center.x() + radius*cosf( angle ),<br>                    center.y() + radius*sinf( angle ),<br>                    center.z())<br>                );<br>    }<br>    return array;<br>}<br><br>osg::Geometry* getGeometry(const float radius, const int points, const osg::Vec3& center) {   <br>    osg::Geometry* geom = new osg::Geometry();<br><br>    geom->setVertexArray(getArray(radius, points, center));<br>    geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POLYGON, 0, points));<br><br>    return geom;<br>}<br><br></div></div>