|
楼主 |
发表于 2013-3-26 22:35:14
|
显示全部楼层
liuzhiyu123 发表于 2013-3-26 12:14
哦,那个文件是直接使用osgPhysics中的,应该没什么太大的难度吧?遍历到的matrixtrnasform 进行累计,然 ...
osg::TriangleIndexFunctor<CollectTriangleIndicesFunctor> functor;
functor.indices = _indices.get();
functor.base = numVertices;
drawable->accept( functor );这一步是什么原理呢?我猜到应该是给functor内部的索引传值,但是原理是什么,我搞不清楚,还有osg::TriangleIndexFunctor<CollectTriangleIndicesFunctor>也看不懂。CollectTriangleIndicesFunctor里面的那个函数是根据base的值来入栈索引吧。但是,那个函数是被谁调用的?
我实在搞不清楚这些原理,感觉和visitor相似,但是,却又有些不一样。
还有就是,假如我在创建geometry的时候没有设置索引,还能提取的索引么?
这个是我的建立geometry函数
osg::Geometry* CreatGeometry(
vaar_data::Component* component,
const osg::Vec4f color
) {
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry;
geometry->setVertexArray(component->GetRefPtrTriangles().get());得到三角面片的顶点数组
geometry->setNormalArray(component->GetRefPtrNormals().get());法线
geometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);包围盒
osg::ref_ptr<osg::Vec4Array> color_array = new osg::Vec4Array;颜色
color_array->push_back(color);
geometry->setColorArray(color_array.get());
geometry->setColorBinding(osg::Geometry::BIND_OVERALL);
//color_array->push_back(osg::Vec4(1.0, 0.0, 0.0, 1.0));
//color_array->push_back(osg::Vec4(0.0, 1.0, 0.0, 1.0));
//color_array->push_back(osg::Vec4(0.0, 0.0, 1.0, 1.0));
//geometry->setColorArray(color_array.get());
//geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
geometry->addPrimitiveSet(
new osg:rawArrays(osg:rimitiveSet::TRIANGLES, 0, component->GetRefPtrTriangles()->size())
);
osg::PrimitiveSet* gg=geometry->getPrimitiveSet(0);
我想在这里建立一个bullet的碰撞模型,这个怎么做好呢,请务必给我个方向。
//osg::DrawElements* ee=gg->getDrawElements();
return geometry.release();
} // CreatGeometry
|
|