113 lines
2.4 KiB
C++
113 lines
2.4 KiB
C++
/*
|
|
* $Id: camera.cpp,v 1.5 2002/07/22 01:14:14 msell Exp $
|
|
*
|
|
*
|
|
* $Log: camera.cpp,v $
|
|
* Revision 1.5 2002/07/22 01:14:14 msell
|
|
* Lopetussysteemi
|
|
*
|
|
* Revision 1.4 2002/06/17 20:49:04 msell
|
|
* free -> SDL_FreeSurface
|
|
*
|
|
* Revision 1.3 2002/06/16 01:04:58 jkaarlas
|
|
* tulipa säädettyä includejen kanssa. oon tod.näk. eri mieltä aamulla
|
|
*
|
|
* Revision 1.2 2002/06/03 23:06:38 msell
|
|
* no message
|
|
*
|
|
* Revision 1.1 2002/05/16 18:42:07 msell
|
|
* Vektorifunctioita ja kamera
|
|
*
|
|
*
|
|
*
|
|
* $Date: 2002/07/22 01:14:14 $
|
|
*
|
|
*/
|
|
|
|
#include "main.h"
|
|
|
|
#include "camera.h"
|
|
#include "vector.h"
|
|
#include "glapi.h"
|
|
|
|
Camera::Camera(void){
|
|
right = &matrix[0];
|
|
up = &matrix[3];
|
|
forward = &matrix[6];
|
|
|
|
vectorSet(position, 0, 2, 2);
|
|
vectorSet(target, 0, 0, 0);
|
|
vectorSet(up, 0, 1, 0);
|
|
|
|
calculateMatrix();
|
|
}
|
|
|
|
void Camera::setPosition(float position[3]){
|
|
vectorCopy(this->position, position);
|
|
}
|
|
|
|
void Camera::setPosition(float x, float y, float z){
|
|
this->position[0] = x;
|
|
this->position[1] = y;
|
|
this->position[2] = z;
|
|
}
|
|
|
|
void Camera::getPosition(float *position){
|
|
vectorCopy(position, this->position);
|
|
}
|
|
|
|
void Camera::setTarget(float target[3]){
|
|
vectorCopy(this->target, target);
|
|
}
|
|
|
|
void Camera::getTarget(float *target){
|
|
vectorCopy(target, this->target);
|
|
}
|
|
|
|
void Camera::setUp(float up[3]){
|
|
vectorCopy(this->up, up);
|
|
}
|
|
|
|
void Camera::getMatrix(float *matrix){
|
|
vectorCopy(&matrix[0], &this->matrix[0]);
|
|
vectorCopy(&matrix[3], &this->matrix[3]);
|
|
vectorCopy(&matrix[6], &this->matrix[6]);
|
|
}
|
|
|
|
void Camera::moveRight(float amount){
|
|
float movevector[3];
|
|
vectorScale(movevector, right, amount);
|
|
vectorAdd(position, movevector);
|
|
//vectorAdd(target, movevector);
|
|
calculateMatrix();
|
|
}
|
|
|
|
void Camera::moveUp(float amount){
|
|
float movevector[3];
|
|
vectorScale(movevector, up, amount);
|
|
vectorAdd(position, movevector);
|
|
//vectorAdd(target, movevector);
|
|
calculateMatrix();
|
|
}
|
|
|
|
void Camera::moveForward(float amount){
|
|
float movevector[3];
|
|
vectorScale(movevector, forward, amount);
|
|
vectorAdd(position, movevector);
|
|
//vectorAdd(target, movevector);
|
|
calculateMatrix();
|
|
}
|
|
|
|
void Camera::glUpdate(void){
|
|
//glLoadIdentity();
|
|
|
|
gluLookAt(position[0], position[1], position[2],
|
|
target[0], target[1], target[2],
|
|
up[0], up[1], up[2]);
|
|
}
|
|
|
|
void Camera::calculateMatrix(void){
|
|
vectorSub(forward, target, position);
|
|
vectorNormalize(forward);
|
|
vectorCross(right, forward, up);
|
|
}
|