mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
LOD::set_stress_factor
This commit is contained in:
parent
b8ac8d8e21
commit
c65538b0e1
@ -17,22 +17,19 @@
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
#include "LOD.h"
|
#include "LOD.h"
|
||||||
|
|
||||||
#include <datagram.h>
|
#include "datagram.h"
|
||||||
#include <datagramIterator.h>
|
#include "datagramIterator.h"
|
||||||
#include <indent.h>
|
#include "indent.h"
|
||||||
|
#include "config_gobj.h"
|
||||||
|
|
||||||
#define EXPCL EXPCL_PANDA
|
#define EXPCL EXPCL_PANDA
|
||||||
#define EXPTP EXPTP_PANDA
|
#define EXPTP EXPTP_PANDA
|
||||||
#define TYPE LODSwitch
|
#define TYPE LODSwitch
|
||||||
#define NAME LODSwitchVector
|
#define NAME LODSwitchVector
|
||||||
|
|
||||||
#include <vector_src.cxx>
|
#include "vector_src.cxx"
|
||||||
#include "config_gobj.h"
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
float LOD::_stress_factor = lod_stress_factor;
|
||||||
// Static variables
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
TypeHandle LOD::_type_handle;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: LOD::constructor
|
// Function: LOD::constructor
|
||||||
@ -97,7 +94,7 @@ int LOD::
|
|||||||
compute_child(const LPoint3f &cam_pos, const LPoint3f ¢er) const {
|
compute_child(const LPoint3f &cam_pos, const LPoint3f ¢er) const {
|
||||||
|
|
||||||
LVector3f v = cam_pos - center;
|
LVector3f v = cam_pos - center;
|
||||||
float dist = dot(v, v);
|
float dist = dot(v, v) * _stress_factor;
|
||||||
LODSwitchVector::const_iterator i;
|
LODSwitchVector::const_iterator i;
|
||||||
int child = 0;
|
int child = 0;
|
||||||
for (i = _switch_vector.begin(), child = 0;
|
for (i = _switch_vector.begin(), child = 0;
|
||||||
@ -206,3 +203,26 @@ write(ostream &out, int indent_level) const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: LOD::set_stress_factor
|
||||||
|
// Access: Published, Static
|
||||||
|
// Description: Sets the factor that globally scales all LOD's. This
|
||||||
|
// factor is applied to the square of the LOD distance,
|
||||||
|
// so the larger the number, the lower the detail that
|
||||||
|
// is presented. The normal value is 1.0.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void LOD::
|
||||||
|
set_stress_factor(float stress_factor) {
|
||||||
|
_stress_factor = stress_factor;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: LOD::get_stress_factor
|
||||||
|
// Access: Published, Static
|
||||||
|
// Description: Returns the factor that globally scales all LOD's.
|
||||||
|
// See get_stress_factor().
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
float LOD::
|
||||||
|
get_stress_factor() {
|
||||||
|
return _stress_factor;
|
||||||
|
}
|
||||||
|
@ -15,16 +15,14 @@
|
|||||||
// panda3d@yahoogroups.com .
|
// panda3d@yahoogroups.com .
|
||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef LOD_H
|
#ifndef LOD_H
|
||||||
#define LOD_H
|
#define LOD_H
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Includes
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
#include <pandabase.h>
|
|
||||||
|
|
||||||
#include <luse.h>
|
#include "pandabase.h"
|
||||||
#include <typedReferenceCount.h>
|
|
||||||
|
#include "luse.h"
|
||||||
|
#include "typedReferenceCount.h"
|
||||||
|
|
||||||
class Datagram;
|
class Datagram;
|
||||||
class DatagramIterator;
|
class DatagramIterator;
|
||||||
@ -82,11 +80,11 @@ protected:
|
|||||||
// Description : Computes whether a level-of-detail should be rendered
|
// Description : Computes whether a level-of-detail should be rendered
|
||||||
// or not based on distance from the rendering camera.
|
// or not based on distance from the rendering camera.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
class EXPCL_PANDA LOD : public TypedReferenceCount {
|
class EXPCL_PANDA LOD {
|
||||||
public:
|
public:
|
||||||
LOD(void);
|
LOD();
|
||||||
LOD(const LOD ©);
|
LOD(const LOD ©);
|
||||||
~LOD(void);
|
~LOD();
|
||||||
|
|
||||||
void xform(const LMatrix4f &mat);
|
void xform(const LMatrix4f &mat);
|
||||||
|
|
||||||
@ -99,26 +97,16 @@ public:
|
|||||||
void output(ostream &out) const;
|
void output(ostream &out) const;
|
||||||
void write(ostream &out, int indent_level = 0) const;
|
void write(ostream &out, int indent_level = 0) const;
|
||||||
|
|
||||||
public:
|
PUBLISHED:
|
||||||
LPoint3f _center;
|
static void set_stress_factor(float stress_factor);
|
||||||
LODSwitchVector _switch_vector;
|
static float get_stress_factor();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static TypeHandle get_class_type() {
|
LPoint3f _center;
|
||||||
return _type_handle;
|
LODSwitchVector _switch_vector;
|
||||||
}
|
|
||||||
static void init_type() {
|
|
||||||
TypedReferenceCount::init_type();
|
|
||||||
register_type(_type_handle, "LOD",
|
|
||||||
TypedReferenceCount::get_class_type());
|
|
||||||
}
|
|
||||||
virtual TypeHandle get_type() const {
|
|
||||||
return get_class_type();
|
|
||||||
}
|
|
||||||
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static TypeHandle _type_handle;
|
static float _stress_factor;
|
||||||
};
|
};
|
||||||
|
|
||||||
INLINE ostream &operator << (ostream &out, const LOD &lod) {
|
INLINE ostream &operator << (ostream &out, const LOD &lod) {
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <config_util.h>
|
#include <config_util.h>
|
||||||
#include "LOD.h"
|
|
||||||
#include "boundedObject.h"
|
#include "boundedObject.h"
|
||||||
#include "config_gobj.h"
|
#include "config_gobj.h"
|
||||||
#include "drawable.h"
|
#include "drawable.h"
|
||||||
@ -118,6 +117,8 @@ const int select_LOD_number = config_gobj.GetInt("select-LOD-number", -1);
|
|||||||
// will screen out successively higher levels
|
// will screen out successively higher levels
|
||||||
const int minimum_LOD_number = config_gobj.GetInt("minimum-LOD-number", 0);
|
const int minimum_LOD_number = config_gobj.GetInt("minimum-LOD-number", 0);
|
||||||
|
|
||||||
|
const float lod_stress_factor = config_gobj.GetFloat("lod-stress-factor", 1.0f);
|
||||||
|
|
||||||
// The default near and far plane distances.
|
// The default near and far plane distances.
|
||||||
const float default_near = config_gobj.GetFloat("default-near", 1.0f);
|
const float default_near = config_gobj.GetFloat("default-near", 1.0f);
|
||||||
const float default_far = config_gobj.GetFloat("default-far", 1000.0f);
|
const float default_far = config_gobj.GetFloat("default-far", 1000.0f);
|
||||||
@ -181,7 +182,6 @@ ConfigureFn(config_gobj) {
|
|||||||
GeomTrifan::init_type();
|
GeomTrifan::init_type();
|
||||||
GeomTristrip::init_type();
|
GeomTristrip::init_type();
|
||||||
ImageBuffer::init_type();
|
ImageBuffer::init_type();
|
||||||
LOD::init_type();
|
|
||||||
Material::init_type();
|
Material::init_type();
|
||||||
OrthographicLens::init_type();
|
OrthographicLens::init_type();
|
||||||
MatrixLens::init_type();
|
MatrixLens::init_type();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user