質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

1561閲覧

球面線形補間で、常に一定の速度で移動させる方法

blendegg

総合スコア81

0グッド

0クリップ

投稿2019/09/05 09:12

godotゲームエンジンについてです。

球面線形補間(slerp)で3dメッシュを回転させると、徐々に加速して最後はゆっくりと動くようになりますよね。山なりのようにです。

これを均等なスピードで回転させるにはどういう公式が必要でしょうか。
なんと調べたら良いかわからないです。

スピードに対して、何らかの値を加えると良いのはわかります。
経過時間が関係していることはわかります。

gdscript

1var spatial_outer 2 3#経過時間 4var currenttime = 0 5#移動にかかる時間 6var transitiontime = 5 7 8func _ready(): 9 spatial_outer = get_tree().get_root().get_node("Spatial/Spatial_outer") 10 11func _physics_process(delta): 12 13 if Input.is_key_pressed(KEY_UP): 14 #回転 15 var start = self.transform.basis 16 var end =spatial_outer.transform.basis 17 var result = start.slerp(end,currenttime/transitiontime) 18 self.transform.basis = Basis(result) 19 20 currenttime = currenttime + delta * 2 21 22 23 else: 24 currenttime = 0

start.slerp(end,currenttime/transitiontime)
と言う部分でslerpを使用しています。第一引数が終点で、第ニ引数は終点までの距離を1フレームあたり何%動かすかという指定だと思います。常に一定のパーセンテージだと終点までの距離が短くなるほど、動く距離が少なくなるということになります。
終盤に行くほどパーセンテージを増やせばいいということはわかります。

しかし、なぜ現在の時間/移動に要する時間
という式でパーセンテージを求められるのでしょうか。
難しい数学はわからないのですが、数学でいうとどのあたりの公式になるんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

godotというものは初耳だったので適当にググってみただけの知識ですが、

第ニ引数は終点までの距離を1フレームあたり何%動かすか

違うと思います。
始点と終点の間のどこに位置するかを表すパーセンテージだと思います。
始点を毎回更新しているように見えますが、これを最初の値で固定しておけばよいのではないでしょうか。

投稿2019/09/07 12:54

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問