自機などを固定位置に描画させて、敵などは自機からの相対位置になるように描画したいときもあるかもしれません。そこで視界を設定するとき自機のつねに後ろ、距離も一定にして、自機を真後ろから追いかけるような描画をするプログラムを作成します。これは他のアプリケーションを作成するときに使い回しができるかもしれません。

まずは自機としてサイコロを描画します。1の目があるほうが前、6の目があるほうが後ろです。つねに後ろから見た様子を描画するので6の目しかみえません。

サイコロを描画する準備

これでサイコロを描画することはできるようになりました。次にサイコロを動かし、このサイコロを描画する方法を考えます。

サイコロの位置と回転状態を管理するためのプロパティを作成します。それから常に後方の一定の距離からみた状態を描画するわけですが、ここでは「後方の一定の距離」は6.0とします。

サイコロの位置や回転状態を変更するメソッドを作成します。「前にターゲットを移動させる」とはサイコロをみている人からみてサイコロを遠ざける方向です。Z座標のマイナス方向への移動を意味しています。

以下は一般的な初期設定です。

X,Y,Zプロパティ、RotateX,RotateY,RotateZプロパティが設定されたらあとは描画するだけです。

描画するときにサイコロだけでなく、X軸、Y軸、Z軸、XZ平面には格子状に黄色い線を描画しています。視界の設定はサイコロの真後ろなのでサイコロ自体は動きません。まわりに動かない格子模様を描画することで、どのような描画がされているのかわかりやすくなってくれればということで、このような処理をしています。

イベントハンドラ glControlEx1_Paint(object sender, PaintEventArgs e)のなかで視界の設定をおこなっています。

このとき単に後ろからサイコロを描画するだけであれば

これだけでかまいません。しかし自機には向きがあります。これだとサイコロを回転させると回転したサイコロが描画されます。

では視点を自機が向いている方向からみた後ろにするにはどうすればいいのでしょうか? そうなるとちょっと難しいです。おそらくこうなるのではないでしょうか?

あとはキー操作などでサイコロを移動、回転させ、正しく描画されているか確認します。つねにサイコロの後ろからの景色を描画するのでサイコロは中心から動かないようにみえます。また光源は一定なので、サイコロの1の目がある方向によって明るさが変動します。