Brutto90 Inviato 27 Dicembre 2012 Condividi Inviato 27 Dicembre 2012 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 Altre opzioni di condivisione...
Messaggi raccomandati
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 accountAccedi
Sei già registrato? Accedi qui.
Accedi Ora