public static Vector3 ComplementTranslate(カメラフレーム frame1, カメラフレーム frame2, Vector3 progress) { return(new Vector3( Lerp(frame1.位置.X, frame2.位置.X, progress.X), Lerp(frame1.位置.Y, frame2.位置.Y, progress.Y), Lerp(frame1.位置.Z, frame2.位置.Z, progress.Z))); }
public static Quaternion ComplementRotateQuaternion(カメラフレーム frame1, カメラフレーム frame2, float progress) { var q1 = Quaternion.RotationYawPitchRoll(frame1.回転.Y, frame1.回転.X, frame1.回転.Z); var q2 = Quaternion.RotationYawPitchRoll(frame2.回転.Y, frame2.回転.X, frame2.回転.Z); return(Quaternion.Slerp(q1, q2, progress)); }
private void _フレームを更新する(カメラフレーム cameraFrame1, カメラフレーム cameraFrame2, カメラ camera, 射影 projection, float 進行度合い0to1) { float ProgX = cameraFrame1.ベジェ曲線[0].横位置Pxに対応する縦位置Pyを返す(進行度合い0to1); float ProgY = cameraFrame1.ベジェ曲線[1].横位置Pxに対応する縦位置Pyを返す(進行度合い0to1); float ProgZ = cameraFrame1.ベジェ曲線[2].横位置Pxに対応する縦位置Pyを返す(進行度合い0to1); float ProgR = cameraFrame1.ベジェ曲線[3].横位置Pxに対応する縦位置Pyを返す(進行度合い0to1); float ProgL = cameraFrame1.ベジェ曲線[4].横位置Pxに対応する縦位置Pyを返す(進行度合い0to1); float ProgP = cameraFrame1.ベジェ曲線[5].横位置Pxに対応する縦位置Pyを返す(進行度合い0to1); // カメラ(ビュー) camera.移動する( 注視点からの距離: CGHelper.Lerp(cameraFrame1.距離, cameraFrame2.距離, ProgL), 注視点の位置: CGHelper.ComplementTranslate(cameraFrame1, cameraFrame2, new Vector3(ProgX, ProgY, ProgZ)), 回転: CGHelper.ComplementRotateQuaternion(cameraFrame1, cameraFrame2, ProgR)); // 射影 float angle = CGHelper.Lerp(cameraFrame1.視野角, cameraFrame2.視野角, ProgP); projection.視野角rad = CGHelper.ToRadians(angle); }