From 3e12bc0f657245c85f28d2a43eb22545854d8521 Mon Sep 17 00:00:00 2001 From: David Rose Date: Fri, 22 Aug 2008 23:26:57 +0000 Subject: [PATCH] fix disappearing avatar --- panda/src/chan/movingPartMatrix.cxx | 66 ++++++++++++++--------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/panda/src/chan/movingPartMatrix.cxx b/panda/src/chan/movingPartMatrix.cxx index d3e5c867d8..b82c9dfcdd 100644 --- a/panda/src/chan/movingPartMatrix.cxx +++ b/panda/src/chan/movingPartMatrix.cxx @@ -114,8 +114,8 @@ get_blend_value(const PartBundle *root) { case PartBundle::BT_linear: { // An ordinary, linear blend. - _value = 0.0f; - float net = 0.0f; + LMatrix4f net_value = LMatrix4f::zeros_mat(); + float net_effect = 0.0f; PartBundle::ChannelBlend::const_iterator cbi; for (cbi = cdata->_blend.begin(); cbi != cdata->_blend.end(); ++cbi) { @@ -132,25 +132,25 @@ get_blend_value(const PartBundle *root) { if (!cdata->_frame_blend_flag) { // Hold the current frame until the next one is ready. - _value += v * effect; + net_value += v * effect; } else { // Blend between successive frames. float frac = (float)control->get_frac(); - _value += v * (effect * (1.0f - frac)); + net_value += v * (effect * (1.0f - frac)); channel->get_value(control->get_next_frame(), v); - _value += v * (effect * frac); + net_value += v * (effect * frac); } - net += effect; + net_effect += effect; } } - if (net == 0.0f) { + if (net_effect == 0.0f) { if (restore_initial_pose) { _value = _initial_value; } } else { - _value /= net; + _value = net_value / net_effect; } } break; @@ -163,10 +163,10 @@ get_blend_value(const PartBundle *root) { // artificially-introduced scales, and then reapply the // scales and shears. - _value = 0.0f; + LMatrix4f net_value = LMatrix4f::zeros_mat(); LVecBase3f scale(0.0f, 0.0f, 0.0f); LVecBase3f shear(0.0f, 0.0f, 0.0f); - float net = 0.0f; + float net_effect = 0.0f; PartBundle::ChannelBlend::const_iterator cbi; for (cbi = cdata->_blend.begin(); cbi != cdata->_blend.end(); ++cbi) { @@ -189,14 +189,14 @@ get_blend_value(const PartBundle *root) { if (!cdata->_frame_blend_flag) { // Hold the current frame until the next one is ready. - _value += v * effect; + net_value += v * effect; scale += iscale * effect; shear += ishear * effect; } else { // Blend between successive frames. float frac = (float)control->get_frac(); float e0 = effect * (1.0f - frac); - _value += v * e0; + net_value += v * e0; scale += iscale * e0; shear += ishear * e0; @@ -205,28 +205,28 @@ get_blend_value(const PartBundle *root) { channel->get_scale(next_frame, iscale); channel->get_shear(next_frame, ishear); float e1 = effect * frac; - _value += v * e1; + net_value += v * e1; scale += iscale * e1; shear += ishear * e1; } - net += effect; + net_effect += effect; } } - if (net == 0.0f) { + if (net_effect == 0.0f) { if (restore_initial_pose) { _value = _initial_value; } } else { - _value /= net; - scale /= net; - shear /= net; + net_value /= net_effect; + scale /= net_effect; + shear /= net_effect; // Now rebuild the matrix with the correct scale values. LVector3f false_scale, false_shear, hpr, translate; - decompose_matrix(_value, false_scale, false_shear, hpr, translate); + decompose_matrix(net_value, false_scale, false_shear, hpr, translate); compose_matrix(_value, scale, shear, hpr, translate); } } @@ -239,7 +239,7 @@ get_blend_value(const PartBundle *root) { LVecBase3f hpr(0.0f, 0.0f, 0.0f); LVecBase3f pos(0.0f, 0.0f, 0.0f); LVecBase3f shear(0.0f, 0.0f, 0.0f); - float net = 0.0f; + float net_effect = 0.0f; PartBundle::ChannelBlend::const_iterator cbi; for (cbi = cdata->_blend.begin(); cbi != cdata->_blend.end(); ++cbi) { @@ -288,20 +288,20 @@ get_blend_value(const PartBundle *root) { pos += ipos * e1; shear += ishear * e1; } - net += effect; + net_effect += effect; } } - if (net == 0.0f) { + if (net_effect == 0.0f) { if (restore_initial_pose) { _value = _initial_value; } } else { - scale /= net; - hpr /= net; - pos /= net; - shear /= net; + scale /= net_effect; + hpr /= net_effect; + pos /= net_effect; + shear /= net_effect; compose_matrix(_value, scale, shear, hpr, pos); } @@ -316,7 +316,7 @@ get_blend_value(const PartBundle *root) { LQuaternionf quat(0.0f, 0.0f, 0.0f, 0.0f); LVecBase3f pos(0.0f, 0.0f, 0.0f); LVecBase3f shear(0.0f, 0.0f, 0.0f); - float net = 0.0f; + float net_effect = 0.0f; PartBundle::ChannelBlend::const_iterator cbi; for (cbi = cdata->_blend.begin(); cbi != cdata->_blend.end(); ++cbi) { @@ -367,20 +367,20 @@ get_blend_value(const PartBundle *root) { pos += ipos * e1; shear += ishear * e1; } - net += effect; + net_effect += effect; } } - if (net == 0.0f) { + if (net_effect == 0.0f) { if (restore_initial_pose) { _value = _initial_value; } } else { - scale /= net; - quat /= net; - pos /= net; - shear /= net; + scale /= net_effect; + quat /= net_effect; + pos /= net_effect; + shear /= net_effect; // There should be no need to normalize the quaternion, // assuming all of the input quaternions were already