|
本帖最后由 starmessage 于 2012-9-10 12:07 编辑
OK先上图。
图一的效果
图二的效果
图二的效果是没有经过修改源代码的效果
图一是想要得到的效果,问题来了。
源码在setupDefaultGeometry()函数中的最后有设置其拖拽器的颜色。
_xDragger->setColor(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
_yDragger->setColor(osg::Vec4(0.0f,1.0f,0.0f,1.0f));
_zDragger->setColor(osg::Vec4(0.0f,0.0f,1.0f,1.0f));
并且拖拽器都已经加入了所需要的线,拣选的圆柱体和椎体,cone。那么问题来了。
既然椎体cone已经加入到dragger下,那么在设置其color时,就应该有所变化,但是这里,线变了颜色,椎体就没有,何解?
要是让椎体变色的话,需要在new一个cone的时候,设置起颜色,在加入geode中才能达到效果,为何?
其中SetColor用到的函数就此函数
void osgManipulator::setMaterialColor(const osg::Vec4& color, osg::Node& node)
{
osg::Material* mat = dynamic_cast<osg::Material*>(node.getOrCreateStateSet()->getAttribute(osg::StateAttribute::MATERIAL));
if (! mat)
{
mat = new osg::Material;
mat->setDataVariance(osg::Object:YNAMIC);
node.getOrCreateStateSet()->setAttribute(mat);
}
mat->setDiffuse(osg::Material::FRONT_AND_BACK, color);
}
但椎体那个就是不变色,总不能硬干吧。求解决。
图一的效果是硬干的。 |
|