osgShadow.LightSpacePerspectiveShadowMapCB
是 OpenSceneGraph 中用于实现光空间透视阴影映射(Light Space Perspective Shadow Mapping)的回调函数。具体来说,它用于计算阴影与深度纹理,以实现透视阴影映射。
osgShadow.LightSpacePerspectiveShadowMapCB
通常通过 osgShadow.ShadowedScene
类的 setReceivesShadowTraversalMask
方法设置为场景节点的遍历器。
osg::ref_ptr<osgShadow::ShadowedScene> shadowedScene = new osgShadow::ShadowedScene;
shadowedScene->setReceivesShadowTraversalMask(receivesShadowMask);
在场景图中被遮挡的节点需要被设置为投射阴影。通过 osgShadow.ShadowedScene
类的 setCastsShadowTraversalMask
方法实现。
osg::ref_ptr<osgShadow::ShadowedScene> shadowedScene = new osgShadow::ShadowedScene;
shadowedScene->setCastsShadowTraversalMask(castsShadowMask);
并且,还需要给阴影节点设置映射回调函数。在这里,我们使用 osgShadow.LightSpacePerspectiveShadowMapCB
回调函数。
osg::ref_ptr<osgShadow::ShadowMap> sm = new osgShadow::ShadowMap;
osg::ref_ptr<osgShadow::LightSpacePerspectiveShadowMapCB> lspcb = new osgShadow::LightSpacePerspectiveShadowMapCB;
sm->setShadowMapCallback(lspcb);
shadowedScene->setShadowTechnique(sm.get());
osgShadow.LightSpacePerspectiveShadowMapCB
回调中的参数如下:
class LightSpacePerspectiveShadowMapCB : public osgShadow::ShadowMap::Callback
{
public:
LightSpacePerspectiveShadowMapCB(osg::Camera* camera = nullptr, float nearPlane = 0.1f, float farPlane = 2000.0f, bool debug = false);
virtual void operator() (osg::RenderInfo& renderInfo, const osgShadow::ShadowMap& sm) const;
void setCamera(osg::Camera* camera);
osg::Camera* getCamera() const;
void setNearPlane(float nearPlane);
float getNearPlane() const;
void setFarPlane(float farPlane);
float getFarPlane() const;
void setDebug(bool debug);
bool getDebug() const;
};
参数解释如下:
osg::Camera* camera
:光源使用的相机。float nearPlane
:透视投影的近面平面。float farPlane
:透视投影的远面平面。bool debug
:是否开启调试模式。osgShadow.LightSpacePerspectiveShadowMapCB
实现光空间透视阴影映射。
具体来说:
osgShadow.LightSpacePerspectiveShadowMapCB
实现了 OpenSceneGraph 中的光空间透视阴影映射。它可以通过设置场景遍历器和阴影节点映射回调函数来实现。
阴影渲染是实时渲染中的重要内容,具有广泛的应用。希望本文能够对该领域有所启发。