[osg-users] Setting vertex attribute array of float

Bruno Oliveira bruno.manata.oliveira at gmail.com
Mon Mar 20 02:52:06 PDT 2017


I have a point cloud and I need to pass some float attribute. I need one
flag per vertex, so I am using vertex attribute array.

Here's how I do it:

*osg::Geometry* geom = (...);osg::ref_ptr<osg::FloatArray> vvv(new

*for (int i = 0; i < nPoints; i++) vvv->push_back(0.);*

*geom->setVertexAttribArray(20, vvv);geom->setVertexAttribBinding(20,

Then I create a osg::Program and bind the attribute as follows:

*m_program->addBindAttribLocation("classif", 20); *

And here's my vertex shader that paints the vertices as *white* if the
attribute "classif" is > 0.1 and *red* otherwise:

*            // Vertex Shader            "varying   vec4 vcolor;\n"
    "attribute float classif;\n"            "\n"            "void
main()\n"            "{\n"            "  vcolor      = ((classif > 0.1) ?
vec4(1., 1., 1., 1.) : vec4(1., 0., 0. ,1.));\n"            "  gl_Position
= ftransform();\n"            "}\n",            // Fragment Shader
    "varying vec4 vcolor;\n"            "void main() {\n"            "
gl_FragColor = vcolor;\n"            "}"*

Now, what happens is that, despite I set all attributes to 0., all the
points appear as white (i.e. the shader is interpreting the attribute as >
0.1). And no matter what values I put on the attributes, the vertices are
always rendered as white.

Any hints on why this is happening?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20170320/5040d490/attachment-0001.htm>

More information about the osg-users mailing list