osg 学习 之十五:阴影和光照
来源:互联网 发布:nginx tomcat https 编辑:程序博客网 时间:2024/05/01 00:02
需要加阴影和光照,才能产生阴影效果
1. 如何加阴影
//加阴影
osg::ref_ptr<osgShadow::SoftShadowMap > ssm = new osgShadow::SoftShadowMap;
// ssm->setAmbientBias(osg::Vec2(0.7,0.7));//0.5,0.5
float bias = ssm->getBias();
ssm->setBias(bias*2.0);
osg::ref_ptr<osgShadow::ShadowedScene> ss = new osgShadow::ShadowedScene();
ss->setShadowTechnique(ssm);
ss->setReceivesShadowTraversalMask(0x01);
ss->setCastsShadowTraversalMask(0x02);
_buildings->setNodeMask(0x02);
_landNode->setNodeMask(0x01);
ss->addChild(_landNode);
ss->addChild(_buildings);
2. 如何加光照
osg::ref_ptr<osg::LightSource> ls = new osg::LightSource();
osg::ref_ptr< osg::Light> lt = new osg::Light;
lt->setLightNum(0);
lt->setPosition(osg::Vec4(1.0,1.0,1.0,0));
lt->setAmbient(osg::Vec4(0.5,0.5,0.5,1.0));
lt->setDiffuse(osg::Vec4(1.0,1.0,1.0,1.0));
ls->setLight(lt);
root->addChild(ls);
3. 注意
对一个root,加几个LightSource,每个LightSource中的light的Num不是单独的,需要所有的一起排序,并且设置root的state
osg::StateSet * rootState = root->getOrCreateStateSet();
rootState->setMode(GL_LIGHTING,osg::StateAttribute::ON);
rootState->setMode(GL_LIGHT0,osg::StateAttribute::ON);
rootState->setMode(GL_LIGHT1,osg::StateAttribute::ON);
1个lightsource中2个light
2个lightsource各1个light
渲染效果不一样
建议用1个lightsouce2个light,更真实一些
- osg 学习 之十五:阴影和光照
- OSG 学习第四天:光照
- osg for android 学习之十五:显示图片
- OSG学习:阴影代码示例
- (4) 摄像机、光照和阴影
- OpenGL学习十五:光照2
- unity shader学习笔记(十五)——Unity中的复杂光照之光照衰减
- OSG阴影
- OSG-阴影
- 基础教程二(摄影机,阴影和光照处理)
- 光照和阴影算法该如何优化?
- OSG学习笔记20——光照和材质的设置(正确绘制出想要的颜色)
- opencv之光照补偿和去除光照
- 计算机图形学 学习笔记(完):局部 / 整体 光照模型,光透射模型,纹理映射和阴影处理
- 第三章 OGRE中的光照,阴影,摄像机和视口
- osg帖子摘抄--阴影
- 《高效学习OpenGL》 之 和光照有关的数学知识
- OpengL学习之光照和材质小窥
- 输入一个日期和时间,输出下一秒的日期和时间
- mysql 控制台 乱码
- Unix 时间
- SQLite学习笔记(10)资料搜集
- 单身快乐(致一个人的情人节)
- osg 学习 之十五:阴影和光照
- java减少数据访问层代码—反射1—数据访问层Wrapper
- [转载]udp丢包 又是udp丢包
- 在一般处理文件中访问Session需要添加IRequiresSessionState(转载)
- hdu 1561树形dp+分组背包
- mssql分表查询(01)
- 网赛题解
- zendloader安装
- 服务和进程有什么区别