#include "camera.h" /* definizioni delle funzioni della classe Camera */ /* costruttore */ Camera::Camera(GLfloat x, GLfloat y, GLfloat z) { Point3 v = {0,0,1}; Point3 u = {0,1,0}; /* il costruttore permette di settare la posizione della tc; direzione di vista e up sono fissati, in questa versione */ eye.x = x; eye.y = y; eye.z = z; view = v; up = u; velocity = 0.0; } /* cambia angolo di roll */ void Camera::roll(GLfloat angle) { up = RotateVector(angle,view,up); } /* cambia angolo di pitch */ void Camera::pitch(GLfloat angle) { Point3 xa; /* asse x della tc, quello a cui ruotare per cambiare pitch */ xa = Cross(view,up); view = RotateVector(angle,xa,view); up= RotateVector(angle,xa,up); } /* aggiorna velocita' */ void Camera::accelerate(GLfloat step) { velocity+=step; if (velocity < 0) velocity = 0.0; if (velocity > MAXSPEED) velocity = MAXSPEED; } /* avanza di uno step, nella direzione di view */ void Camera::step(GLfloat s) { eye.x+=s*view.x; eye.y+=s*view.y; eye.z+=s*view.z; } /* aggiorna posizione in base alla velocita' (da chiamare in idle() ) */ void Camera::advance(GLfloat t) { eye.x+=t*velocity*view.x; eye.y+=t*velocity*view.y; eye.z+=t*velocity*view.z; } /* chiama la gluLookAt */ void Camera::look() { /* assicurarsi che agisca sulla modelview *prima* della trasformazione di modellazione */ gluLookAt(eye.x, eye.y, eye.z, eye.x+view.x, eye.y+view.y, eye.z+view.z, up.x, up.y, up.z); } Point3 Camera::getPos() { return(eye); } Point3 Camera::getView() { return(view); } Point3 Camera::getRight() { return( Cross(view,up)); } Point3 Camera::getUp() { return(up); } GLfloat Camera::getSpeed() { return(velocity); } /* Credits: Ben Humphrey (DigiBen@GameTutorials.com) per la classe camera */