Browse Source

Commit Camera::set_lod_scale patch by Josh Enes

rdb 13 years ago
parent
commit
19cb1e5230

+ 21 - 0
panda/src/pgraph/camera.I

@@ -250,3 +250,24 @@ INLINE const string &Camera::
 get_tag_state_key() const {
   return _tag_state_key;
 }
+
+////////////////////////////////////////////////////////////////////
+//     Function: Camera::get_lod_scale
+//       Access: Published
+//  Description: Returns the multiplier for LOD distances.
+////////////////////////////////////////////////////////////////////
+INLINE PN_stdfloat Camera::
+get_lod_scale() const {
+  return _lod_scale;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Camera::set_lod_scale
+//       Access: Published
+//  Description: Sets the multiplier for LOD distances. This value
+//               is multiplied with the LOD scale set on LodNodes.
+////////////////////////////////////////////////////////////////////
+INLINE void Camera::
+set_lod_scale(PN_stdfloat value) {
+  _lod_scale = value;
+}

+ 2 - 0
panda/src/pgraph/camera.cxx

@@ -31,6 +31,7 @@ Camera(const string &name, Lens *lens) :
   _camera_mask(~PandaNode::get_overall_bit()),
   _initial_state(RenderState::make_empty())
 {
+  set_lod_scale(1.0);
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -45,6 +46,7 @@ Camera(const Camera &copy) :
   _scene(copy._scene),
   _camera_mask(copy._camera_mask),
   _initial_state(copy._initial_state),
+  _lod_scale(copy._lod_scale),
   _tag_state_key(copy._tag_state_key),
   _tag_states(copy._tag_states)
 {

+ 4 - 0
panda/src/pgraph/camera.h

@@ -75,6 +75,9 @@ PUBLISHED:
   INLINE void set_tag_state_key(const string &tag_state_key);
   INLINE const string &get_tag_state_key() const;
 
+  INLINE void set_lod_scale(PN_stdfloat value);
+  INLINE PN_stdfloat get_lod_scale() const;
+
   void set_tag_state(const string &tag_state, const RenderState *state);
   void clear_tag_state(const string &tag_state);
   bool has_tag_state(const string &tag_state) const;
@@ -97,6 +100,7 @@ private:
   NodePath _lod_center;
 
   DrawMask _camera_mask;
+  PN_stdfloat _lod_scale;
 
   typedef pvector<DisplayRegionBase *> DisplayRegions;
   DisplayRegions _display_regions;

+ 4 - 2
panda/src/pgraphnodes/lodNode.cxx

@@ -177,7 +177,8 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
     if (cdata->_got_force_switch) {
       in_range = (cdata->_force_switch == index);
     } else {
-      in_range = sw.in_range_2(dist2*cdata->_lod_scale);
+      in_range = sw.in_range_2(dist2 * cdata->_lod_scale
+                   * trav->get_scene()->get_camera_node()->get_lod_scale());
     }
     
     if (in_range) {
@@ -376,7 +377,8 @@ compute_child(CullTraverser *trav, CullTraverserData &data) {
   PN_stdfloat dist2 = center.dot(center);
 
   for (int index = 0; index < (int)cdata->_switch_vector.size(); ++index) {
-    if (cdata->_switch_vector[index].in_range_2(dist2*cdata->_lod_scale)) { 
+    if (cdata->_switch_vector[index].in_range_2(dist2 * cdata->_lod_scale
+         * trav->get_scene()->get_camera_node()->get_lod_scale())) { 
       if (pgraph_cat.is_debug()) {
         pgraph_cat.debug()
           << data._node_path << " at distance " << sqrt(dist2)