查看: 1341|回复: 3

【新手求助】『已结』拖拽器源码SetColor问题

[复制链接]

该用户从未签到

发表于 2012-9-7 23:50:47 | 显示全部楼层 |阅读模式
本帖最后由 starmessage 于 2012-9-10 12:07 编辑

OK先上图。
2.jpg
图一的效果
3.jpg
图二的效果

图二的效果是没有经过修改源代码的效果
图一是想要得到的效果,问题来了。
源码在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);
}
但椎体那个就是不变色,总不能硬干吧。求解决。
图一的效果是硬干的。

该用户从未签到

发表于 2012-9-10 09:22:13 | 显示全部楼层
友情帮顶

该用户从未签到

发表于 2012-9-10 09:28:20 | 显示全部楼层
GL_NORMALIZE 就可以了

该用户从未签到

 楼主| 发表于 2012-9-10 10:39:23 | 显示全部楼层
setMode(GL_NORMALIZE,osg::StateAttribute::ON)
居然是ON,ON不是都默认么…我试了好多属性,基本都是往关的试。
谢谢大牛啊,可以继续下一个问题了。
结贴喽。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表