ページ 11

ソースコードの解説

Posted: 2011年7月31日(日) 15:57
by codec
以下のソースコードの解説をお願いします

コード:


//カメラ情報構造体
struct CAMERA
{
	float	angle_h;		//水平角度
	float	angle_v;		//垂直角度
	VECTOR	pos;		//カメラ座標
	VECTOR	target_pos;	//注視点座標
};


//カメラ初期化
CAMERA CameraInit()
{
	CAMERA cam;

	//カメラ初期水平角度
	cam.angle_h = PHI_F;	//180度

	//垂直角度は0度
	cam.angle_v = 0.0f;

	return cam;
}

//以下 WINAPI WinMain関数内のソースコードの一部,メインループの外にある

cam = CameraInit();

//カメラの注視点はプレイヤー座標から規定値分高い座標
cam.target_pos = VAdd(pc.pos, VGet( 0.0f, 100.0f, 0.0f));
                          


MATRIX RotZ, RotY;
		
//水平方向の回転はY軸回転
RotY = MGetRotY(cam.angle_h);
		
//垂直方向の回転はZ軸回転
RotZ = MGetRotZ(cam.angle_v);
		
cam.pos = VAdd( VTransform( VTransform(VGe(0.0f, 0.0f, -200.0f), RotZ ), RotY ), cam.target_pos);


DXライブラリです

ソースコード一番下にある

コード:

cam.pos = VAdd( VTransform( VTransform(VGe(0.0f, 0.0f, -200.0f), RotZ ), RotY ), cam.target_pos);
です

行列やベクトルも一通り学び、関数リファレンスも見たのですが、何をしているのかいまいち分かりません

多分、カメラ位置の初期化をしていると思うのですが……

詳しい解説をよろしくお願いたします

Re: ソースコードの解説

Posted: 2011年7月31日(日) 16:52
by chibago
どこまで理解できていらっしゃるのか分かりませんので、
既にご存知かもしれませんが、大まかにやっていることとしては、
カメラの向き(視線の方向ベクトル)と
注視点からカメラの位置を計算しているのだと思います。

ライブラリを存じませんので推測ですが、
MGetRotY、とMGetRotZ関数は回転演算用のマトリクスを生成
しているのではないでしょうか。

実際に演算しているのがVTransform関数だとおもいます。

演算対象となっているベクトルVGe(0.0f, 0.0f, -200.0f)
が視線ベクトルの基準となるものでこれを指定された
角度に回転することにより視線ベクトルを作成していると
思います。

200で決め打ちされていることより、カメラと注視点までの距離は
200に固定されているものとおもいます。

最後に視線ベクトルと注視点の位置ベクトルとの和で、カメラ位置ベクトル
を算出しているようです。そういうことですので、視線ベクトルは、
注視点からカメラ位置へ(直感的なイメージとは逆方法)と定義されているのではないでしょうか。