前回 描画した戦車を移動させます。移動にともなう視界の移動もやってみます。

そのまえに戦車だけでなく地面も描画することにします。

あとはFloorオブジェクトを生成して描画処理をするだけです。

移動にチェックが入っているときは他の処理はしないで以下の処理だけおこないます。

↑ 前へ進む
↓ バックする
→ 右旋回
← 左旋回

まず現在の位置を管理するためのプロパティをつくります。

Tankクラスにも以下を追加します。

また[戦車の動きにカメラを連動させる]がチェックされているときは、戦車の動きにあわせてEyeX、EyeZ、TargetX、TargetZの値を変更します。この場合、戦車が表示されている位置と方向はかわらず、背景がかわるように見えます(その効果を確認するためチェック模様の地面を描画した)。

EyeX、EyeZ、TargetX、TargetZの値はどのように変更すればよいのでしょうか? 戦車のある位置を中心にEyeとTargetを回転すればよいことになります。いったん原点に平行移動して回転移動させ、もとの位置に平行移動させてもどします。

回転処理は一次変換を使っています。通常の一次変換は、x = Cos(θ) * x – Sin(θ) * y、y = Sin(θ) * x + Cos(θ) * yなのですが、座標軸の方向が違うので符号を逆にしています。