Added/updated test code for mouse rotation, zooming, and panning.
parent
8c37edcfe7
commit
0ceb4b828d
30
src/Core.cpp
30
src/Core.cpp
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue