osg.CullSettings是OpenSceneGraph中用于设置裁剪参数的类。它是一组影响场景裁剪的参数值。这些参数可以影响场景中的渲染渲染,例如开启剪裁平面、调整剪裁平面位置和大小、设置遮盖面剔除等。
osg.CullSettings包含以下参数:
_clippingMode: 裁剪模式。可以是osg::CullSettings::NO_CULLING(不进行裁剪)、osg::CullSettings::VIEW_FRUSTUM_SIDES_CULLING(暴力剔除)、osg::CullSettings::VIEW_FRUSTUM_CULLING(裁剪)或osg::CullSettings::SHADOW_OCCLUSION_CULLING(阴影)。
_computeNearFarMode: 不同视点之间的Avoids改变计算近裁剪面和远裁剪面的模式。可以是osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR(视图不变,手动设置裁剪平面)、osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES(使用边界体积),osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES(遍历场景图再计算)或osg::CullSettings::COMPUTE_NEAR_USING_PRIMITIVES(仅计算近裁剪面)。
_nearFarRatio: 前后裁剪面之间的比例因子。当远裁剪面不能很好地匹配场景时,可以进行调整。
_smallFeatureCullingPixelSize: 用于计算小特征剔除的像素大小。相机中视觉差异的像素大小取决于这个值。
_farPlane: 远裁剪面的距离。如果未设置,默认值为0,表示距离为无限远。
_left, _right, _bottom, _top, _zNear, _zFar: 视口中剪切面的参数。这些参数可以被用来确定裁剪平面的位置和大小。裁剪盒子(包括视锥体)可以是任意形状。
_currentCamera: 当前视点的相机。这个参数不应该手动设置。
osg.CullSettings包含以下主要方法:
osg::CullSettings(): 构造函数。默认情况下,设置所有参数为默认值。
void setCullingMode(osg::CullSettings::CullingMode mode): 设置剔除模式。必须是osg::CullSettings::NO_CULLING、osg::CullSettings::VIEW_FRUSTUM_SIDES_CULLING、osg::CullSettings::VIEW_FRUSTUM_CULLING或osg::CullSettings::SHADOW_OCCLUSION_CULLING。
osg::CullSettings::CullingMode getCullingMode() const: 获取当前剔除模式。
void setComputeNearFarMode(osg::CullSettings::ComputeNearFarMode mode): 设置计算近裁剪面和远裁剪面的模式。必须是osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR、osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES、osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES或osg::CullSettings::COMPUTE_NEAR_USING_PRIMITIVES。
osg::CullSettings::ComputeNearFarMode getComputeNearFarMode() const: 获取当前计算近裁剪面和远裁剪面的模式。
void setNearFarRatio(double ratio): 设置前后裁剪面之间的比例因子。
double getNearFarRatio() const: 获取当前前后裁剪面的比例因子。
void setSmallFeatureCullingPixelSize(float pixelSize): 设置用于计算小特征剔除的像素大小。
float getSmallFeatureCullingPixelSize() const: 获取当前用于计算小特征剔除的像素大小。
void setFarPlane(double farPlane): 设置远裁剪面的距离。如果未设置,默认值为0,表示距离为无限远。
double getFarPlane() const: 获取当前远裁剪面的距离。
void setProjectionMatrix(const osg::Matrixd& matrix): 设置当前视点的投影矩阵。
osg::Matrixd getProjectionMatrix() const: 获取当前视点的投影矩阵。
void setViewport(const osg::Viewport& viewport): 设置当前视点的视图剪裁平面。
osg::Viewport getViewport() const: 获取当前视点的视图剪裁平面。
void setCamera(osg::Camera camera)*: 设置当前视点的相机指针。
osg::Camera getCamera() const*: 获取当前视点的相机指针。
#include <osg/CullSettings>
osg::ref_ptr<osg::CullSettings> cullSettings = new osg::CullSettings;
cullSettings->setCullingMode(osg::CullSettings::VIEW_FRUSTUM_CULLING);
cullSettings->setNearFarRatio(0.1);
cullSettings->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES);
osg::Matrixd projectionMatrix;
projectionMatrix.makePerspective(60.0, 1.33, 0.1, 1000.0);
cullSettings->setProjectionMatrix(projectionMatrix);
osg::Viewport viewport(0, 0, 800, 600);
cullSettings->setViewport(viewport);
osg::Camera* camera = new osg::Camera;
cullSettings->setCamera(camera);