Added/updated test code for mouse rotation, zooming, and panning.

master
kts 2015-02-25 15:56:25 -08:00
parent 8c37edcfe7
commit 0ceb4b828d
3 changed files with 31 additions and 11 deletions

View File

@ -230,17 +230,33 @@ void Core::doProcess() {
if (event.motion.which == SDL_TOUCH_MOUSEID) continue;
LOG(LOG_INFO) << "mouse motion: " << event.motion.xrel << "x" << event.motion.yrel << " ";
RenderCamera *camera = scene->getCamera(1);
if (event.motion.state & SDL_BUTTON_MMASK) {
camera->setYaw(camera->getYaw() - event.motion.xrel);
} else if (event.motion.state & SDL_BUTTON_RMASK) {
Vec3 camera_pos = camera->getPosition();
float x = ((float)event.motion.x-(v_width/2)) / camera->getSize();
float y = ((float)event.motion.y-(v_height/2)) / camera->getSize();
camera->setPosition(-x, camera_pos.y, y);
float x = (float)event.motion.xrel / (v_width/50);
float y = (float)event.motion.yrel / (v_height/50);
// This is weird. (again)
float yaw = camera->getYaw() * M_PI / 180.0f;
float ax = (-x * cosf(yaw)) + (y * sinf(yaw));
float ay = (y * cosf(yaw)) - (-x * sinf(yaw));
camera->setPosition(camera_pos.x+ax, camera_pos.y, camera_pos.z+ay);
}
camera->doRefresh();
} else if (event.type == SDL_MOUSEBUTTONDOWN) {
} else if (event.type == SDL_MOUSEWHEEL) {
RenderCamera *camera = scene->getCamera(1);
if (event.button.button == SDL_BUTTON_LEFT) {
camera->setMode(0);
Vec3 camera_pos = camera->getPosition();
camera_pos.y -= event.wheel.y;
camera->setPosition(camera_pos.x, camera_pos.y, camera_pos.z);
camera->doRefresh();
} else if (event.type == SDL_KEYUP) {
if (event.key.keysym.sym == SDLK_SPACE) {
RenderCamera *camera = scene->getCamera(1);
if (camera->getRenderMode() == 0) {
camera->setRenderMode(1);
} else {
camera->setMode(1);
camera->setRenderMode(0);
}
}
}
}

View File

@ -70,7 +70,7 @@ void RenderCamera::doRefresh() {
}
/* ======== Setter functions ======== */
// sets to orthogonal or perspective rendering
void RenderCamera::setMode(int mode) {
void RenderCamera::setRenderMode(int mode) {
if (mode == 1) {
render_mode = mode;
} else {
@ -116,3 +116,6 @@ float RenderCamera::getSize() {
Mat4 RenderCamera::getModelview() {
return mv_matrix;
}
int RenderCamera::getRenderMode() {
return render_mode;
}

View File

@ -26,7 +26,8 @@ class RenderCamera {
RenderView* getRenderView();
void updateProjection(int width, int height);
void doRefresh();
void setMode(int mode);
int getRenderMode();
void setRenderMode(int mode);
Vec3 getPosition();
void setPosition(float x, float y, float z);
float getPitch();