bug : L'utilisation du grab de la souris générait des évènements qui faisaient pivoter la caméra avant la première frame.

This commit is contained in:
Georges Dupéron 2011-12-01 00:06:12 +01:00
parent 2a816ef4f1
commit e035eac1c8
3 changed files with 30 additions and 43 deletions

View File

@ -38,7 +38,7 @@ class Vertexf {
static Vertexf fromSpherical(float r, float xAngle, float yAngle);
public:
friend std::ostream& operator<<(std::ostream& os, const Vertex& v);
friend std::ostream& operator<<(std::ostream& os, const Vertexf& v);
friend Vertexf operator+(const Vertexf& u, const Vertexf& v);
friend Vertexf operator-(const Vertexf& u, const Vertexf& v);
friend Vertexf operator-(const Vertexf& v);

View File

@ -1,6 +1,6 @@
#include "all_includes.hh"
View::View(Chose* root) : root(root), camera(Camera(Vertexf(127,0,128),180,-20,40,0.6)) {
View::View(Chose* root) : root(root), camera(Camera(Vertexf(420,468,151),230,108,40,0.6)) {
initWindow();
mainLoop();
}
@ -84,7 +84,7 @@ void View::renderScene(int lastTime, int currentTime) {
camera.setCamera();
setLight();
displayAxes();
//displayAxes();
root->display();
glFlush();
@ -97,6 +97,7 @@ void View::mainLoop() {
SDL_EnableKeyRepeat(40,40);
SDL_WM_GrabInput(SDL_GRAB_ON);
SDL_ShowCursor(SDL_DISABLE);
while ( SDL_PollEvent(&event) ); // empty queue.
int lastTime = SDL_GetTicks() - 30;
int currentTime = 0;
@ -112,60 +113,35 @@ void View::mainLoop() {
case SDL_KEYDOWN:
case SDL_KEYUP:
camera.keyboard(event.key);
/*switch(event.key.keysym.sym) {
case SDLK_DOWN:
cameraCenter = cameraCenter - Vertex::fromSpherical(moveDist, yAngle, xAngle);
break;
case SDLK_UP:
cameraCenter = cameraCenter + Vertex::fromSpherical(moveDist, yAngle, xAngle);
break;
case SDLK_PAGEUP:
cameraCenter = cameraCenter - Vertex::fromSpherical(moveDist, yAngle + 90, xAngle);
break;
case SDLK_PAGEDOWN:
cameraCenter = cameraCenter + Vertex::fromSpherical(moveDist, yAngle + 90, xAngle);
break;
case SDLK_LEFT:
cameraCenter = cameraCenter - Vertex::fromSpherical(moveDist, 90, xAngle - 90);
break;
case SDLK_RIGHT:
cameraCenter = cameraCenter + Vertex::fromSpherical(moveDist, 90, xAngle - 90);
break;
case SDLK_ESCAPE:
continuer = 0;
break;
default:
if (SDL_GetKeyName(event.key.keysym.sym)[0] == 'q')
continuer = 0;
if (SDL_GetKeyName(event.key.keysym.sym)[0] == 'p') { // _Print _Position
std::cout << "Camera = " << cameraCenter << " xAngle = " << xAngle << " yAngle = " << yAngle << std::endl;
}
break;
}*/
break;
case SDL_MOUSEMOTION:
camera.mouseMotion(event.motion);
break;
default:
break;
}
}
renderScene(lastTime,currentTime);
}
SDL_Quit();
}
Camera::Camera(Vertexf pos, float xA, float yA, int moveSensitivity, float mouseSensitivity) {
cameraCenter = pos;
xAngle = xA;
yAngle = yA;
cameraSight = cameraCenter + Vertexf::fromSpherical(100,yA,xA);
moveDist = moveSensitivity;
this->mouseSensitivity = mouseSensitivity;
Camera::Camera(Vertexf pos, float xA, float yA, int moveSensitivity, float mouseSensitivity)
: cameraCenter(pos),
cameraSight(cameraCenter + Vertexf::fromSpherical(100,yA,xA)),
xAngle(xA),
yAngle(yA),
moveDist(moveSensitivity),
mouseSensitivity(mouseSensitivity),
up(false), down(false), left(false), right(false),
pageUp(false), pageDown(false)
{
}
std::ostream& Camera::print(std::ostream& os) const {
return os << "Camera = " << cameraCenter << " xAngle = "
<< xAngle << " yAngle = " << yAngle;
}
void Camera::setCamera() {
@ -206,6 +182,15 @@ void Camera::keyboard(const SDL_KeyboardEvent &eventKey) {
exit(0);
break;
default :
switch(SDL_GetKeyName(eventKey.keysym.sym)[0]) {
case 'q':
exit(0);
break;
case 'p': // _Print _Position
std::cout << *this << std::endl;
default:
break;
}
break;
}
}

View File

@ -30,6 +30,8 @@ class Camera {
void mouseMotion(const SDL_MouseMotionEvent &event);
void keyboard(const SDL_KeyboardEvent &event);
void animation(int elapsedTime);
std::ostream& print(std::ostream& os) const;
friend std::ostream& operator<<(std::ostream& os, const Camera& c) { return c.print(os); }
};