ページ 11

車がカメラの角度を合わせて移動

Posted: 2010年12月04日(土) 08:39
by blueflowhayami
こんにちは。私は今学校の課題で困っています。
まず、やりたいことは以下になります。

カメラは車をフォローしません。
camC1.png
camC1.png (5.38 KiB) 閲覧数: 1200 回
CAmC2.png
CAmC2.png (6.07 KiB) 閲覧数: 1200 回
Camera.cpp--------------------------------------------------

コード:

D3DXVECTOR3 CamPos;
D3DXVECTOR3 CamLook;
D3DXVECTOR3 CamRotAngle;
D3DXVECTOR3 CamLookRotAngle;

void InitCamera(){

	CamPos = D3DXVECTOR3( 0.0f, 8.0f, 8.0f );
	CamLook= D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
	CamRotAngle = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
	CamLookRotAngle = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
}

void UpdateCamera(){

	if( CheckKey_Keyboard( DIK_W ) ){
		CamPos.z -= 0.07f;
		CamLook.z -= 0.07f;
	}else if( CheckKey_Keyboard( DIK_S ) ){
		CamPos.z += 0.07f;
		CamLook.z += 0.07f;
	}

	if( CheckKey_Keyboard( DIK_A) ){
		CamPos.x -= 0.07f;
		CamLook.x -= 0.07f;
	}else if( CheckKey_Keyboard( DIK_D ) ){
		CamPos.x += 0.07f;
		CamLook.x += 0.07f;
	}

	if( CheckKey_Keyboard( DIK_T ) ){
		CamPos.y += 0.07f;
	}else if( CheckKey_Keyboard( DIK_B ) ){
		CamPos.y -= 0.07f;
	}

	if( CheckKey_Keyboard( DIK_Q ) ){
		CamLook.x += 0.07f;
		CamRotAngle.y -= D3DX_PI / 360.0f;
	}else if( CheckKey_Keyboard( DIK_E ) ){
		CamLook.x -= 0.07f;
		CamRotAngle.y += D3DX_PI / 360.0f;
	}
	
	if( CheckKey_Keyboard( DIK_Y ) ){
		CamLook.y += 0.07f;
	}else if( CheckKey_Keyboard( DIK_N ) ){
		CamLook.y -= 0.07f;
	}
	
	if( CheckKey_Keyboard( DIK_Z ) ){
		CamRotAngle.z += D3DX_PI / 360.0f;
	}else if( CheckKey_Keyboard( DIK_C ) ){
		CamRotAngle.z -= D3DX_PI / 360.0f;
	}

		D3DXMATRIX  MatCamRot;
		D3DXMATRIX  MatCamPos;
		D3DXMATRIX  MatCamLookPos;

		D3DXMATRIX  MatCamPosFinal;
		D3DXMATRIX  MatCamLookPosFinal;


		D3DXVECTOR3 CamPosTemp = CamPos;
		D3DXVECTOR3 CamLookTemp = CamLook;

		D3DXMatrixIdentity( &MatCamPosFinal );
		D3DXMatrixIdentity( &MatCamLookPosFinal );

		D3DXMatrixRotationYawPitchRoll( &MatCamRot, CamRotAngle.y, CamRotAngle.x, CamRotAngle.z );
		D3DXMatrixTranslation( &MatCamPos, CamPos.x, CamPos.y, CamPos.z );
		D3DXMatrixTranslation( &MatCamLookPos, CamLook.x, CamLook.y, CamLook.z );
		
		MatCamPosFinal = MatCamRot * MatCamPos;
		MatCamLookPosFinal = MatCamRot * MatCamLookPos;

		D3DXVec3TransformCoord( &CamPosTemp, &CamPosTemp, &MatCamPosFinal );
		D3DXVec3TransformCoord( &CamLookTemp, &CamLookTemp, &MatCamLookPosFinal );

		D3DXMATRIX MatView;
		D3DXMatrixLookAtLH( &MatView,
							&CamPosTemp,
							&CamLookTemp,
							&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );
		g_pD3DDevice->SetTransform( D3DTS_VIEW, &MatView );

}

// model.cpp----------------------------------------------------------------------------------------

コード:

D3DXVECTOR3 RotationXYZ_model = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 Translation_model = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 Scaling_model = D3DXVECTOR3( 0.6f, 0.6f, 0.6f );
D3DXMATRIX  Matrix_model;

void UpdateModel(){
	if( CheckKey_Keyboard( DIK_UP ) ){
		Translation_model.z -= 0.1f;

	}else if( CheckKey_Keyboard( DIK_DOWN ) ){
		Translation_model.z += 0.1f;
	}

	if( CheckKey_Keyboard( DIK_LEFT ) ){
		Translation_model.x += 0.1f;

	}else if( CheckKey_Keyboard( DIK_RIGHT ) ){
		Translation_model.x -= 0.1f;
	}

	D3DXMatrixTranslation( &mtxTrans, Translation_model.x, Translation_model.y, Translation_model.z );
	D3DXMatrixRotationYawPitchRoll( &mtxRot, CamRotAngle.y, CamRotAngle.x, CamRotAngle.z );
	D3DXMatrixScaling( &mtxScale, Scaling_model.x, Scaling_model.y, Scaling_model.z );

	Matrix_model = mtxScale * mtxRot * mtxTrans;
}
長文ですが、宜しくお願いします。