572 |
coord_t tagPositionNext = [_data tagPosition: 0 |
coord_t tagPositionNext = [_data tagPosition: 0 |
573 |
inFrame: frameNext]; |
inFrame: frameNext]; |
574 |
Quaternion *quat = |
Quaternion *quat = |
575 |
[[Quaternion alloc] initWithMatrix: m3x32m4x4(tagMatrix)]; |
[[Quaternion alloc] initWithRotation: m3x32m4x4(tagMatrix)]; |
576 |
Quaternion *quatNext = |
Quaternion *quatNext = |
577 |
[[Quaternion alloc] initWithMatrix: m3x32m4x4(tagMatrixNext)]; |
[[Quaternion alloc] initWithRotation: m3x32m4x4(tagMatrixNext)]; |
578 |
|
|
579 |
Quaternion *quatInterpolated = [[Quaternion alloc] init]; |
Quaternion *quatInterpolated = [[Quaternion alloc] init]; |
580 |
|
|
581 |
[quatInterpolated slerp: quat |
[quatInterpolated slerp: quat |
582 |
with: quatNext |
with: quatNext |
583 |
accordingTime: time]; |
accordingTime: time]; |
584 |
|
|
585 |
float * matrix = [quatInterpolated createMatrix]; |
Matrix rotation; |
586 |
|
[quatInterpolated convertToRotation: rotation]; |
587 |
|
|
588 |
matrix[12] = tagPosition.x + time * (tagPositionNext.x - tagPosition.x); |
rotation[12] = tagPosition.x + time * (tagPositionNext.x - tagPosition.x); |
589 |
matrix[13] = tagPosition.y + time * (tagPositionNext.y - tagPosition.y); |
rotation[13] = tagPosition.y + time * (tagPositionNext.y - tagPosition.y); |
590 |
matrix[14] = tagPosition.z + time * (tagPositionNext.z - tagPosition.z); |
rotation[14] = tagPosition.z + time * (tagPositionNext.z - tagPosition.z); |
591 |
|
|
592 |
glMultMatrixf (matrix); |
glMultMatrixf (rotation); |
593 |
} |
} |
594 |
|
|
595 |
/** |
/** |