Hello,

I'm working on a project in which we need to output 3D objects  
constructed by the code. We generate vertices and then triangles. When  
the normal binding is per_primitive, every thing works fine. When it  
is per_vertex, either the osgProducer::Viewer crashes or the result is  
incorrect (badly shaded triangles). Here is the code:

        if(geo->getNormalBinding() == osg::Geometry::BIND_PER_PRIMITIVE)
        {
                for(unsigned int i=0; i<maxFaceId; i++)
                {
                        unsigned int A = GetFaceVertex(i, 0);
                        unsigned int B = GetFaceVertex(i, 1);
                        unsigned int C = GetFaceVertex(i, 2);

                        osg::Vec3f BA = vertices->at(A) - vertices->at(B);
                        osg::Vec3f CB = vertices->at(B) - vertices->at(C);
                        osg::Vec3f N = BA ^ CB;
                        N.normalize();
                        normals->push_back(N);
                }
        }

        else if(geo->getNormalBinding() == osg::Geometry::BIND_PER_VERTEX)
        {

                for(unsigned int i=0; i<vertices->getNumElements(); i++)
                        normals->push_back(osg::Vec3f(0.0, 0.0, 0.0));

                for(unsigned int i=0; i<maxFaceId; i++)
                {
                        unsigned int A = GetFaceVertex(i, 0);
                        unsigned int B = GetFaceVertex(i, 1);
                        unsigned int C = GetFaceVertex(i, 2);

                        osg::Vec3f BA = vertices->at(A) - vertices->at(B);
                        osg::Vec3f CB = vertices->at(B) - vertices->at(C);
                        osg::Vec3f N = BA ^ CB;
                        (*normals)[A] += N;
                        (*normals)[B] += N;
                        (*normals)[C] += N;
                }

                for(unsigned int i=0; i<normals->getNumElements(); i++)
                        normals->at(i).normalize();
        }

thanks

----------------------------------------------------------------

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to