===== イージング関数 =====
とりあえず、{{ :game-engineer:classes:2024:game-development-3:first-term:5:easefunction.h |ここ(EasingFunction.h)}}にあります。\\
名前空間はDirect3Dにぶっこんでますので、そこは自分の環境に合わせて自分で変更してください。\\
==== 使い方 ====
[[https://easings.net/ja|イージング関数チートシート]]、にある関数をあほみたいに全部実装してあります。\\
追加したいとか、変更したい人は、大した処理してるわけでもないのでファイルの中身見て自分で何とかしてください。\\
まず、前提としてイージングする値を2つ用意します(時間とか位置の場合が多いかな)。\\
この2つの値を0~1で正規化して、値も0~1で正規化して考えます。(元の値が0~50だったら、正規化して出てきた値に50かければいいよね!)\\
正規化については、[[https://zenn.dev/baroqueengine/books/a19140f2d9fc1a/viewer/1e4cc8|ここ]]を見て下さい。(zennまた見れなくなったからなぁ。。。)\\
あとは、イージング関数チートシートから、良い感じの動きになりそうなものを選んで、値を取得するだけです。\\
位置、速さ、スケールなど、いろんな値にかけてみると面白いです。\\
=== 呼び出し方 ===
**EaseFunc["関数名"](double ratio)**
で割合がratioの時の補間値が返ってきます。\\
"関数名"は、__イージング関数チートシートの関数名から"ease"をとったもの__です。\\
例:easeInSine なら InSine => EaseFunc["InSine"](double ratio)\\
イージング関数の使い方
#include "EasingFunction.h" //インクルードはしないとだめよ
using namespace Direct3D; //毎回Drect3D::を書くならいらない
double ratio = GetValue();//0~1まで増加していく値をゲットする関数(自分で作る)
double pos = EaseFunc["OutElastic"](ratio);
==== 実装例 ====
カウントダウンの画像を表示するときに、表示のサイズにイージング付けてみました。\\
その1、リニア通常表示の大きさを1として、サイズが、2からだんだん1になる(同じ変化速度で)もの。これが基本形になる。\\
{{ :game-engineer:classes:2024:game-development-3:first-term:5:linear.mp4?500 |}}
線形補間
その2、変化量に3次関数単調増加関数を使ったもの。2からだんだん1になるのは変わりないけど、ちょっと変化し方が変わってます。\\
{{ :game-engineer:classes:2024:game-development-3:first-term:5:easeincubic.mp4?500 |}}
easeInCubic
その3、変化量に指数関数を使ったもの。\\
{{ :game-engineer:classes:2024:game-development-3:first-term:5:easeinoutexpo.mp4?500 |}}
InOutExpo
その4、変化量に3次ベッツェ曲線をつかったもの。
{{ :game-engineer:classes:2024:game-development-3:first-term:5:easeinoutback.mp4?500 |}}
InOutBack
その5、弾性イージング関数による補間
{{ :game-engineer:classes:2024:game-development-3:first-term:5:inelastic.mp4?500 |}}
inElastic
==== 注意 ====
僕(イージング関数の気持ち)は、0~1の値しか食べられません。また、それ以外の値が入ってくることは想定していません。\\
その辺のエラーチェックは各自行ってね。\\