|
我读取的一个osgb模型正面光照背面亮,背面光照正面亮,应该是法线反了。
写了一个函数用Smooth重设法线,但运行出错。
代码如下:
bool SceneObj::SmoothGeoNode(osg::ref_ptr<osg::Node> geoNode)
{
osg::ref_ptr<osg::Geode> geod = dynamic_cast<osg::Geode*>(geoNode.get());
if (!geod.get())
{
MessageBox(0, "no geode", "notting", 1);//**该对话框弹出,Node转换为Geode失败!!!
return false;
}
osg::Geode:rawableList dl = geod->getDrawableList();
std::vector<osg::ref_ptr<osg::Drawable>>::iterator itr = dl.begin();
for (; itr != dl.end(); itr++)
{
osgUtil::SmoothingVisitor::smooth(*itr->get()->asGeometry());
}
return true;
}
Tips1:我尝试了使用 geoNode.asGeode(),返回空值;
Tips2:我尝试了使用osg::Geode* geoNode,还是返回空值;
Tips3:有没有其他实现方法?比如:将SmoothingVisitor用在Node的 NodeVisitor 里面?怎样写? |
|