4 * License : The MIT License
5 * Copyright(c) 2011 MikuToga Partners
8 package jp.sourceforge.mikutoga.vmd.model;
10 import jp.sourceforge.mikutoga.math.MkPos3D;
11 import jp.sourceforge.mikutoga.vmd.AbstractNumbered;
16 * <p>カメラ-ターゲット間の距離は球座標(極座標)の動径に相当する。
17 * 通常はターゲットより手前に位置するカメラまでの距離が負の値で表される。
18 * カメラ位置がターゲットを突き抜けた場合は正の値もとりうる。
20 * <p>パースペクティブモードがOFFの場合、
21 * 画角は無視され遠近感処理が行われなくなる。(平行投影?)
23 public class CameraMotion extends AbstractNumbered {
25 private final MkPos3D cameraTarget = new MkPos3D();
26 private final PosCurve posCurve = new PosCurve();
28 private final CameraRotation cameraRotation = new CameraRotation();
29 private final BezierParam intpltRotation = new BezierParam();
32 private final BezierParam intpltRange = new BezierParam();
34 private boolean hasPerspective;
35 private int projectionAngle;
36 private final BezierParam intpltProjection = new BezierParam();
42 public CameraMotion(){
52 public MkPos3D getCameraTarget(){
53 return this.cameraTarget;
58 * @return ターゲット位置移動の補間情報
60 public PosCurve getTargetPosCurve(){
68 public CameraRotation getCameraRotation(){
69 return this.cameraRotation;
74 * @return カメラ回転の補間曲線情報
76 public BezierParam getIntpltRotation(){
77 return this.intpltRotation;
82 * @return カメラ-ターゲット間の距離
84 public float getRange(){
90 * @param range カメラ-ターゲット間の距離
92 public void setRange(float range){
98 * カメラ-ターゲット間距離の補間曲線情報を返す。
99 * @return カメラ-ターゲット間距離の補間曲線情報
101 public BezierParam getIntpltRange(){
102 return this.intpltRange;
107 * @return パースペクティブが有効ならtrue
109 public boolean hasPerspective(){
110 return this.hasPerspective;
115 * @param mode trueを渡すとパースペクティブが有効になる。
117 public void setPerspectiveMode(boolean mode){
118 this.hasPerspective = mode;
126 public int getProjectionAngle(){
127 return this.projectionAngle;
131 * 投影角度(スクリーン縦画角)を設定する。
132 * @param angle 投影角度(度数法)
134 public void setProjectionAngle(int angle){
135 this.projectionAngle = angle;
141 * @return スクリーン投射の補間曲線情報
143 public BezierParam getIntpltProjection(){
144 return this.intpltProjection;
149 * @return {@inheritDoc}
152 public String toString(){
153 StringBuilder result = new StringBuilder();
155 result.append("#").append(getFrameNumber()).append(' ');
156 result.append(this.cameraRotation);
157 result.append(" Rot-Bezier ")
158 .append(this.intpltRotation).append('\n');
160 result.append("range : ").append(this.range);
161 result.append(" Range-Bezier ").append(this.intpltRange).append('\n');
163 result.append("target-pos : ").append(this.cameraTarget).append('\n');
164 result.append(this.posCurve).append('\n');
166 result.append("perspective : ");
167 if(this.hasPerspective) result.append("ON");
168 else result.append("OFF");
171 result.append("projection angle : ").append(this.projectionAngle);
172 result.append("deg Bezier ").append(this.intpltProjection);
174 return result.toString();