osg.Depth
是OpenSceneGraph(OSG)中一种场景图节点(node),用于控制OpenGL的深度缓存测试(depth buffer testing)操作。它可以用于剪切(clipping)、遮挡测试(occlusion testing)、多边形偏移(polygon offset)等场景中。
在创建osg.Depth
节点时,我们通常需要指定其参数。以下是最常用的参数:
osg.Depth::LESS
或osg.Depth::LEQUAL
,指定深度函数的运算方式。LESS
意味着比较时使用小于号(<),而LEQUAL
意味着使用小于等于号(<=)。默认为osg.Depth::LESS
。osg.Depth::FAR_PLANE_ABSOLUTE
或osg.Depth::FAR_PLANE_DISTANCE
,若使用绝对距离则为FAR_PLANE_ABSOLUTE
,使用相对距离则为FAR_PLANE_DISTANCE
。绝对距离是将深度值映射到场景图根节点的远切面,而相对距离是将深度值映射到当前相机(camera)的远切面。默认为相对距离。osg.Depth::NEVER
或osg.Depth::ALWAYS
,指定深度测试不通过和总是通过的情况。默认为osg.Depth::ALWAYS
。osg.Depth::CLAMP_TO_EDGE
或osg.Depth::CLAMP_TO_BORDER
,指定边界溢出的情况,分别对应边界向内截断(CLAMP_TO_EDGE
)以及使用自定义边界值(CLAMP_TO_BORDER
)。默认为osg.Depth::CLAMP_TO_EDGE
。以下是一个示例:
osg::ref_ptr<osg::Depth> depth = new osg::Depth;
depth->setFunction(osg::Depth::LEQUAL);
depth->setRange(0.0f, 1.0f);
void setFunction(osg::Depth::Function function)
:设置深度函数的运算方式,默认为osg.Depth::LESS
。void setRange(float nearDist, float farDist, bool absolute = false)
:设置深度值映射到远近平面上的范围。如果使用相对距离,则距离值是相机到近平面的距离(通常为正值),否则为绝对距离。默认为0.0f
到1.0f
的相对距离。void setWriteMask(bool mask)
:设置是否启用深度缓存写入功能。默认为启用(true
)。void setBinName(const std::string& binName)
:设置节点的渲染排序名称(render bin name)。这决定了节点渲染时在场景中的位置。默认为"DepthSortedBin"
。以上API只是个抛砖引玉,更多方法请查询OSG文档。
osg.Depth
节点并不会自动应用到所有子节点上。如果想使所有子节点都应用到深度测试,则应将osg.Depth
节点插入场景图根节点向下的所有路径上。osg.Depth
节点,若其他子节点需要在其后绘制,则应该将其他节点的渲染排序设为相同名称。