instead of parent light_color get the root node's color for scene_color. It is more reliable

This commit is contained in:
Asad M. Zaman 2004-09-16 01:13:34 +00:00
parent 0778ad00be
commit 4cad0620c5
3 changed files with 20 additions and 12 deletions

View File

@ -104,10 +104,10 @@ has_cull_callback() const {
// level.
////////////////////////////////////////////////////////////////////
void PolylightEffect::
cull_callback(CullTraverser *, CullTraverserData &data,
cull_callback(CullTraverser *trav, CullTraverserData &data,
CPT(TransformState) &node_transform,
CPT(RenderState) &node_state) const {
CPT(RenderAttrib) poly_light_attrib = do_poly_light(&data, node_transform);
CPT(RenderAttrib) poly_light_attrib = do_poly_light(trav->get_scene()->get_scene_root(), &data, node_transform);
CPT(RenderState) poly_light_state = RenderState::make(poly_light_attrib);
node_state = node_state->compose(poly_light_state);
}
@ -123,7 +123,7 @@ cull_callback(CullTraverser *, CullTraverserData &data,
// in respect to that light's proximity.
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) PolylightEffect::
do_poly_light(const CullTraverserData *data, const TransformState *node_transform) const {
do_poly_light(const NodePath & root, const CullTraverserData *data, const TransformState *node_transform) const {
//static bool was_under_polylight = false;
float dist; // To calculate the distance of each light from the node
float r,g,b; // To hold the color calculation
@ -138,11 +138,9 @@ do_poly_light(const CullTraverserData *data, const TransformState *node_transfor
Rcollect = Gcollect = Bcollect = 0.0;
// get the avatar's base color scale
NodePath parent = data->_node_path.get_node_path().get_parent();
Colorf scene_color = parent.get_color_scale();
Colorf scene_color = root.get_color_scale();
if (polylight_info) {
pgraph_cat.info() << "parent node name " << parent.get_name() << endl;
pgraph_cat.info() << "parent color scale = " << scene_color << endl;
pgraph_cat.info() << "scene color scale = " << scene_color << endl;
}
min_dist = 100000.0;
// Cycle through all the lights in this effect's lightgroup
@ -167,7 +165,16 @@ do_poly_light(const CullTraverserData *data, const TransformState *node_transfor
dist = xz.length(); // this does not count height difference
}
if (polylight_info) {
pgraph_cat.debug() << "light's position = " << light->get_pos() << endl;
pgraph_cat.debug() << "relative position = " << point << endl;
pgraph_cat.debug() << "effect center = " << _effect_center << endl;
//pgraph_cat.info() << "close to this light = " << light->get_name() << endl;
pgraph_cat.info() << "dist = " << dist << ";radius = " << light_radius << endl;
}
if (dist <= light_radius) { // If node is in range of this light
/*
if (polylight_info) {
pgraph_cat.debug() << "light's position = " << light->get_pos() << endl;
pgraph_cat.debug() << "relative position = " << point << endl;
@ -175,6 +182,7 @@ do_poly_light(const CullTraverserData *data, const TransformState *node_transfor
//pgraph_cat.info() << "close to this light = " << light->get_name() << endl;
pgraph_cat.info() << "dist = " << dist << ";radius = " << light_radius << endl;
}
*/
PolylightNode::Attenuation_Type light_attenuation = light->get_attenuation();
Colorf light_color;

View File

@ -73,7 +73,7 @@ public:
CPT(TransformState) &node_transform,
CPT(RenderState) &node_state) const;
CPT(RenderAttrib) do_poly_light(const CullTraverserData *data, const TransformState *node_transform) const;
CPT(RenderAttrib) do_poly_light(const NodePath &root, const CullTraverserData *data, const TransformState *node_transform) const;
virtual void output(ostream &out) const;

View File

@ -115,12 +115,12 @@ Colorf PolylightNode::flicker() const {
}
//variation += _offset;
variation *= _scale;
//variation *= _scale;
//printf("Variation: %f\n",variation);
r+=variation;
g+=variation;
b+=variation;
r += r * variation;
g += g * variation;
b += b * variation;
/* CLAMPING
if (fabs(r - color[0]) > 0.5 || fabs(g - color[1]) > 0.5 || fabs(b - color[2]) > 0.5) {