Revision 23246 trunk/libraries/libAnimation3D/src/main/java/com/iver/cit/gvsig/animation/interpolator/Interpolator3DSpherical.java
Interpolator3DSpherical.java | ||
---|---|---|
17 | 17 |
public class Interpolator3DSpherical implements IInterpolator { |
18 | 18 |
|
19 | 19 |
private IInterpolatorTimeFuntion function; |
20 |
private String description = "Interpolaci?n basada en encuadres";
|
|
20 |
private String description = "Interpolaci�n basada en encuadres";
|
|
21 | 21 |
private String name = "Interpolator3DSpherical"; |
22 | 22 |
|
23 | 23 |
public IKeyFrame interpolate(List kfList, int index, double time) { |
... | ... | |
27 | 27 |
return null; |
28 | 28 |
|
29 | 29 |
|
30 |
/*Interpolaci?n por cuaterniones.*/
|
|
30 |
/*Interpolaci�n por cuaterniones.*/
|
|
31 | 31 |
|
32 | 32 |
double newTime = this.getFuntion().interpolate(time); |
33 | 33 |
|
... | ... | |
57 | 57 |
|
58 | 58 |
newTime = (newTime-time1)/(time2-time1);//normalize time 0..1 |
59 | 59 |
|
60 |
Quat from = cam1.getInverseViewMatrix().getRotate(); |
|
61 |
Quat to = cam2.getInverseViewMatrix().getRotate(); |
|
62 | 60 |
|
63 |
// p1 eye |
|
64 |
Vec3 vec_eye1 = cam1.getEye(); |
|
65 |
// System.err.println("EYE 1 inicial " + vec_eye1.toString()); |
|
66 |
double module_vec_eye1 = vec_eye1.normalize(); |
|
61 |
Quat from = cam1.getViewMatrix().getRotate(); |
|
62 |
Quat to = cam2.getViewMatrix().getRotate(); |
|
67 | 63 |
|
68 |
// p2 eye
|
|
69 |
Vec3 vec_eye2 = cam2.getEye();
|
|
70 |
// System.err.println("EYE 2 inicial " + vec_eye2.toString()); |
|
71 |
double module_vec_eye2 = vec_eye2.normalize();
|
|
72 |
|
|
64 |
Vec3 trans1 = cam1.getViewMatrix().getTrans();
|
|
65 |
Vec3 trans2 = cam2.getViewMatrix().getTrans();
|
|
66 |
|
|
67 |
Vec3 new_trans = vec3LinearInterpolate(trans1, trans2, newTime);
|
|
68 |
Matrix m1 = Matrix.translate(new_trans); |
|
73 | 69 |
Quat q = sphericalInterpolate(from, to, newTime); |
74 | 70 |
Matrix m = Matrix.rotate(q); |
75 |
Vec3 new_eye = Matrix.transform3x3(new Vec3(0,0,1), m); |
|
76 |
new_eye = new_eye.escalarProduct( |
|
77 |
doubleInterpolate(module_vec_eye1, module_vec_eye2, newTime)); |
|
78 |
// System.err.println("NEW EYE " + new_eye.toString()); |
|
71 |
Matrix m2 = m.prod(m1); |
|
79 | 72 |
|
80 |
m.invert(m); |
|
81 | 73 |
|
82 |
Camera c = new Camera(); |
|
83 |
c.setViewMatrix(m); |
|
84 |
c.setEye(new_eye); |
|
85 | 74 |
|
75 |
|
|
76 |
|
|
77 |
|
|
78 |
|
|
79 |
|
|
80 |
Camera c = new Camera(); |
|
81 |
c.setViewMatrix(m2); |
|
82 |
|
|
86 | 83 |
ProjectCamera pe = new ProjectCamera(); |
87 | 84 |
pe.setCamera(c); |
88 | 85 |
KF.setName("temporal_keyframe"); |
... | ... | |
114 | 111 |
return new Vec3(from); |
115 | 112 |
return from.sum(to.sub(from).escalarProduct(time)); |
116 | 113 |
} |
117 |
|
|
114 |
|
|
118 | 115 |
public IInterpolatorTimeFuntion getFuntion() { |
119 | 116 |
return this.function; |
120 | 117 |
} |
Also available in: Unified diff