[ create a new paste ] login | about

Link: http://codepad.org/PDFfVYw5    [ raw code | fork ]

C++, pasted on Nov 21:
// カメラクラス //
class C3DCamera{
	D3DXVECTOR3 vEyePt;
	D3DXVECTOR3 vLookatPt;
	D3DXVECTOR3 vUpVec;
	D3DXMATRIXA16 matView;
public:
	// カメラの初期姿勢をセットする
	// (モデルが(0,0,0)にある時のカメラ姿勢)
	// モデルが移動する場合は↓のGetViewMatrix()のパラメーターで移動する
	C3DCamera ( D3DXVECTOR3 eye, D3DXVECTOR3 look, D3DXVECTOR3 up )
		: vEyePt(eye),vLookatPt(look),vUpVec(up){
	}

	////////////////////////////////////////////////////////////
	// x,y,x		: 映したいモデルの移動座標
	// rx, ry, rz	: カメラの回転(ラジアン・D3DX_PI*2で1周)
	// zoom			: ズーム
	////////////////////////////////////////////////////////////
	D3DXMATRIX* GetViewMatrix ( float x=0, float y=0, float z=0, float rx=0, float ry=0, float rz=0, float zoom=1.0 ){
		D3DXMATRIX matCamera, matCZoom, matCRot, matCPos;
		D3DXVECTOR3 eye, look, up;

		D3DXMatrixScaling ( &matCZoom, zoom, zoom, zoom ) ;
		D3DXMatrixRotationYawPitchRoll ( &matCRot, ry, rx, rz ) ;
		D3DXMatrixTranslation ( &matCPos, x, y, z ) ;
		matCamera = matCZoom*matCRot*matCPos ;

		return D3DXMatrixLookAtLH(
			&matView,
			D3DXVec3TransformCoord(&eye, &vEyePt, &matCamera ),
			D3DXVec3TransformCoord(&look, &vLookatPt, &matCamera ),
			D3DXVec3TransformNormal(&up, &vUpVec, &matCamera ));
	}

	////////////////////////////////////////////////////////////////////
	// FPS視点の場合は
	// 3Dモデルのワールド行列を直接突っ込んだ方が楽かもしれない
	////////////////////////////////////////////////////////////////////
	D3DXMATRIX* GetViewMatrix ( const D3DXMATRIX* matWorld ){
		D3DXVECTOR3 eye, look, up;
		return D3DXMatrixLookAtLH(
			&matView,
			D3DXVec3TransformCoord(&eye, &vEyePt, matWorld ),
			D3DXVec3TransformCoord(&look, &vLookatPt, matWorld ),
			D3DXVec3TransformNormal(&up, &vUpVec, matWorld ));
	}
} ;




----------------------------------------------------------------------------------------
// 使用例

// TPS視点
C3DCamera tps_camera(D3DXVECTOR3(0.0f,3.0f,-5.0f), D3DXVECTOR3(0.0f,0.0f,0.0f), D3DXVECTOR3(0.0f,1.0f,0.0f)) ;
//3Dモデルを中心に(Y軸で)カメラを回転させる
static float ry = 0.0f ;
ry += (D3DX_PI/180);
Device->SetTransform( D3DTS_VIEW, tps_camera.GetViewMatrix(0, 0, 0, 0, ry, 0, 1.0f) );

// FPS視点
D3DXMATRIX matWorld; // 3Dモデルの"計算済み"ワールド行列
C3DCamera fps_camera(D3DXVECTOR3(0.0f,0.0f,0.0f), D3DXVECTOR3(0.0f,0.0f,1.0f), D3DXVECTOR3(0.0f,1.0f,0.0f)) ;
Device->SetTransform( D3DTS_VIEW, fps_camera.GetViewMatrix(&matWorld) );


Create a new paste based on this one


Comments: