Statistics
| Revision:

svn-gvsig-desktop / import / ext3D / branches / ext3D_v1.1 / extAnimation3D / src / com / iver / cit / gvsig / animation / Interpolator3DFlat.java @ 15466

History | View | Annotate | Download (3.28 KB)

1
package com.iver.cit.gvsig.animation;
2

    
3
import java.util.List;
4

    
5
import com.iver.ai2.gvsig3d.camera.ProjectCamera;
6
import com.iver.ai2.gvsig3d.gui.View3D;
7
import com.iver.cit.gvsig.animation.keyframe.IKeyFrame;
8
import com.iver.cit.gvsig.animation.keyframe.interpolator.IInterpolator;
9
import com.iver.cit.gvsig.animation.keyframe.interpolator.IInterpolatorFuntion;
10

    
11
import es.upv.ai2.libjosg.Vec3;
12
import es.upv.ai2.libjosg.viewer.Camera;
13

    
14
public class Interpolator3DFlat implements IInterpolator {
15

    
16
        public View3D view;
17
        private IInterpolatorFuntion funtion;
18

    
19
        public IKeyFrame interpolate(List kfList, int index, double time) {
20
                KeyFrame3DFlat KF = new KeyFrame3DFlat();
21

    
22
                if (kfList == null)
23
                        return null;
24

    
25
                if (this.view == null)
26
                        return null;
27

    
28
                
29
                // convert the time in the new time using funtion
30
                double newTime = this.getFuntion().interpolate(time);
31
                
32
                switch (kfList.size()) {
33
                // this case when there are only has 2 keyframes
34
                case 2:
35
                        // getting the keyframes
36
                        KeyFrame3DFlat kf1 = (KeyFrame3DFlat) kfList.get(0);
37
                        KeyFrame3DFlat kf2 = (KeyFrame3DFlat) kfList.get(1);
38

    
39
                        if (index == 1) {
40
                                KeyFrame3DFlat kaux = kf1;
41
                                kf1 = kf2;
42
                                kf2 = kaux;
43
                        }
44

    
45
                        if ((kf1 == null) ||(kf2 == null))
46
                                return null;
47
                        ProjectCamera vp1 = (ProjectCamera) kf1.getAnimatedObject();
48
                        ProjectCamera vp2 = (ProjectCamera) kf2.getAnimatedObject();
49

    
50
                        // ViewPort vp = view.getMapControl().getViewPort();
51

    
52
                        Camera cam1 = vp1.getCamera();
53
                        Camera cam2 = vp2.getCamera();
54
                        double time1 = kf1.getTime();
55
                        double time2 = kf2.getTime();
56
                        
57
                        Vec3 eye = linearInterpolate(cam1.getEye(), cam2.getEye(), time1, time2, newTime);
58
                        Vec3 center = linearInterpolate(cam1.getCenter(), cam2.getCenter(), time1, time2, newTime);
59
//                        Vec3 center = new Vec3(eye.x(),eye.y(),0.0);
60
                        Vec3 up = linearInterpolate(cam1.getUp(), cam2.getUp(), time1, time2, newTime);
61
                
62
                        Camera newCamera = new Camera();
63
//                        newCamera.setViewByLookAt(eye, center, cam1.getUp());
64
                        newCamera.setViewByLookAt(eye, center, up);
65

    
66
                        ProjectCamera pe = new ProjectCamera();
67
                        pe.setCamera(newCamera);
68
                        KF.setName("temporal_keyframe");
69
                        // vp.setExtent(newExtent);
70
                        KF.setAnimatedObject(pe);
71
                        break;
72

    
73
                }
74

    
75
                return KF;
76
        }
77

    
78
        private double linearInterpolate(double minX, double minX2, double timePos,
79
                        double timePos2, double time) {
80
                // P1 + (P2-P1)*((t-t1)/(t2-t1))
81
                return (minX + (minX2 - minX)
82
                                * ((time - timePos) / (timePos2 - timePos)));
83
        }
84

    
85
        private Vec3 linearInterpolate(Vec3 minX, Vec3 minX2, double timePos,
86
                        double timePos2, double time) {
87

    
88
                Vec3 result = new Vec3();
89

    
90
                double ele1 = linearInterpolate(minX.x(), minX2.x(), timePos, timePos2,
91
                                time);
92
                double ele2 = linearInterpolate(minX.y(), minX2.y(), timePos, timePos2,
93
                                time);
94
                double ele3 = linearInterpolate(minX.z(), minX2.z(), timePos, timePos2,
95
                                time);
96

    
97
                result.setX(ele1);
98
                result.setY(ele2);
99
                result.setZ(ele3);
100
                return result;
101
        }
102

    
103
        public Object getAnimatedObject() {
104

    
105
                return this.view;
106
        }
107

    
108
        public void setAnimatedObject(Object ani) {
109
                this.view = (View3D) ani;
110

    
111
        }
112

    
113
        public IInterpolatorFuntion getFuntion() {
114
                return this.funtion;
115
        }
116

    
117
        public void setFuntion(IInterpolatorFuntion funtion) {
118
                this.funtion = funtion;
119
                
120
        }
121
}