osgShadow.ShadowedScene
实现阴影映射的场景图。它可以将一个渲染场景中的物体添加阴影。
该类在场景图中插入一个osgShadow.ShadowMap
节点。该节点使用深度纹理映射(Depth Texture Mapping)实现阴影贴图。
如果要使用osgShadow.ShadowedScene
,需要做以下几件事:
osgShadow.ShadowedScene
节点并将其作为场景图的根节点osgShadow.ShadowVolume
节点//创建场景图
osg::ref_ptr<osg::Group> root = new osg::Group;
//创建ShadowedScene节点
osg::ref_ptr<osgShadow::ShadowedScene> shadowedScene = new osgShadow::ShadowedScene;
shadowedScene->setReceivesShadowTraversalMask(ReceivesShadowTraversalMask); //接收阴影遍历掩码
shadowedScene->setCastsShadowTraversalMask(CastsShadowTraversalMask); //投射阴影遍历掩码
shadowedScene->addChild(root); //将根节点添加到ShadowedScene节点中
//添加投射阴影的灯光
shadowedScene->setShadowTechnique(new osgShadow::ShadowMap);
shadowedScene->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::ON); //开启光照
shadowedScene->setLight(shadowedScene->createSpotLight());
//添加阴影接收物体
osg::ref_ptr<osg::Geode> shadowedObject = createShadowedObject(); //创建需要投射阴影的物体
osg::ref_ptr<osgShadow::ShadowVolume> shadowVolume = new osgShadow::ShadowVolume; //创建ShadowVolume节点
shadowVolume->addDrawable(shadowedObject->getDrawable(0)); //将Geode的Drawable添加给ShadowVolume节点
root->addChild(shadowVolume); //将ShadowVolume节点添加到根节点中
类成员函数如下:
ShadowedScene(void);
构造函数。
ShadowedScene(const ShadowedScene& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
复制构造函数。
META_Node(osgShadow, ShadowedScene);
类型检查宏,将节点注册到Object类的类型系统中。
virtual bool addChild(osg::Node* child);
重载的addChild
函数,将osgShadow.ShadowMap
节点插入场景图中。
virtual bool addChild(osg::Node* child, const osg::CopyOp& copyop);
重载的addChild
函数。
virtual bool removeChildren(unsigned int pos, unsigned int numChildrenToRemove = 1);
重载的removeChildren
函数。
virtual void traverse(osg::NodeVisitor& nv);
重载的traverse
函数。