|
楼主 |
发表于 2010-3-5 12:30:40
|
显示全部楼层
资料看完了 大概理解了点
刚刚接触3d图像编程 很多专业名词还不是很懂
去openSceneGraph的官网看了下 找到个方法就是能把3d的模型文件改变透明值
*******I am souce code**************
Hi,
Yes you can do it with a osg::BlendFunc, just like that :
osg::BlendFunc *blendFunc = new osg::BlendFunc();
osg::BlendColor *blendColor= new osg::BlendColor(osg::Vec4(1, 1, 1, 0.0));
blendFunc->setSource(osg::BlendFunc::CONSTANT_ALPHA);
blendFunc->setDestination(osg::BlendFunc::ONE_MINUS_CONSTANT_ALPHA);
node->getOrCreateStateSet()->setAttributeAndModes(blendFunc,osg::StateAttribute::ON);
node->getOrCreateStateSet()->setAttributeAndModes(blendColor,osg::StateAttribute::ON);
Then just update the blendColor's constant color (with
blendColor->setConstantColor()) by changing its alpha value.
I've done it by making a node callback which updates this value using a
simple timer.
*******I am souce code**************
用了这个仁兄的方法 试了 果然可以通过响应事件 来改变读入的3d模型的透明值
但是 旧的问题解决了 新的问题又出现了~~ 汗~~
由于是整个模型的透明值改变了 我本来是模型有一部分是玻璃材质 本来是透明的 可以看到玻璃里面的
结果 整体的透明值提高了 我的玻璃变成了不再透明的(水泥墙)
难道真的要遍历节点下面所有的Geometry,然后每一个同时修给其透明值吗
我的3d模型有100多M 如果遍历的话 机器估计是抗不住的~~
哎 没有别的 更好的方法呢 |
|