查看: 1133|回复: 4

怎么关闭已加载的shader效果?

[复制链接]

该用户从未签到

发表于 2014-1-10 17:56:04 | 显示全部楼层 |阅读模式
如题,需要将同一个shader用于某个物体,然后关闭,激活,达到一闪一闪的效果,

  1. if (!shadered)
  2.         {
  3.             cow->getOrCreateStateSet()->setAttributeAndModes(program_current,osg::StateAttribute::ON);
  4.             shadered = true;
  5.         }
  6.         else
  7.         {
  8.                                
  9.             cow->getOrCreateStateSet()->setAttributeAndModes(program_current,osg::StateAttribute::OFF);
  10.             shadered = false;

  11.         }
复制代码



cow->getOrCreateStateSet()->setAttributeAndModes(program_current,osg::StateAttribute::OFF);
测试使用这种方法不成功

使用remove的方法,在几次闪烁后会报内存错误

该用户从未签到

发表于 2014-1-10 20:48:40 | 显示全部楼层
cow->getOrCreateStateSet()->setAttributeAndModes(program_current,osg::StateAttribute::OFF);
应该是设置完之后,在渲染的时候没更新你的操作吧?

LZ可以换种方法实现,往shader里传入一个uniform参数,如 enableFlash,然后在shader里控制闪烁
if(enableFlash){  闪烁 }
else    {不闪烁}

该用户从未签到

 楼主| 发表于 2014-1-13 09:50:59 | 显示全部楼层
wangsli 发表于 2014-1-10 20:48
cow->getOrCreateStateSet()->setAttributeAndModes(program_current,osg::StateAttribute::OFF);
应该是 ...

怎么个更新法啊,调用了OFF 还要如何更新  求指导

该用户从未签到

 楼主| 发表于 2014-1-13 11:37:16 | 显示全部楼层
wangsli 发表于 2014-1-10 20:48
cow->getOrCreateStateSet()->setAttributeAndModes(program_current,osg::StateAttribute::OFF);
应该是 ...

已经用你说的那个传数据的方法解决了 谢谢,  不知道你说的那个更新的问题是怎么整

该用户从未签到

发表于 2014-1-18 21:38:53 | 显示全部楼层
更新就是过一段时间找到那个uniform然后set()就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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