Vai al contenuto

Movimento del Mouse con la Camera


Messaggi raccomandati

Salve a tutti, sto realizzando un progetto di grafica tridimensionale(in Opengl)...

IL problema, in questo caso, è che non riesco a scrivere le istruzioni giuste per la gestione del mouse(per effettuare il movimento della camera).

Le istruzioni per la camera, tramite la tastiera sono le seguenti:

 

typedef cml::vector3f vector3;

typedef cml::matrix44f matrix44;

 

vector3 camera_pos(0.0, 0.0, 0.0); // Posizione camera

vector3 camera_at(0.0, 0.0, -10.0); // Punto in cui "guarda" la camera

vector3 camera_up(0.0, 1.0, 0.0); // Vettore up...la camera è sempre parallela al piano

vector3 camera_dir(0.0, 0.0, -0.1); // Direzione dello sguardo

vector3 camera_side(1.0, 0.0, 0.0); // Direzione spostamento laterale

 

bool moveLeft = false;

bool moveRight = false;

bool moveForward = false;

bool moveBackward = false;

bool rotateLeft = false;

bool rotateRight = false;

 

 

 

// La funzione idle continuerà a spostare la camera

// fino a quando le variabili booleane sono a true

void MOUSECAMERA::idle()

{

/*Per spostare la camera in avanti e indietro abbiamo bisogno di spostare la posizione della camera "pos"

e la posizione del punto "at"*/

 

// Spostamento in avanti

if(moveForward)

{

camera_pos = camera_pos + camera_dir * 2.2f;

camera_at = camera_pos + camera_dir;

}

// Spostamento all'indietro

if(moveBackward)

{

camera_pos = camera_pos - camera_dir * 2.2f;

camera_at = camera_pos + camera_dir;

}

 

/*Per ruotare la camera abbiamo bisogno di ruotare il vettore direzione "dir" e aggiornare il punto "at" rispetto

alla nuova direzione.*/

//// Ruota a sinistra

 

if(rotateLeft)

{

camera_dir = rotate_vector(camera_dir, vector3(0.0, 1.0, 0.0), -0.2);

camera_at = camera_pos + camera_dir;

camera_side = cross(camera_dir, camera_up);

camera_side.normalize();

}

// Ruota a destra

if(rotateRight)

{

camera_dir = rotate_vector(camera_dir, vector3(0.0, 1.0, 0.0), 0.2);

camera_at = camera_pos + camera_dir;

camera_side = cross(camera_dir, camera_up);

camera_side.normalize();

}

 

/*Per muovere la camera lateralmente bisogna spostare il punto "pos" in direzione "side" e spostare il

punto "at" in direzione "side"*/

// Spostamento laterale destro

if(moveRight)

{

camera_pos = camera_pos - 0.2*camera_side;

camera_at = camera_pos + camera_dir;

}

// Spostamento laterale sinistro

if(moveLeft)

{

camera_pos = camera_pos + 0.2*camera_side;

camera_at = camera_pos + camera_dir;

}

 

glutPostRedisplay();

 

}

 

 

 

void MOUSECAMERA::lookAtCamera(){

gluLookAt(camera_pos[0], camera_pos[1], camera_pos[2],

camera_at[0], camera_at[1], camera_at[2],

camera_up[0], camera_up[1], camera_up[2]);

}

 

// Cattura il rilascio dei tasti ed imposta

// le variabili booleane a false

void MOUSECAMERA::keyboardUp(unsigned char key, int x, int y)

{

 

switch ( key ) {

case 'w': /* Spostati in avanti */

moveForward = false;

break;

case 's': /* Spostati all'indietro */

moveBackward = false;

break;

case 'x': /* Ruota la camera a sinistra */

rotateLeft = false;

break;

case 'q': /* Ruota la camera a destra */

rotateRight = false;

break;

case 'a':

moveRight = false;

break;

case 'd':

moveLeft = false;

break;

default:

break;

}

}

 

// Cattura la pressione dei tasti ed imposta

// le variabili booleane a true

void MOUSECAMERA::keyboard(unsigned char key, int x, int y)

{

switch ( key ) {

case 27: /* Escape key */

exit ( 0 );

break;

case 'w': /* Spostati in avanti */

moveForward = true;

break;

case 's': /* Spostati all'indietro */

moveBackward = true;

break;

case 'x': /* Ruota la camera a sinistra */

rotateLeft = true;

break;

case 'q': /* Ruota la camera a destra */

rotateRight = true;

break;

case 'a': /* Strafe a destra */

moveRight = true;

break;

case 'd': /* Strafe a sinistra */

moveLeft = true;

break;

case 'f': /* Fog on */

glEnable(GL_FOG);

// glEnable(GL_LIGHTING);

break;

case 'g': /* Fog off */

glDisable(GL_FOG);

// glDisable(GL_LIGHTING);

break;

default:

break;

}

}

 

void MOUSECAMERA::mouseMovement(int x, int y){

??

}

 

Per muovere la camera con il mouse, secondo voi come posso fare???

Ho fatto alcuni ragionamenti ma i risultati non sono quelli che voglio ottenere...

 

Aiutatemi per favore...

Grazie

By Brutto90

Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



  • Community Hive Community Hive

    Community Hive allows you to follow your favorite communities all in one place.

    Follow on Community Hive
  • Utenti

    Non ci sono membri da mostrare

×
×
  • Crea Nuovo...