我要发帖 回复

新手上路

1

主题

15

积分

0

专家分

:

私信
发表时间 : 2009-3-7 17:05:13 | 浏览 : 1647    评论 : 1
void createPoints(osg::Group* root,const osg::Vec3& center ,vector<VERTEX> &nSegments ,osg::Vec4  &pColor )
{


                osg::Vec3Array* coords = new osg::Vec3Array;
                int iy;

                for ( size_t j=0 ; j< nSegments.size(); j++)
                {
                        coords->push_back(osg::Vec3(nSegments[j].x-center[0],(nSegments[j].y-center[1]),nSegments[j].z-center[2]));

                }

                //Just two colours - black and white.
                osg::Vec4Array* colors = new osg::Vec4Array;




                colors->push_back(pColor); // white

                colors->push_back(pColor) ; // black



                osg::UByteArray* coordIndices = new osg::UByteArray; // assumes we are using less than 256 points...
                osg::UByteArray* colorIndices = new osg::UByteArray;

                for(iy=0;iy< nSegments.size();iy++)
                {
                        // four vertices per quad.
                        coordIndices->push_back(iy);

                        colorIndices->push_back(0);
                }


                // set up a single normal
                osg::Vec3Array* normals = new osg::Vec3Array;
                normals->push_back(osg::Vec3(0.0f,0.0f,1.0f));

                osg::Geode* geode = new osg::Geode;

                osg::Geometry* geom = new osg::Geometry;
                geom->setVertexArray(coords);
                geom->setVertexIndices(coordIndices);

                geom->setColorArray(colors);
                geom->setColorIndices(colorIndices);
                geom->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE);

                geom->setNormalArray(normals);
                geom->setNormalBinding(osg::Geometry::BIND_OVERALL);

                geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POINTS,0,coordIndices->size()));

                //cout<<"coordIndices->size()" <<coordIndices->size()<<"  " << coordIndices->size() << endl;

                // Turn lighting off
                osg::StateSet* stateset = geom->getOrCreateStateSet();
                stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);

                // Set a point 5 pixels big
                osg::Point *point = new osg::Point();
                point->setSize(5.0);
                stateset->setAttribute(point);


                geode->addDrawable(geom);





                // Declare a state set for 'BLEND' texture mode
                osg::StateSet* blendStateSet = new osg::StateSet();


                blendStateSet->setMode(GL_BLEND,osg::StateAttribute::ON);       


                //geode->setStateSet(blendStateSet);

                root->addChild(geode);       
}
创建的点数,总是比实际的点数要少!不知道什么原因?请高手指点!

最近VR访客

FlySky 评论于2009-3-9 10:54:33
怎么可能????

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-24 05:54 PM

返回顶部