Commit
git-svn-id: https://reactphysics3d.googlecode.com/svn/trunk@16 92aac97c-a6ce-11dd-a772-7fcde58d38e6
This commit is contained in:
parent
e70ef78a8e
commit
e0ea6f4a43
34
sources/demo/Camera.cpp
Normal file
34
sources/demo/Camera.cpp
Normal file
|
@ -0,0 +1,34 @@
|
|||
/****************************************************************************
|
||||
* Copyright (C) 2009 Daniel Chappuis *
|
||||
****************************************************************************
|
||||
* This file is part of ReactPhysics3D. *
|
||||
* *
|
||||
* ReactPhysics3D is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* ReactPhysics3D is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with ReactPhysics3D. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***************************************************************************/
|
||||
|
||||
// Libraries
|
||||
#include "Camera.h"
|
||||
|
||||
// Initialization of static variables
|
||||
double Camera::speed=0.5;
|
||||
|
||||
// Constructor of the camera
|
||||
Camera::Camera() {
|
||||
|
||||
}
|
||||
|
||||
// Destructor of the camera
|
||||
Camera::~Camera() {
|
||||
|
||||
}
|
91
sources/demo/Camera.h
Normal file
91
sources/demo/Camera.h
Normal file
|
@ -0,0 +1,91 @@
|
|||
/****************************************************************************
|
||||
* Copyright (C) 2009 Daniel Chappuis *
|
||||
****************************************************************************
|
||||
* This file is part of ReactPhysics3D. *
|
||||
* *
|
||||
* ReactPhysics3D is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* ReactPhysics3D is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with ReactPhysics3D. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef CAMERA_H
|
||||
#define CAMERA_H
|
||||
|
||||
// Libraries
|
||||
#include "../reactphysics3d/reactphysics3d.h" // We want the mathematics stuff of reactphysics3d
|
||||
|
||||
// Namespaces
|
||||
using namespace reactphysics3d;
|
||||
|
||||
// Class Camera (abstract class)
|
||||
// In the project we will use two different camera. This is the superclass of the two
|
||||
// cameras. We will use a OutSideCamera that move arround the scene and an OnBoardCamera
|
||||
// that will simulate the deplacement of a viewer inside the scene
|
||||
class Camera {
|
||||
protected :
|
||||
Vector3D position; // Position of the camera
|
||||
Vector3D lookAtPoint; // Point where the camera is looking
|
||||
Vector3D viewVector; // Vector from the camera position to the view point
|
||||
static double speed; // Speed movement of the camera
|
||||
|
||||
public :
|
||||
Camera(); // Constructor
|
||||
Camera(const Camera& camera); // Copy-constructor
|
||||
virtual ~Camera(); // Destructor
|
||||
virtual Vector3D getPosition() const; // Get the position of the camera
|
||||
virtual void setPosition(const Vector3D& pos); // Set the position of the camera
|
||||
virtual Vector3D getLookAtPoint() const; // Return the point where the camera is looking
|
||||
virtual Vector3D getViewVector() const; // Return the view vector of the camera
|
||||
virtual void updateViewVector()=0; // Update the view vector of the camera
|
||||
static void increaseSpeed(); // Increase the speed of camera movement
|
||||
static void decreaseSpeed(); // Decrease the speed of camera movement
|
||||
};
|
||||
|
||||
// Get the position of the camera (inline function)
|
||||
inline Vector3D Camera::getPosition() const {
|
||||
// Return the position of the camera
|
||||
return position;
|
||||
}
|
||||
|
||||
// Set the position of the camera (inline function)
|
||||
inline void Camera::setPosition(const Vector3D& pos) {
|
||||
// Set the position of the camera
|
||||
position = pos;
|
||||
}
|
||||
|
||||
// Return the point where the camera is looking (inline function)
|
||||
inline Vector3D Camera::getLookAtPoint() const {
|
||||
return lookAtPoint;
|
||||
}
|
||||
|
||||
// Return the view vector of the camera (inline function)
|
||||
inline Vector3D Camera::getViewVector() const {
|
||||
return viewVector;
|
||||
}
|
||||
|
||||
// Increase the speed movement of the camera (inline function)
|
||||
inline void Camera::increaseSpeed()
|
||||
{
|
||||
speed= speed+0.05;
|
||||
if(speed>1)
|
||||
speed=1;
|
||||
}
|
||||
|
||||
// Decrease the speep movement of the camera (inline function)
|
||||
inline void Camera::decreaseSpeed()
|
||||
{
|
||||
speed = speed-0.05;
|
||||
if(speed<=0)
|
||||
speed=0.005;
|
||||
}
|
||||
|
||||
#endif
|
115
sources/demo/OutSideCamera.cpp
Normal file
115
sources/demo/OutSideCamera.cpp
Normal file
|
@ -0,0 +1,115 @@
|
|||
/****************************************************************************
|
||||
* Copyright (C) 2009 Daniel Chappuis *
|
||||
****************************************************************************
|
||||
* This file is part of ReactPhysics3D. *
|
||||
* *
|
||||
* ReactPhysics3D is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* ReactPhysics3D is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with ReactPhysics3D. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***************************************************************************/
|
||||
|
||||
// Libraries
|
||||
#include "OutSideCamera.h"
|
||||
#include <cmath>
|
||||
|
||||
// Constants
|
||||
const double PI = 3.141592;
|
||||
|
||||
// Constructor
|
||||
OutSideCamera::OutSideCamera() {
|
||||
|
||||
// Initialize the attributes
|
||||
heightFromFloor = 20.0;
|
||||
horizontalAngleRotation = 0;
|
||||
verticalAngleRotation = 45;
|
||||
distanceFromOrigin = 10.0;
|
||||
lookAtPoint.setAllValues(0.0, 0.0, 0.0);
|
||||
|
||||
// Update the position of the camera
|
||||
updatePosition();
|
||||
|
||||
// Update the view vector of the camera
|
||||
updateViewVector();
|
||||
}
|
||||
|
||||
// Destructor
|
||||
OutSideCamera::~OutSideCamera() {
|
||||
|
||||
}
|
||||
|
||||
// Compute the new position of the camera
|
||||
void OutSideCamera::updatePosition() {
|
||||
|
||||
// Compute the floor distance from origin
|
||||
double floorDistance = distanceFromOrigin * cos(PI/180.0 * verticalAngleRotation);
|
||||
|
||||
// Update the position of the camera
|
||||
position.setAllValues(floorDistance*cos(PI/180.0 * horizontalAngleRotation), distanceFromOrigin*sin(PI/180*verticalAngleRotation),
|
||||
floorDistance*sin(PI/180.0 * horizontalAngleRotation));
|
||||
}
|
||||
|
||||
// Set the camera rotation angle and update the position of the camera
|
||||
void OutSideCamera::modifyHorizontalAngleRotation(int screenDistance, float fps) {
|
||||
|
||||
// Update the horizontal rotation angle of the camera
|
||||
horizontalAngleRotation = (horizontalAngleRotation + int(screenDistance * 60.0 / fps)) % 360;
|
||||
|
||||
// Update the position and the view vector of the camera
|
||||
updatePosition();
|
||||
updateViewVector();
|
||||
}
|
||||
|
||||
// Set the vertical camera rotation angle
|
||||
void OutSideCamera::modifyVerticalAngleRotation(int screenDistance, float fps) {
|
||||
|
||||
// Update the vertical rotation angle of the camera
|
||||
verticalAngleRotation = verticalAngleRotation + (screenDistance * 60.0 / fps);
|
||||
|
||||
// Vertical angle limits
|
||||
if (verticalAngleRotation > 89) {
|
||||
verticalAngleRotation = 89;
|
||||
}
|
||||
if (verticalAngleRotation < 1) {
|
||||
verticalAngleRotation = 1;
|
||||
}
|
||||
|
||||
// Update the position and the view vector of the camera
|
||||
updatePosition();
|
||||
updateViewVector();
|
||||
}
|
||||
|
||||
// Increase the distance from origine of the camera (used for the zoom)
|
||||
void OutSideCamera::increaseDistance(float fps) {
|
||||
|
||||
// Increase the distance from origin
|
||||
distanceFromOrigin = distanceFromOrigin + (speed * 60 / fps);
|
||||
|
||||
// Update the position and the view vector of the camera
|
||||
updatePosition();
|
||||
updateViewVector();
|
||||
}
|
||||
|
||||
// Decrease the distance from origine of the camera (used for the zoom)
|
||||
void OutSideCamera::decreaseDistance(float fps) {
|
||||
|
||||
// Decrease the distance from origin
|
||||
distanceFromOrigin = distanceFromOrigin - (speed * 60 / fps);
|
||||
|
||||
// Limit condition
|
||||
if(distanceFromOrigin < 1) {
|
||||
distanceFromOrigin=1;
|
||||
}
|
||||
|
||||
// Update the position and the view vector of the camera
|
||||
updatePosition();
|
||||
updateViewVector();
|
||||
}
|
64
sources/demo/OutSideCamera.h
Normal file
64
sources/demo/OutSideCamera.h
Normal file
|
@ -0,0 +1,64 @@
|
|||
/****************************************************************************
|
||||
* Copyright (C) 2009 Daniel Chappuis *
|
||||
****************************************************************************
|
||||
* This file is part of ReactPhysics3D. *
|
||||
* *
|
||||
* ReactPhysics3D is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* ReactPhysics3D is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with ReactPhysics3D. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef OUTSIDE_CAMERA_H
|
||||
#define OUTSIDE_CAMERA_H
|
||||
|
||||
// Libraries
|
||||
#include "Camera.h"
|
||||
|
||||
// ---- Class OutSideCamera ----
|
||||
// This camera can be move everywhere around the scene to obtain a outside view of the house
|
||||
class OutSideCamera : public Camera {
|
||||
private :
|
||||
double heightFromFloor; // Height from the floor
|
||||
int horizontalAngleRotation; // Horizontal rotation angle (in degree)
|
||||
int verticalAngleRotation; // Vertical rotation angle (in degree)
|
||||
double distanceFromOrigin; // Distance of the camera from the origin (used to zoom)
|
||||
|
||||
public :
|
||||
OutSideCamera(); // Constructor
|
||||
OutSideCamera(const OutSideCamera& camera); // Copy-constructor
|
||||
virtual ~OutSideCamera(); // Destructor
|
||||
void updatePosition(); // Compute the new position of the camera
|
||||
void updateViewVector(); // Update the view vector of the camera
|
||||
double getHeightFromFloor() const; // Get the height of the camera from the floor
|
||||
void setHeightFromFloor(double height); // Set the height of the camera from the floor
|
||||
void modifyHorizontalAngleRotation(int screenDistance, float fps); // Modify the horizontal camera rotation angle
|
||||
void modifyVerticalAngleRotation(int screenDistance, float fps); // Modify the vertical camera rotation angle
|
||||
void increaseDistance(float fps); // Increase the distance of the camera from the origin
|
||||
void decreaseDistance(float fps); // Decrease the distance of the camera from the origin
|
||||
};
|
||||
|
||||
// Compute the new view vector of the camera (inline function)
|
||||
inline void OutSideCamera::updateViewVector() {
|
||||
viewVector = Vector3D(0.0, 0.0, 0.0) - position;
|
||||
}
|
||||
|
||||
// Get the height of the camera from the floor (inline function)
|
||||
inline double OutSideCamera::getHeightFromFloor() const {
|
||||
return heightFromFloor;
|
||||
}
|
||||
|
||||
// Set the height of the camera from the floor (inline function)
|
||||
inline void OutSideCamera::setHeightFromFloor(double height) {
|
||||
heightFromFloor = height;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user