Changeset 15 in flair-src for trunk/lib/FlairSimulator/src/Man.cpp
- Timestamp:
- 04/08/16 15:40:57 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/FlairSimulator/src/Man.cpp
r10 r15 34 34 using namespace flair::gui; 35 35 36 namespace flair 37 { 38 namespace simulator 39 { 36 namespace flair { 37 namespace simulator { 40 38 41 Man::Man(const Simulator * parent,std::string name): Model(parent,name)42 { 43 node = getGui()->getSceneManager()->addAnimatedMeshSceneNode(getGui()->getMesh("ninja.b3d"),getSceneNode(),-1,44 vector3df(0,0,0),vector3df(90,0,90),vector3df(10,10,10));39 Man::Man(const Simulator *parent, std::string name) : Model(parent, name) { 40 node = getGui()->getSceneManager()->addAnimatedMeshSceneNode( 41 getGui()->getMesh("ninja.b3d"), getSceneNode(), -1, vector3df(0, 0, 0), 42 vector3df(90, 0, 90), vector3df(10, 10, 10)); 45 43 46 47 48 49 44 node->setFrameLoop(0, 13); 45 node->setAnimationSpeed(0); 46 node->getMaterial(0).NormalizeNormals = true; 47 node->getMaterial(0).Lighting = false; 50 48 51 getCamera()->setPositionOffset(vector3df(0,0,100));52 getCamera()->setTargetOffset(vector3df(0,0,100));49 getCamera()->setPositionOffset(vector3df(0, 0, 100)); 50 getCamera()->setTargetOffset(vector3df(0, 0, 100)); 53 51 54 setTriangleSelector(getGui()->getSceneManager()->createTriangleSelector(node)); 55 Box()->addInternalBox(node->getTransformedBoundingBox()); 52 setTriangleSelector( 53 getGui()->getSceneManager()->createTriangleSelector(node)); 54 Box()->addInternalBox(node->getTransformedBoundingBox()); 56 55 57 Tab *setup_tab=new Tab(GetTabWidget(),"model"); 58 t_speed=new DoubleSpinBox(setup_tab->NewRow(),"translational speed (m/s):",0,5,0.1); 59 r_speed=new DoubleSpinBox(setup_tab->NewRow(),"rotational speed (deg/s):",0,180,10); 56 Tab *setup_tab = new Tab(GetTabWidget(), "model"); 57 t_speed = new DoubleSpinBox(setup_tab->NewRow(), "translational speed (m/s):", 58 0, 5, 0.1); 59 r_speed = new DoubleSpinBox(setup_tab->NewRow(), "rotational speed (deg/s):", 60 0, 180, 10); 60 61 } 61 62 62 Man::~Man() 63 { 63 Man::~Man() {} 64 64 65 void Man::CalcModel(void) { 66 // compute quaternion from W 67 // Quaternion derivative: dQ = 0.5*(Q*Qw) 68 Quaternion dQ = state[-1].Quat.GetDerivative(state[0].W); 69 70 // Quaternion integration 71 state[0].Quat = state[-1].Quat + dQ * dT(); 72 state[0].Quat.Normalize(); 73 74 Vector3D dir = state[0].Vel; 75 dir.Rotate(state[0].Quat); 76 state[0].Pos = state[-1].Pos + dT() * dir; 65 77 } 66 78 67 void Man::CalcModel(void) 68 { 69 // compute quaternion from W 70 // Quaternion derivative: dQ = 0.5*(Q*Qw) 71 Quaternion dQ=state[-1].Quat.GetDerivative(state[0].W); 79 bool Man::OnEvent(const SEvent &event) { 80 if (event.EventType != EET_KEY_INPUT_EVENT) 81 return false; 72 82 73 // Quaternion integration 74 state[0].Quat = state[-1].Quat +dQ*dT(); 75 state[0].Quat.Normalize(); 83 if (event.KeyInput.PressedDown == false) { 84 state[0].Vel.x = 0; 85 state[0].W.z = 0; 86 node->setAnimationSpeed(0); 87 } else { 88 switch (event.KeyInput.Key) { 89 case KEY_UP: 90 state[0].Vel.x = t_speed->Value(); 91 node->setAnimationSpeed(t_speed->Value() * 10.f); 92 break; 93 case KEY_DOWN: 94 state[0].Vel.x = -t_speed->Value(); 95 node->setAnimationSpeed(-t_speed->Value() * 10.f); 96 break; 97 case KEY_LEFT: 98 state[0].W.z = -Euler::ToRadian(r_speed->Value()); 99 node->setAnimationSpeed(r_speed->Value() * .15f); 100 break; 101 case KEY_RIGHT: 102 state[0].W.z = Euler::ToRadian(r_speed->Value()); 103 node->setAnimationSpeed(-r_speed->Value() * .15f); 104 break; 105 default: 106 return false; 107 break; 108 } 109 } 76 110 77 Vector3D dir=state[0].Vel; 78 dir.Rotate(state[0].Quat); 79 state[0].Pos=state[-1].Pos+dT()*dir; 111 return true; 80 112 } 81 113 82 bool Man::OnEvent(const SEvent& event) 83 { 84 if (event.EventType != EET_KEY_INPUT_EVENT) 85 return false; 114 size_t Man::dbtSize(void) const { return 6 * sizeof(float); } 86 115 87 if(event.KeyInput.PressedDown==false) 88 { 89 state[0].Vel.x=0; 90 state[0].W.z=0; 91 node->setAnimationSpeed(0); 92 } 93 else 94 { 95 switch(event.KeyInput.Key) 96 { 97 case KEY_UP: 98 state[0].Vel.x=t_speed->Value(); 99 node->setAnimationSpeed(t_speed->Value()*10.f); 100 break; 101 case KEY_DOWN: 102 state[0].Vel.x=-t_speed->Value(); 103 node->setAnimationSpeed(-t_speed->Value()*10.f); 104 break; 105 case KEY_LEFT: 106 state[0].W.z=-Euler::ToRadian(r_speed->Value()); 107 node->setAnimationSpeed(r_speed->Value()*.15f); 108 break; 109 case KEY_RIGHT: 110 state[0].W.z=Euler::ToRadian(r_speed->Value()); 111 node->setAnimationSpeed(-r_speed->Value()*.15f); 112 break; 113 default: 114 return false; 115 break; 116 } 117 } 118 119 return true; 116 void Man::WritedbtBuf(char *dbtbuf) { /* 117 float *buf=(float*)dbtbuf; 118 vector3df vect=node->getPosition(); 119 memcpy(buf,&vect.X,sizeof(float)); 120 buf++; 121 memcpy(buf,&vect.Y,sizeof(float)); 122 buf++; 123 memcpy(buf,&vect.Z,sizeof(float)); 124 buf++; 125 vect=node->getRotation(); 126 memcpy(buf,&vect.X,sizeof(float)); 127 buf++; 128 memcpy(buf,&vect.Y,sizeof(float)); 129 buf++; 130 memcpy(buf,&vect.Z,sizeof(float)); 131 buf++;*/ 120 132 } 121 133 122 size_t Man::dbtSize(void) const 123 { 124 return 6*sizeof(float); 125 } 126 127 void Man::WritedbtBuf(char* dbtbuf) 128 {/* 129 float *buf=(float*)dbtbuf; 130 vector3df vect=node->getPosition(); 131 memcpy(buf,&vect.X,sizeof(float)); 132 buf++; 133 memcpy(buf,&vect.Y,sizeof(float)); 134 buf++; 135 memcpy(buf,&vect.Z,sizeof(float)); 136 buf++; 137 vect=node->getRotation(); 138 memcpy(buf,&vect.X,sizeof(float)); 139 buf++; 140 memcpy(buf,&vect.Y,sizeof(float)); 141 buf++; 142 memcpy(buf,&vect.Z,sizeof(float)); 143 buf++;*/ 144 } 145 146 void Man::ReaddbtBuf(char* dbtbuf) 147 {/* 148 float *buf=(float*)dbtbuf; 149 vector3df vect; 150 memcpy(&vect.X,buf,sizeof(float)); 151 buf++; 152 memcpy(&vect.Y,buf,sizeof(float)); 153 buf++; 154 memcpy(&vect.Z,buf,sizeof(float)); 155 buf++; 156 node->setPosition(vect); 157 memcpy(&vect.X,buf,sizeof(float)); 158 buf++; 159 memcpy(&vect.Y,buf,sizeof(float)); 160 buf++; 161 memcpy(&vect.Z,buf,sizeof(float)); 162 buf++; 163 node->setRotation(vect); 164 node->setAnimationSpeed(2.f);*/ 134 void Man::ReaddbtBuf(char *dbtbuf) { /* 135 float *buf=(float*)dbtbuf; 136 vector3df vect; 137 memcpy(&vect.X,buf,sizeof(float)); 138 buf++; 139 memcpy(&vect.Y,buf,sizeof(float)); 140 buf++; 141 memcpy(&vect.Z,buf,sizeof(float)); 142 buf++; 143 node->setPosition(vect); 144 memcpy(&vect.X,buf,sizeof(float)); 145 buf++; 146 memcpy(&vect.Y,buf,sizeof(float)); 147 buf++; 148 memcpy(&vect.Z,buf,sizeof(float)); 149 buf++; 150 node->setRotation(vect); 151 node->setAnimationSpeed(2.f);*/ 165 152 } 166 153 167 154 } // end namespace simulator 168 155 } // end namespace flair 169 #endif // GL156 #endif // GL
Note:
See TracChangeset
for help on using the changeset viewer.