*******************************************************************************/
-#include <iostream>
-#include <Moof/Camera.hh>
-#include <Moof/OpenGL.hh>
+#include "Camera.hh"
+#include "OpenGL.hh"
namespace Mf {
void Camera::setPosition(const Vector3& point)
{
position_ = point;
+ calculateSecondary();
//Vector3 coeff[2] = {position_, point};
//pInterp_.init(coeff, 0.1);
}
projection_ = projection;
}
-void Camera::setProjection(Scalar fovy, Scalar aspect, Scalar near, Scalar far)
+void Camera::setProjection(Scalar fovy, Scalar aspect, Scalar abutting,
+ Scalar distant)
{
- cml::matrix_perspective_yfov_RH(projection_, fovy, aspect, near, far,
- cml::z_clip_neg_one);
-
+ cml::matrix_perspective_yfov_RH(projection_, fovy, aspect, abutting,
+ distant, cml::z_clip_neg_one);
calculateSecondary();
}
void Camera::lookAt(const Vector3& point)
{
- quaternion_rotation_aim_at(rotation_, position_, point);
+ cml::quaternion_rotation_aim_at(rotation_, position_, point,
+ Vector3(0.0, -1.0, 0.0));
+ calculateSecondary();
}
-void Camera::adjustFromInput(const Event& event)
+void Camera::handleEvent(const Event& event)
{
switch (event.type)
{
case SDL_KEYDOWN:
- if (event.key.keysym.sym == SDLK_RIGHT ||
- event.key.keysym.sym == SDLK_d)
+ if (event.key.keysym.sym == SDLK_RIGHT)
{
Vector3 vec = position_;
vec[0] -= 50.0;
setPosition(vec);
}
- else if (event.key.keysym.sym == SDLK_LEFT ||
- event.key.keysym.sym == SDLK_a)
+ else if (event.key.keysym.sym == SDLK_LEFT)
{
Vector3 vec = position_;
vec[0] += 50.0;
setPosition(vec);
}
- else if (event.key.keysym.sym == SDLK_UP ||
- event.key.keysym.sym == SDLK_w)
+ else if (event.key.keysym.sym == SDLK_UP)
{
Vector3 vec = position_;
vec[1] -= 50.0;
setPosition(vec);
}
- else if (event.key.keysym.sym == SDLK_DOWN ||
- event.key.keysym.sym == SDLK_s)
+ else if (event.key.keysym.sym == SDLK_DOWN)
{
Vector3 vec = position_;
vec[1] += 50.0;
}
else if (event.key.keysym.sym == SDLK_PAGEDOWN)
{
- //position_[2] -= 50.0;
Vector3 vec = position_;
vec[2] -= 50.0;
setPosition(vec);
Quaternion rotation = rotation_;
- quaternion_rotate_about_world_x(rotation, yrel);
+ cml::quaternion_rotate_about_world_x(rotation, yrel);
//rotation_.normalize();
- quaternion_rotate_about_world_y(rotation, xrel);
+ cml::quaternion_rotate_about_world_y(rotation, xrel);
rotation.normalize();
setRotation(rotation);
void Camera::calculateSecondary()
{
- matrix_rotation_quaternion(modelview_, rotation_);
+ cml::matrix_rotation_quaternion(modelview_, rotation_);
Matrix4 translate;
- matrix_translation(translate, position_);
+ cml::matrix_translation(translate, position_);
- //modelview_ = translate * modelview_;
+ //modelview_.transpose();
modelview_ *= translate;
+ //modelview_ = translate * modelview_;
frustum_.init(modelview_, projection_);
}