absence_thelab

annotate src/3deng/motion.cpp @ 0:1cffe3409164

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 23 Oct 2014 01:46:07 +0300
parents
children
rev   line source
nuclear@0 1 #include "motion.h"
nuclear@0 2
nuclear@0 3 MotionController::MotionController() {
nuclear@0 4 memset(this, 0, sizeof(MotionController));
nuclear@0 5 }
nuclear@0 6
nuclear@0 7 void MotionController::SetTranslation(float (*xtrans)(float), float (*ytrans)(float), float (*ztrans)(float), float ScaleInput) {
nuclear@0 8 XTranslation = xtrans;
nuclear@0 9 YTranslation = ytrans;
nuclear@0 10 ZTranslation = ytrans;
nuclear@0 11 ScaleInputTrans = ScaleInput;
nuclear@0 12 }
nuclear@0 13
nuclear@0 14 void MotionController::SetRotation(float (*xrot)(float), float (*yrot)(float), float (*zrot)(float), float ScaleInput) {
nuclear@0 15 XRotation = xrot;
nuclear@0 16 YRotation = yrot;
nuclear@0 17 ZRotation = zrot;
nuclear@0 18 ScaleInputRot = ScaleInput;
nuclear@0 19 }
nuclear@0 20
nuclear@0 21 void MotionController::SetScaling(float (*xscale)(float), float (*yscale)(float), float (*zscale)(float), float ScaleInput) {
nuclear@0 22 XScaling = xscale;
nuclear@0 23 YScaling = yscale;
nuclear@0 24 ZScaling = zscale;
nuclear@0 25 ScaleInputScale = ScaleInput;
nuclear@0 26 }
nuclear@0 27
nuclear@0 28 void MotionController::SetPath(const Curve &path) {
nuclear@0 29 FollowPath = true;
nuclear@0 30 // TODO
nuclear@0 31 }
nuclear@0 32
nuclear@0 33 const Matrix4x4 &MotionController::GetTransformation(float t) {
nuclear@0 34 MotionXForm.ResetIdentity();
nuclear@0 35
nuclear@0 36 if(FollowPath) {
nuclear@0 37 // TODO
nuclear@0 38 } else {
nuclear@0 39 float tt = t * ScaleInputTrans;
nuclear@0 40 float tr = t * ScaleInputRot;
nuclear@0 41 float ts = t * ScaleInputScale;
nuclear@0 42 MotionXForm.Scale(XScaling ? XScaling(tt) : 0, YScaling ? YScaling(tt) : 0, ZScaling ? ZScaling(tt) : 0);
nuclear@0 43 MotionXForm.Rotate(XRotation ? XRotation(tr) : 0, YRotation ? YRotation(tr) : 0, ZRotation ? ZRotation(tr) : 0);
nuclear@0 44 MotionXForm.Translate(XTranslation ? XTranslation(ts) : 0, YTranslation ? YTranslation(ts) : 0, ZTranslation ? ZTranslation(ts) : 0);
nuclear@0 45 }
nuclear@0 46
nuclear@0 47 return MotionXForm;
nuclear@0 48 }
nuclear@0 49
nuclear@0 50