osgShadow.ViewDependentShadowMap是OpenSceneGraph中的一种阴影映射技术,它基于视点的视角信息来生成阴影贴图。这种技术可以在相同的物体/灯光组合下生成更精确和更稳定的阴影。
osgShadow.ViewDependentShadowMap最简单的使用方法是将其作为osg::Camera的子节点添加到场景图中。
osg::ref_ptr<osgShadow::ViewDependentShadowMap> shadowMap = new osgShadow::ViewDependentShadowMap;
shadowMap->setTextureSize(osg::Vec2s(1024, 1024));
shadowMap->setLight(attachedLight.get());
...
osg::ref_ptr<osg::Camera> shadowCamera = shadowMap->getCamera();
...
osg::ref_ptr<osg::Group> root = new osg::Group;
root->addChild(shadowCamera);
root->addChild(yourSceneGraph);
此时osgShadow.ViewDependentShadowMap将利用默认的摄像机和着色器程序来生成阴影贴图。您可以通过手动设置shadow camera的参数来定制阴影显示效果。
osgShadow.ViewDependentShadowMap提供了多个参数控制阴影生成的细节。以下是一些重要的参数说明:
setLight(osg::Light* light)
指定阴影生成所用的光源,必填。setTextureSize(osg::Vec2s size)
指定阴影贴图的分辨率大小。请注意,此值的大小将直接影响阴影贴图的质量和渲染速度。默认值为osg::Vec2s(1024, 1024)
。setTextureUnit(unsigned int unit)
指定阴影贴图所需的纹理单元编号。默认为2。setMinimumShadowMapNearFarRatio(float ratio)
指定生成阴影贴图时,开启物体的最近距离与最远距离比例值。默认为0.1。setMinimumShadowMapMargin(float margin)
指定生成阴影贴图时,开启物体的margin值。默认为1.0。setShadowTextureCoordOffset(const osg::Vec2f& offset)
设置阴影贴图在纹理坐标系中的偏移量。默认为(0.5,0.5)
,表示生成的阴影贴图使用了OpenGL的默认坐标系。虽然osgShadow.ViewDependentShadowMap可以在同一个物体/灯光组合下生成更精确和更稳定的阴影,但它也存在一些注意点:
GL_ARB_texture_rectangle
扩展。如果您的硬件或驱动程序不支持该扩展,则该技术不会起作用。