画像も3Dモデルも同じ要領で移動・回転・拡大縮小ができる。
そのためにはベクトルをちょっとだけ理解する必要がある。
位置や向き、拡大率はXMFLOAT3構造体で扱う。
XMFLOAT3は x, y, z の三つの値がセットになったもの。
XMFLOAT3 f;
f.x = 10.0f;
f.y = 5.0f;
f.z = 3.0f;
また、上と同じものを次のように書くこともできる。
XMFLOAT3 f = XMFLOAT3(10.0f, 5.0f, 3.0f);
すべてのゲームオブジェクトはXMFLOAT3型のtransform_.position_という変数を持っていて、これがそのオブジェクトの現在の位置を表す。
例えば、プレイヤーを原点(世界の中心)から見て右に10のところに移動させたいなら、Playerクラスの中で次のように書けばいい。
transform_.position_.x = 10;
transform_.position_.y = 0;
transform_.position_.z = 0;
または
transform_.position_ = XMFLOAT3(10, 0, 0);
なお現在の位置から右に2、上に1移動させたい場合は
transform_.position_.x += 2;
transform_.position_.y += 1;
と書けばよい。
キャラが向いている方向に移動・・・とかになると、もう少しベクトル(と行列)の勉強が必要になる。
すべてのゲームオブジェクトはXMFLOAT3型のtransform_.rotate_という変数を持っていて、これがそのオブジェクトの現在の向きを表す。
transform_.rotate_.xはX軸で何度傾いているか、transform_.rotate_.yはY軸で何度傾いているか、transform_.rotate_.zはZ軸で何度傾いているかを表している。
例えば、コマのように回転させたいのであれば、Update関数内で次のように書けばよい。
transform_.rotate_.y += 5.0f; // 5°ずつ回転
すべてのゲームオブジェクトはXMFLOAT3型のtransform_.scale_という変数を持っていて、これがそのオブジェクトの現在の拡大率を表す。
当然、デフォルトではxyzすべて1になっている。
例えば横を2倍、縦を半分、奥行きをそのままにしたいのであれば次のように書く。
transform_.scale_.x = 2.0f;
transform_.scale_.y = 0.5f;
transform_.scale_.z = 1.0f;
または
transform_.scale_ = XMFLOAT3(2.0f, 0.5f, 1.0f);