seb2086
Messages postés
96
Date d'inscription
lundi 25 avril 2005
Statut
Membre
Dernière intervention
1 février 2010
16 juil. 2007 à 20:48
/*---------------------------------------------------------------------------------------
Nom : NEC_Camera.cpp
Description : Classe permettant de gerer la camera
---------------------------------------------------------------------------------------*/
#include "NEF_Camera.h"
#define KEYDOWN(name, key) (name[key] & 0x80) // Macro permettant de tester l'appui ou non sur un touche
// Variables Globales
D3DXMATRIX CameraMatriceProjection ; // Matrice de projection
D3DXMATRIX CameraMatriceVision ; // Matrice de vision
NEC_Clavier *TestClavier = NEC_Clavier :: NE_GetInstanceClavier() ;
char BufferEtatClavier[256] ;
NEC_Souris *TestSouris = NEC_Souris :: NE_GetInstanceSouris() ;
DIMOUSESTATE EtatSouris ;
DIMOUSESTATE EtatSourisSave ;
DIMOUSESTATE EtatSourisDifference ;
int temps1, temps2, difference ;
/*---------------------------------------------------------------------------------------
Nom : NEC_Camera(void)
Description : Constructeur de la classe
---------------------------------------------------------------------------------------*/
NEC_Camera :: NEC_Camera(void)
{
CameraAngleX = 0.0f ;
CameraAngleY = 0.0f ;
}
/*---------------------------------------------------------------------------------------
Nom : ~NEC_Camera(void)
Description : Destructeur de la classe
---------------------------------------------------------------------------------------*/
NEC_Camera :: ~NEC_Camera(void)
{
}
/*---------------------------------------------------------------------------------------
Nom : void NE_CreerCamera(LPDIRECT3DDEVICE9 D3DDevice)
Description : Creation de la camera
---------------------------------------------------------------------------------------*/
void NEC_Camera :: NE_CreerCamera(LPDIRECT3DDEVICE9 D3DDevice)
{
// Creation de la matrice de projection :
// Angle d'ouverture de la camera : 45° , plan le proche : 0.1f , plan le plus eloigne : 1000.0f
D3DXMatrixPerspectiveFovLH(&CameraMatriceProjection, D3DXToRadian(45.0f), 640.0f / 480.0f, 0.1f, 100.0f) ;
// On applique la matrice
D3DDevice -> SetTransform(D3DTS_PROJECTION, &CameraMatriceProjection) ;
CameraAngleX = D3DX_PI/2.0f ;
CameraAngleY = 0.0f ;
// Initialisation des vecteurs
CameraVecteurPosition = D3DXVECTOR3(0.0f, 0.0f, -30.0f) ;
CameraVecteurCible.x = CameraVecteurPosition.x + cosf(CameraAngleY) * cosf(CameraAngleX) ;
CameraVecteurCible.y = CameraVecteurPosition.y + sinf(CameraAngleY) ;
CameraVecteurCible.z = CameraVecteurPosition.z + cosf(CameraAngleY) * sinf(CameraAngleX) ;
CameraVecteurOrientation = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
// Creation de la matrice de vision
D3DXMatrixLookAtLH(&CameraMatriceVision, &CameraVecteurPosition, &CameraVecteurCible, &CameraVecteurOrientation) ;
// On applique la matrice
D3DDevice -> SetTransform(D3DTS_VIEW, &CameraMatriceVision) ;
temps1 = 0 ;
temps2 = 0 ;
EtatSourisSave.lX = 0 ;
}
/*---------------------------------------------------------------------------------------
Nom : void NE_DeplacerCamera(LPDIRECT3DDEVICE9 D3DDevice)
Description : Deplacement de la camera
---------------------------------------------------------------------------------------*/
void NEC_Camera :: NE_DeplacerCamera(LPDIRECT3DDEVICE9 D3DDevice)
{
HRESULT hr ;
TestSouris -> NE_AcquisitionSouris(true) ;
hr = TestSouris -> NE_GetEtatSouris(EtatSouris) ;
if(hr == S_OK)
{
temps1 = GetTickCount() ;
difference = temps1 - temps2 ;
EtatSourisDifference.lX = EtatSouris.lX - EtatSourisSave.lX ;
//Variation de l'angle de la camera en fonction de la souris
//Regard à droite ou à gauche
//if(EtatSouris.lX & 0x80)
//{
//CameraAngleX -= EtatSouris.lX *0.0000000000002f ;
//CameraAngleX -= EtatSouris.lX *0.0000000000002f ;
CameraAngleX += 0.000000002f / difference * EtatSourisDifference.lX ;
temps2 = temps1 ;
EtatSourisSave.lX = EtatSouris.lX ;
//}
/*if(-EtatSouris.lX & 0x80)
{
CameraAngleX += EtatSouris.lX *0.000000000002f ;
}*/
// Regard en haut ou en bas
/*if(EtatSouris.lY & 0x80)
{
CameraAngleY -= EtatSouris.lY *0.00000000000002f ;
}*/
if(EtatSouris.rgbButtons[0] & 0x80)
{
MessageBox(NULL,"Quitter l'application","Test Souris",MB_OK) ;
PostQuitMessage(0) ;
}
}
// Coefficient pour regler la vitesse de la camera
VitesseCamera = 0.02f ;
hr = TestClavier -> NE_AcquisitionClavier(true) ;
hr = TestClavier -> NE_GetEtatClavier(BufferEtatClavier) ;
if(hr == S_OK)
{
//Deplacement de la camera en fonction du clavier
//Reculer
if (KEYDOWN(BufferEtatClavier, DIK_DOWN))
{
CameraVecteurPosition.x -= cosf(CameraAngleY) * cosf(CameraAngleX) * VitesseCamera ;
CameraVecteurPosition.y -= sinf(CameraAngleY) * VitesseCamera ;
CameraVecteurPosition.z -= cosf(CameraAngleY) * sinf(CameraAngleX) * VitesseCamera ;
}
// Avancer
if (KEYDOWN(BufferEtatClavier, DIK_UP))
{
CameraVecteurPosition.x += cosf(CameraAngleY) * cosf(CameraAngleX) * VitesseCamera ;
CameraVecteurPosition.y += sinf(CameraAngleY) * VitesseCamera ;
CameraVecteurPosition.z += cosf(CameraAngleY) * sinf(CameraAngleX) * VitesseCamera ;
}
// Déplacement sur la gauche
if (KEYDOWN(BufferEtatClavier, DIK_LEFT))
{
CameraVecteurPosition.x -= sinf(CameraAngleX) * VitesseCamera ;
CameraVecteurPosition.z += cosf(CameraAngleX) * VitesseCamera ;
}
// Déplacement sur la droite
if (KEYDOWN(BufferEtatClavier, DIK_RIGHT))
{
CameraVecteurPosition.x += sinf(CameraAngleX) * VitesseCamera ;
CameraVecteurPosition.z -= cosf(CameraAngleX) * VitesseCamera ;
}
if(KEYDOWN(BufferEtatClavier, DIK_ESCAPE))
{
MessageBox(NULL,"Quitter l'application","Test Clavier",MB_OK) ;
PostQuitMessage(0) ;
}
}
// Calcul du vecteur cible en fonction des angles X et Y
CameraVecteurCible.x = CameraVecteurPosition.x + cosf(CameraAngleY) * cosf(CameraAngleX) ;
CameraVecteurCible.y = CameraVecteurPosition.y + sinf(CameraAngleY) ;
CameraVecteurCible.z = CameraVecteurPosition.z + cosf(CameraAngleY) * sinf(CameraAngleX) ;
//// Creation de la matrice de vision en fonction des vecteurs
D3DXMatrixLookAtLH(&CameraMatriceVision, &CameraVecteurPosition, &CameraVecteurCible, &CameraVecteurOrientation) ;
// On applique la matrice
D3DDevice -> SetTransform(D3DTS_VIEW, &CameraMatriceVision) ;
}
Voila j'espere que ca pourra t'aider à m'aider ;)