Kaynağa Gözat

try to avoid introducing a scale when lerping hpr

David Rose 22 yıl önce
ebeveyn
işleme
b7f13c5309
1 değiştirilmiş dosya ile 40 ekleme ve 15 silme
  1. 40 15
      direct/src/interval/cLerpNodePathInterval.cxx

+ 40 - 15
direct/src/interval/cLerpNodePathInterval.cxx

@@ -185,48 +185,73 @@ priv_step(double t) {
     // computed, above.
     // computed, above.
     switch (_flags & (F_end_pos | F_end_hpr | F_end_scale)) {
     switch (_flags & (F_end_pos | F_end_hpr | F_end_scale)) {
     case F_end_pos:
     case F_end_pos:
-      transform = transform->set_pos(pos);
+      if (_other.is_empty()) {
+        _node.set_pos(pos);
+      } else {
+        _node.set_pos(_other, pos);
+      }
       break;
       break;
 
 
     case F_end_hpr:
     case F_end_hpr:
-      transform = transform->set_hpr(hpr);
+      if (_other.is_empty()) {
+        _node.set_hpr(hpr);
+      } else {
+        _node.set_hpr(_other, hpr);
+      }
       break;
       break;
 
 
     case F_end_scale:
     case F_end_scale:
-      transform = transform->set_scale(scale);
+      if (_other.is_empty()) {
+        _node.set_scale(scale);
+      } else {
+        _node.set_scale(_other, scale);
+      }
       break;
       break;
 
 
     case F_end_hpr | F_end_scale:
     case F_end_hpr | F_end_scale:
-      transform = TransformState::make_pos_hpr_scale(transform->get_pos(), hpr, scale);
+      if (_other.is_empty()) {
+        _node.set_hpr_scale(hpr, scale);
+      } else {
+        _node.set_hpr_scale(hpr, scale);
+      }
       break;
       break;
 
 
     case F_end_pos | F_end_hpr:
     case F_end_pos | F_end_hpr:
-      transform = TransformState::make_pos_hpr_scale(pos, hpr, transform->get_scale());
+      if (_other.is_empty()) {
+        _node.set_pos_hpr(pos, hpr);
+      } else {
+        _node.set_pos_hpr(_other, pos, hpr);
+      }
       break;
       break;
 
 
     case F_end_pos | F_end_scale:
     case F_end_pos | F_end_scale:
       if (transform->quat_given()) {
       if (transform->quat_given()) {
-        transform = TransformState::make_pos_quat_scale(pos, transform->get_quat(), scale);
+        if (_other.is_empty()) {
+          _node.set_pos_quat_scale(pos, transform->get_quat(), scale);
+        } else {
+          _node.set_pos_quat_scale(_other, pos, transform->get_quat(), scale);
+        }
       } else {
       } else {
-        transform = TransformState::make_pos_hpr_scale(pos, transform->get_hpr(), scale);
+        if (_other.is_empty()) {
+          _node.set_pos_hpr_scale(pos, transform->get_hpr(), scale);
+        } else {
+          _node.set_pos_hpr_scale(_other, pos, transform->get_hpr(), scale);
+        }
       }
       }
       break;
       break;
 
 
     case F_end_pos | F_end_hpr | F_end_scale:
     case F_end_pos | F_end_hpr | F_end_scale:
-      transform = TransformState::make_pos_hpr_scale(pos, hpr, scale);
+      if (_other.is_empty()) {
+        _node.set_pos_hpr_scale(pos, hpr, scale);
+      } else {
+        _node.set_pos_hpr_scale(_other, pos, hpr, scale);
+      }
       break;
       break;
 
 
     default:
     default:
       interval_cat.error()
       interval_cat.error()
         << "Internal error in CLerpNodePathInterval::priv_step().\n";
         << "Internal error in CLerpNodePathInterval::priv_step().\n";
     }
     }
-
-    // Now apply the new transform back to the node.
-    if (_other.is_empty()) {
-      _node.set_transform(transform);
-    } else {
-      _node.set_transform(_other, transform);
-    }
   }
   }
 
 
   if ((_flags & (F_end_color | F_end_color_scale)) != 0) {
   if ((_flags & (F_end_color | F_end_color_scale)) != 0) {