14#ifndef OSG_CULLSETTINGS
15#define OSG_CULLSETTINGS 1
25class ApplicationUsage;
34 readEnvironmentalVariables();
40 readEnvironmentalVariables();
41 readCommandLine(arguments);
50 if (
this==&settings)
return *
this;
51 setCullSettings(settings);
61 COMPUTE_NEAR_FAR_MODE = (0x1 << 0),
62 CULLING_MODE = (0x1 << 1),
63 LOD_SCALE = (0x1 << 2),
64 SMALL_FEATURE_CULLING_PIXEL_SIZE = (0x1 << 3),
65 CLAMP_PROJECTION_MATRIX_CALLBACK = (0x1 << 4),
66 NEAR_FAR_RATIO = (0x1 << 5),
67 IMPOSTOR_ACTIVE = (0x1 << 6),
68 DEPTH_SORT_IMPOSTOR_SPRITES = (0x1 << 7),
69 IMPOSTOR_PIXEL_ERROR_THRESHOLD = (0x1 << 8),
70 NUM_FRAMES_TO_KEEP_IMPOSTORS_SPRITES = (0x1 << 9),
71 CULL_MASK = (0x1 << 10),
72 CULL_MASK_LEFT = (0x1 << 11),
73 CULL_MASK_RIGHT = (0x1 << 12),
74 CLEAR_COLOR = (0x1 << 13),
75 CLEAR_MASK = (0x1 << 14),
76 LIGHTING_MODE = (0x1 << 15),
78 DRAW_BUFFER = (0x1 << 17),
79 READ_BUFFER = (0x1 << 18),
81 NO_VARIABLES = 0x00000000,
82 ALL_VARIABLES = 0x7FFFFFFF
112 DO_NOT_MODIFY_INHERITANCE_MASK
122 if (_inheritanceMaskActionOnAttributeSetting==DISABLE_ASSOCIATED_INHERITANCE_MASK_BIT)
124 _inheritanceMask = _inheritanceMask & (~maskBit);
162 DO_NOT_COMPUTE_NEAR_FAR = 0,
165 COMPUTE_NEAR_USING_PRIMITIVES
171 void setNearFarRatio(
double ratio) { _nearFarRatio = ratio; applyMaskAction(NEAR_FAR_RATIO); }
177 VIEW_FRUSTUM_SIDES_CULLING = 0x1,
178 NEAR_PLANE_CULLING = 0x2,
179 FAR_PLANE_CULLING = 0x4,
180 VIEW_FRUSTUM_CULLING = VIEW_FRUSTUM_SIDES_CULLING|
183 SMALL_FEATURE_CULLING = 0x8,
184 SHADOW_OCCLUSION_CULLING = 0x10,
185 CLUSTER_CULLING = 0x20,
186 DEFAULT_CULLING = VIEW_FRUSTUM_SIDES_CULLING|
187 SMALL_FEATURE_CULLING|
188 SHADOW_OCCLUSION_CULLING|
190 ENABLE_ALL_CULLING = VIEW_FRUSTUM_CULLING|
191 SMALL_FEATURE_CULLING|
192 SHADOW_OCCLUSION_CULLING|
215 void setLODScale(
float scale) { _LODScale = scale; applyMaskAction(LOD_SCALE); }
273template<
class matrix_type,
class value_type>
276 double epsilon = 1e-6;
277 if (zfar<znear-epsilon)
279 if (zfar != -FLT_MAX || znear != FLT_MAX)
281 OSG_INFO<<
"_clampProjectionMatrix not applied, invalid depth range, znear = "<<znear<<
" zfar = "<<zfar<<std::endl;
286 if (zfar<znear+epsilon)
290 double average = (znear+zfar)*0.5;
291 znear = average-epsilon;
292 zfar = average+epsilon;
296 if (fabs(projection(0,3))<epsilon && fabs(projection(1,3))<epsilon && fabs(projection(2,3))<epsilon )
300 value_type delta_span = (zfar-znear)*0.02;
301 if (delta_span<1.0) delta_span = 1.0;
302 value_type desired_znear = znear - delta_span;
303 value_type desired_zfar = zfar + delta_span;
306 znear = desired_znear;
309 projection(2,2)=-2.0f/(desired_zfar-desired_znear);
310 projection(3,2)=-(desired_zfar+desired_znear)/(desired_zfar-desired_znear);
322 value_type zfarPushRatio = 1.02;
323 value_type znearPullRatio = 0.98;
327 value_type desired_znear = znear * znearPullRatio;
328 value_type desired_zfar = zfar * zfarPushRatio;
331 double min_near_plane = zfar*nearFarRatio;
332 if (desired_znear<min_near_plane) desired_znear=min_near_plane;
335 znear = desired_znear;
338 value_type trans_near_plane = (-desired_znear*projection(2,2)+projection(3,2))/(-desired_znear*projection(2,3)+projection(3,3));
339 value_type trans_far_plane = (-desired_zfar*projection(2,2)+projection(3,2))/(-desired_zfar*projection(2,3)+projection(3,3));
341 value_type ratio = fabs(2.0/(trans_near_plane-trans_far_plane));
342 value_type center = -(trans_near_plane+trans_far_plane)/2.0;
344 projection.postMult(
osg::Matrix(1.0f,0.0f,0.0f,0.0f,
346 0.0f,0.0f,ratio,0.0f,
347 0.0f,0.0f,center*ratio,1.0f));
#define OSG_INFO
Definition Notify:87
Definition ArgumentParser:28
Definition CullSettings:28
InheritanceMask getInheritanceMask() const
Definition CullSettings:91
float _LODScale
Definition CullSettings:256
void setSmallFeatureCullingPixelSize(float value)
Definition CullSettings:222
void setLODScale(float scale)
Definition CullSettings:215
bool getImpostorsActive() const
Definition CullSettings:137
float getSmallFeatureCullingPixelSize() const
Definition CullSettings:225
Node::NodeMask _cullMaskLeft
Definition CullSettings:267
ComputeNearFarMode
Definition CullSettings:161
@ COMPUTE_NEAR_FAR_USING_PRIMITIVES
Definition CullSettings:164
@ COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES
Definition CullSettings:163
virtual void inheritCullSettings(const CullSettings &settings)
Definition CullSettings:97
CullSettings(ArgumentParser &arguments)
Definition CullSettings:37
void setCullMaskRight(osg::Node::NodeMask nm)
Definition CullSettings:211
ClampProjectionMatrixCallback * getClampProjectionMatrixCallback()
Definition CullSettings:241
void setClampProjectionMatrixCallback(ClampProjectionMatrixCallback *cpmc)
Definition CullSettings:239
void readCommandLine(ArgumentParser &arguments)
Node::NodeMask _cullMask
Definition CullSettings:266
void applyMaskAction(unsigned int maskBit)
Definition CullSettings:120
void setInheritanceMask(InheritanceMask mask)
Definition CullSettings:88
void setInheritanceMaskActionOnAttributeSetting(InheritanceMaskActionOnAttributeSetting action)
Definition CullSettings:115
void readEnvironmentalVariables()
double _nearFarRatio
Definition CullSettings:260
void setNearFarRatio(double ratio)
Definition CullSettings:171
VariablesMask
Definition CullSettings:60
double getNearFarRatio() const
Definition CullSettings:172
virtual ~CullSettings()
Definition CullSettings:46
bool getDepthSortImpostorSprites() const
Definition CullSettings:150
void write(std::ostream &out)
ComputeNearFarMode _computeNearFar
Definition CullSettings:254
int _numFramesToKeepImpostorSprites
Definition CullSettings:264
ComputeNearFarMode getComputeNearFarMode() const
Definition CullSettings:169
osg::Node::NodeMask getCullMaskLeft() const
Definition CullSettings:209
int getNumberOfFrameToKeepImpostorSprites() const
Definition CullSettings:158
float _smallFeatureCullingPixelSize
Definition CullSettings:257
Node::NodeMask _cullMaskRight
Definition CullSettings:268
virtual void inheritCullSettings(const CullSettings &settings, unsigned int inheritanceMask)
float getLODScale() const
Definition CullSettings:218
InheritanceMaskActionOnAttributeSetting
Definition CullSettings:110
@ DISABLE_ASSOCIATED_INHERITANCE_MASK_BIT
Definition CullSettings:111
CullSettings(const CullSettings &cs)
const ClampProjectionMatrixCallback * getClampProjectionMatrixCallback() const
Definition CullSettings:243
void setImpostorsActive(bool active)
Definition CullSettings:134
void setCullSettings(const CullSettings &settings)
void setCullMask(osg::Node::NodeMask nm)
Definition CullSettings:205
bool _depthSortImpostorSprites
Definition CullSettings:262
void setNumberOfFrameToKeepImpostorSprites(int numFrames)
Definition CullSettings:154
InheritanceMaskActionOnAttributeSetting getInheritanceMaskActionOnAttributeSetting() const
Definition CullSettings:116
InheritanceMask _inheritanceMask
Definition CullSettings:251
float _impostorPixelErrorThreshold
Definition CullSettings:263
CullingMode _cullingMode
Definition CullSettings:255
CullingModeValues
Definition CullSettings:175
void setImpostorPixelErrorThreshold(float numPixels)
Definition CullSettings:141
osg::Node::NodeMask getCullMaskRight() const
Definition CullSettings:212
void setDepthSortImpostorSprites(bool doDepthSort)
Definition CullSettings:147
void setCullMaskLeft(osg::Node::NodeMask nm)
Definition CullSettings:208
float getImpostorPixelErrorThreshold() const
Definition CullSettings:144
osg::Node::NodeMask getCullMask() const
Definition CullSettings:206
bool _impostorActive
Definition CullSettings:261
void setCullingMode(CullingMode mode)
Definition CullSettings:199
void setComputeNearFarMode(ComputeNearFarMode cnfm)
Definition CullSettings:168
int InheritanceMask
Definition CullSettings:85
virtual void setDefaults()
ref_ptr< ClampProjectionMatrixCallback > _clampProjectionMatrixCallback
Definition CullSettings:259
int CullingMode
Definition CullSettings:196
CullSettings()
Definition CullSettings:31
InheritanceMaskActionOnAttributeSetting _inheritanceMaskActionOnAttributeSetting
Definition CullSettings:252
CullingMode getCullingMode() const
Definition CullSettings:202
unsigned int NodeMask
Definition Node:363
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
bool clampProjectionMatrix(matrix_type &projection, double &znear, double &zfar, value_type nearFarRatio)
Definition CullSettings:274
#define OSG_EXPORT
Definition osg/Export:39
Definition CullSettings:233
virtual bool clampProjectionMatrixImplementation(osg::Matrixf &projection, double &znear, double &zfar) const =0
virtual bool clampProjectionMatrixImplementation(osg::Matrixd &projection, double &znear, double &zfar) const =0