Fichier source en cours : FW - Camera.h






Voici le code source cpp :




	#ifndef CAMERA_H
#define CAMERA_H

namespace fw
{
	class Camera : public SceneNode
	{
	public:
		Camera(const std::string& sName);
		virtual ~Camera();

		virtual D3DXMATRIX* GetViewMatrix();
		virtual D3DXMATRIX* GetProjectionMatrix();

		void LookAt(const D3DXVECTOR3& lookAt);
		D3DXVECTOR3 GetLookAt();

		virtual void SetTarget(const D3DXVECTOR3& target);
		D3DXVECTOR3 GetTarget();
		void SetTarget(float x, float y, float z);

		std::string& GetName();

		virtual void Update(float fTimeSinceLastFrame);

		void SetUpVector(const D3DXVECTOR3& up);

		D3DXVECTOR3 GetUpVector();

		float GetNearValue();
		float GetFarValue();

		virtual void RebuildProj();
		void SetIgnoreUpdate(bool bIgnore);
		bool GetIgnoreUpdate();

		template<typename D3DVersion>
		AbstractShaderSceneNode* LoadCameraMesh()
		{
			if (MESH_CACHES_MANAGER(D3DVersion)->MeshBufferExists("CameraMesh"))
			{
				const MeshBuffers<D3DVersion::BufferType>* pMesh =
					MESH_CACHES_MANAGER(D3DVersion)->GetMeshBuffers("CameraMesh");

				D3DMeshSceneNode<D3DVersion>* pCameraMeshSceneNode = new D3DMeshSceneNode<D3DVersion>("CameraMesh");

				pCameraMeshSceneNode->SetMeshBuffers(pMesh);

				SAFE_DELETE(m_pCameraSceneNode);
				
				m_pCameraSceneNode = pCameraMeshSceneNode;
			}
			else
			{
				D3DMeshSceneNode<D3DVersion>* pCameraMeshSceneNode = OBJ_LOADER_MANAGER->LoadMesh<D3DVersion>("camera.obj");

				const MeshBuffers<D3DVersion::BufferType>* pMesh(pCameraMeshSceneNode);
				
				SAFE_DELETE(m_pCameraSceneNode);
				
				m_pCameraSceneNode = pCameraMeshSceneNode;

				MESH_CACHES_MANAGER(D3DVersion)->AddMeshBuffer("CameraMesh", pMesh);
			}

			return m_pCameraSceneNode;
		}
	
		virtual void OnTransformationChange() override;

	protected:	
		virtual void BuildView();

	protected:
		D3DXVECTOR3 m_lookAt;
		D3DXVECTOR3 m_right;

		D3DXVECTOR3 m_up;

		D3DXMATRIX m_view;

	private:
		void UpdateLens(float fFov, float fAspect, float fNearZ, float fFarZ);

	private:
		D3DXMATRIX m_proj;

		std::string m_sName;

		float m_fNear;
		float m_fFar;

		bool m_bIgnoreUpdate;

		AbstractShaderSceneNode* m_pCameraSceneNode;
	};
}

#endif