Changeset 3973 in orxonox.OLD for orxonox/trunk/src/util/animation/animation3d.cc
- Timestamp:
- Apr 26, 2005, 1:55:47 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/trunk/src/util/animation/animation3d.cc
r3971 r3973 42 42 this->nextKeyFrame = tmpKeyFrame; 43 43 44 this->animFunc = &Animation3D::linear; 44 this->animFuncMov = &Animation3D::mLinear; 45 this->animFuncRot = &Animation3D::rLinear; 45 46 } 46 47 … … 72 73 this->nextKeyFrame = keyFrameList->nextElement(keyFrameList->firstElement()); 73 74 this->localTime = 0.0; 74 this->setAnimFunc(this->currentKeyFrame->animFunc); 75 this->setAnimFuncMov(this->currentKeyFrame->animFuncMov); 76 this->setAnimFuncRot(this->currentKeyFrame->animFuncRot); 75 77 } 76 78 … … 82 84 \param animFunc The function to animate between this keyFrame and the next one 83 85 */ 84 void Animation3D::addKeyFrame(Vector position, Quaternion direction, float duration, ANIM_FUNCTION animFunc )86 void Animation3D::addKeyFrame(Vector position, Quaternion direction, float duration, ANIM_FUNCTION animFuncMov, ANIM_FUNCTION animFuncRot) 85 87 { 86 88 // some small check … … 94 96 { 95 97 tmpKeyFrame = this->keyFrameList->firstElement(); 96 this->setAnimFunc(animFunc); 98 this->setAnimFuncMov(animFuncMov); 99 this->setAnimFuncRot(animFuncRot); 97 100 } 98 101 else … … 108 111 tmpKeyFrame->direction = direction; 109 112 tmpKeyFrame->duration = duration; 110 tmpKeyFrame->animFunc = animFunc; 113 tmpKeyFrame->animFuncMov = animFuncMov; 114 tmpKeyFrame->animFuncRot = animFuncRot; 111 115 this->keyFrameCount++; 112 116 } 117 118 113 119 114 120 /** … … 130 136 this->handleInfinity(); 131 137 this->nextKeyFrame = this->keyFrameList->nextElement(this->currentKeyFrame); 132 this->setAnimFunc(this->currentKeyFrame->animFunc); 138 this->setAnimFuncMov(this->currentKeyFrame->animFuncMov); 139 this->setAnimFuncRot(this->currentKeyFrame->animFuncRot); 133 140 } 134 141 /* now animate it */ 135 (this->*animFunc)(this->localTime); 136 } 137 } 138 139 140 /** 141 \brief Sets The kind of Animation between this keyframe and the next one 142 (this->*animFuncMov)(this->localTime); 143 (this->*animFuncRot)(this->localTime); 144 } 145 } 146 147 148 /*==Movement Section==========================================================*/ 149 150 /** 151 \brief Sets The kind of movment Animation between this keyframe and the next one 142 152 \param animFunc The Type of Animation to set 143 153 */ 144 void Animation3D::setAnimFunc (ANIM_FUNCTION animFunc)145 { 146 switch (animFunc )154 void Animation3D::setAnimFuncMov(ANIM_FUNCTION animFuncMov) 155 { 156 switch (animFuncMov) 147 157 { 148 158 default: 149 159 case ANIM_CONSTANT: 150 this->animFunc = &Animation3D::constant;160 this->animFuncMov = &Animation3D::mConstant; 151 161 break; 152 162 case ANIM_LINEAR: 153 this->animFunc = &Animation3D::linear;163 this->animFuncMov = &Animation3D::mLinear; 154 164 break; 155 165 case ANIM_SINE: 156 this->animFunc = &Animation3D::sine;166 this->animFuncMov = &Animation3D::mSine; 157 167 break; 158 168 case ANIM_COSINE: 159 this->animFunc = &Animation3D::cosine;169 this->animFuncMov = &Animation3D::mCosine; 160 170 break; 161 171 case ANIM_EXP: 162 this->animFunc = &Animation3D::exp;172 this->animFuncMov = &Animation3D::mExp; 163 173 break; 164 174 case ANIM_NEG_EXP: 165 this->animFunc = &Animation3D::negExp;175 this->animFuncMov = &Animation3D::mNegExp; 166 176 this->expFactor = -1.0 / this->currentKeyFrame->duration * logf(DELTA_X_3D); 167 177 break; 168 178 case ANIM_QUADRATIC: 169 this->animFunc = &Animation3D::quadratic;179 this->animFuncMov = &Animation3D::mQuadratic; 170 180 break; 171 181 case ANIM_RANDOM: 172 this->animFunc = &Animation3D::random; 173 break; 174 } 175 } 182 this->animFuncMov = &Animation3D::mRandom; 183 break; 184 } 185 } 186 187 176 188 177 189 /** … … 179 191 \param timePassed The time passed since this Keyframe began 180 192 */ 181 void Animation3D:: constant(float timePassed) const193 void Animation3D::mConstant(float timePassed) const 182 194 { 183 195 this->object->setRelCoor(this->currentKeyFrame->position); … … 197 209 \todo implement also do this for direction 198 210 */ 199 void Animation3D:: linear(float timePassed) const211 void Animation3D::mLinear(float timePassed) const 200 212 { 201 213 this->object->setRelCoor(this->currentKeyFrame->position + … … 215 227 \todo implement 216 228 */ 217 void Animation3D:: sine(float timePassed) const229 void Animation3D::mSine(float timePassed) const 218 230 { 219 231 if( timePassed < this->currentKeyFrame->duration/2.0) … … 232 244 \todo implement 233 245 */ 234 void Animation3D:: cosine(float timePassed) const246 void Animation3D::mCosine(float timePassed) const 235 247 { 236 248 this->object->setRelCoor( this->nextKeyFrame->position - … … 250 262 \param timePassed The time passed since this Keyframe began 251 263 */ 252 void Animation3D:: exp(float timePassed) const264 void Animation3D::mExp(float timePassed) const 253 265 { 254 266 PRINTF(0)("no exp animation3d defined\n"); 255 this-> linear(timePassed);267 this->mLinear(timePassed); 256 268 } 257 269 … … 260 272 \param timePassed The time passed since this Keyframe began 261 273 */ 262 void Animation3D:: negExp(float timePassed) const274 void Animation3D::mNegExp(float timePassed) const 263 275 { 264 276 this->object->setRelCoor( this->currentKeyFrame->position + … … 274 286 \todo implement 275 287 */ 276 void Animation3D:: quadratic(float timePassed) const288 void Animation3D::mQuadratic(float timePassed) const 277 289 { 278 290 PRINTF(0)("no quadratic animation3d defined\n"); 279 this-> linear(timePassed);291 this->mLinear(timePassed); 280 292 } 281 293 … … 284 296 \param timePassed The time passed since this Keyframe began 285 297 */ 286 void Animation3D:: random(float timePassed) const298 void Animation3D::mRandom(float timePassed) const 287 299 { 288 300 this->object->setRelCoor(this->currentKeyFrame->position + … … 291 303 (this->nextKeyFrame->direction - this->currentKeyFrame->direction)* (float)rand()/(float)RAND_MAX); 292 304 } 305 306 307 /*==Rotation Section==========================================================*/ 308 309 310 /** 311 \brief Sets The kind of rotation Animation between this keyframe and the next one 312 \param animFunc The Type of Animation to set 313 */ 314 void Animation3D::setAnimFuncRot(ANIM_FUNCTION animFuncRot) 315 { 316 switch (animFuncRot) 317 { 318 default: 319 case ANIM_CONSTANT: 320 this->animFuncRot = &Animation3D::rConstant; 321 break; 322 case ANIM_LINEAR: 323 this->animFuncRot = &Animation3D::rLinear; 324 break; 325 case ANIM_SINE: 326 this->animFuncRot = &Animation3D::rSine; 327 break; 328 case ANIM_COSINE: 329 this->animFuncRot = &Animation3D::rCosine; 330 break; 331 case ANIM_EXP: 332 this->animFuncRot = &Animation3D::rExp; 333 break; 334 case ANIM_NEG_EXP: 335 this->animFuncRot = &Animation3D::rNegExp; 336 break; 337 case ANIM_QUADRATIC: 338 this->animFuncRot = &Animation3D::rQuadratic; 339 break; 340 case ANIM_RANDOM: 341 this->animFuncRot = &Animation3D::rRandom; 342 break; 343 } 344 } 345 346 347 /** 348 \brief stays at the value of the currentKeyFrame 349 \param timePassed The time passed since this Keyframe began 350 */ 351 void Animation3D::rConstant(float timePassed) const 352 { 353 } 354 355 /** 356 \brief linear interpolation between this keyframe and the next one 357 \param timePassed The time passed since this Keyframe began 358 359 \todo implement also do this for direction 360 */ 361 void Animation3D::rLinear(float timePassed) const 362 { 363 this->object->setRelDir(quatSlerp( this->nextKeyFrame->direction, 364 this->currentKeyFrame->direction, 365 timePassed/this->currentKeyFrame->duration) ); 366 } 367 368 /** 369 \brief a Sinusodial Interpolation between this keyframe and the next one 370 \param timePassed The time passed since this Keyframe began 371 372 \todo implement 373 */ 374 void Animation3D::rSine(float timePassed) const 375 { 376 } 377 378 379 /** 380 \brief a cosine interpolation between this keyframe and the next one 381 \param timePassed The time passed since this Keyframe began 382 383 \todo implement 384 */ 385 void Animation3D::rCosine(float timePassed) const 386 { 387 } 388 389 390 /* 391 return ((this->nextKeyFrame->value + this->currentKeyFrame->value) + 392 (this->currentKeyFrame->value - this->nextKeyFrame->value) * 393 cos( M_PI * timePassed / this->currentKeyFrame->duration))/2; 394 */ 395 396 /** 397 \brief an exponential interpolation between this keyframe and the next one 398 \param timePassed The time passed since this Keyframe began 399 */ 400 void Animation3D::rExp(float timePassed) const 401 { 402 403 } 404 405 /** 406 \brief a negative exponential interpolation between this keyframe and the next one 407 \param timePassed The time passed since this Keyframe began 408 */ 409 void Animation3D::rNegExp(float timePassed) const 410 { 411 } 412 413 414 /** 415 \brief a quadratic interpolation between this keyframe and the next one 416 \param timePassed The time passed since this Keyframe began 417 418 \todo implement 419 */ 420 void Animation3D::rQuadratic(float timePassed) const 421 { 422 } 423 424 /** 425 \brief some random animation (fluctuating) 426 \param timePassed The time passed since this Keyframe began 427 */ 428 void Animation3D::rRandom(float timePassed) const 429 { 430 }
Note: See TracChangeset
for help on using the changeset viewer.