/***************************************************************/
//
//
//		DirectX	[ cameradx9.cpp ]
//
//											Author	kazuki tanaka
//											Date	2017 6/15
/*---------------------------------------------------------------
■Update : 2017/6/15
			cameradx9.cppの作成

/*---------------------------------------------------------------
	Include File
---------------------------------------------------------------*/

#include "cameradx9.h"

#include "rendererdx9.h"
#include "castdx9.h"

/*---------------------------------------------------------------
	Macro Difinition
---------------------------------------------------------------*/


/*----------------------------------------------------------------
	static member variable Initialize 
----------------------------------------------------------------*/





// CameraDX9 Constructor
CameraDX9::CameraDX9( const std::string& name )
	: Camera( name )
{

	// Menber Clear Process

}

// CameraDX9 Destructor
CameraDX9::~CameraDX9( )
{

	// Do Nothing!!

}

// CameraDX9 Initialize
void CameraDX9::Init( void )
{

	// Initialize Process
	Camera::Init();

}

// CameraDX9 Uninitialize
void CameraDX9::Uninit( void )
{

	// Uninitialize Process


}

// CameraDX9 Update
void CameraDX9::Update( void )
{

	Camera::Update();

}

// CameraDX9 Set
void CameraDX9::Set( void )
{

	// Set Process
	LPDIRECT3DDEVICE9 pDevice = GetDevice( );

	// ビュー行列の変換
	D3DXMATRIX view;
	D3DXMatrixLookAtLH( &view, &CastVec3(pos), &CastVec3(posAt), &CastVec3(vecUp));

	// デバイスにビュー変換行列の設定
	pDevice ->SetTransform( D3DTS_VIEW, &view );

	D3DXMATRIX mat;

	Matrix viewMtx = view;
	viewMtx = viewMtx.Inverse();

	{ // BIllboard用行列の更新
	
		viewInverse = viewMtx;

		// 平行成分の初期化
		viewInverse._41 = 0.0f;
		viewInverse._42 = 0.0f;
		viewInverse._43 = 0.0f;

	} // -> END

	{ // UserInterface用行列の更新
	
		viewUserInterface = viewMtx;	

	} // -> END

	// プロジェクション行列の作成	
	D3DXMATRIX proj;
	D3DXMatrixPerspectiveFovLH( &proj,	 
		D3DXToRadian(fov),						// パース( 視野角 )
		aspect,									// アスペクト比
		nearClip,								// 前クリップ面( 0 < Zn )※0はNG( クリップ面は、カメラがどれだけの視界があるか、つまり0にすると演算がバグる)
		farClip									// 後クリップ面
		);

	// デバイスにプロジェクション行列の設定
	pDevice ->SetTransform( D3DTS_PROJECTION, &proj );

	/*
	// ビューポート変換
	pDevice ->SetViewport( &viewPort );
	*/
	// Setting Use Photo Number
	Camera::Set();


	#ifdef _DEBUG
	/*
	CDebugFont::IndexAccess( 0 )->SetRenderData( C_RENDER, \
		"< Photo Setting > myNumber : %d  \n\
		pos : %f, %f, %f \n\
		At :  %f, %f, %f \n\
		Vecup : %f, %f, %f \n\
		work : %d, phy : %f \n\
		Aspect : %f \n\
		usingNumber : %d\n"
		, myNumber,
		posEye.x, posEye.y, posEye.z,
		posAt.x, posAt.y, posAt.z,
		vecUp.x, vecUp.y, vecUp.z,
		work, phy,
		aspect,
		usingPhotoNumber );
		*/
	#endif // _DEBUG


}





