Added some test code in Core that allow for pinch zooming and two-finger rotation.

master
kts 2015-02-25 07:51:10 -08:00
parent 00d0ec1c00
commit 8c37edcfe7
3 changed files with 30 additions and 2 deletions

View File

@ -202,13 +202,29 @@ void Core::doProcess() {
r_view->setView(v_width, v_height); r_view->setView(v_width, v_height);
} }
} }
} else if (event.type == SDL_MULTIGESTURE) {
LOG(LOG_INFO) << "gesture: " << event.mgesture.x << "x" << event.mgesture.y << ", rot:" << event.mgesture.dTheta << ", pinch:" << event.mgesture.dDist << ", fingers:" << event.mgesture.numFingers;
RenderCamera *camera = scene->getCamera(1);
Vec3 camera_pos = camera->getPosition();
camera_pos.y -= event.mgesture.dDist*256.0f;
camera->setPosition(camera_pos.x, camera_pos.y, camera_pos.z);
float yaw = camera->getYaw();
camera->setYaw(yaw - (event.mgesture.dTheta*128.0f));
camera->doRefresh();
} else if (event.type == SDL_FINGERMOTION) { } else if (event.type == SDL_FINGERMOTION) {
LOG(LOG_INFO) << "finger: " << event.tfinger.pressure << " " << event.tfinger.x << "x" << event.tfinger.y << " " << event.tfinger.dx << "x" << event.tfinger.dy; LOG(LOG_INFO) << "finger: " << event.tfinger.fingerId << " " << event.tfinger.x << "x" << event.tfinger.y << " " << event.tfinger.dx << "x" << event.tfinger.dy;
RenderCamera *camera = scene->getCamera(1); RenderCamera *camera = scene->getCamera(1);
Vec3 camera_pos = camera->getPosition(); Vec3 camera_pos = camera->getPosition();
float x = event.tfinger.dx * v_width/16; float x = event.tfinger.dx * v_width/16;
float y = event.tfinger.dy * v_height/16; float y = event.tfinger.dy * v_height/16;
camera->setPosition(camera_pos.x-x, camera_pos.y, camera_pos.z+y);
// This is weird.
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(); camera->doRefresh();
} else if (event.type == SDL_MOUSEMOTION) { } else if (event.type == SDL_MOUSEMOTION) {
if (event.motion.which == SDL_TOUCH_MOUSEID) continue; if (event.motion.which == SDL_TOUCH_MOUSEID) continue;

View File

@ -104,6 +104,15 @@ RenderView* RenderCamera::getRenderView() {
Vec3 RenderCamera::getPosition() { Vec3 RenderCamera::getPosition() {
return position; return position;
} }
float RenderCamera::getYaw() {
return yaw;
}
float RenderCamera::getPitch() {
return pitch;
}
float RenderCamera::getSize() { float RenderCamera::getSize() {
return size; return size;
} }
Mat4 RenderCamera::getModelview() {
return mv_matrix;
}

View File

@ -29,9 +29,12 @@ class RenderCamera {
void setMode(int mode); void setMode(int mode);
Vec3 getPosition(); Vec3 getPosition();
void setPosition(float x, float y, float z); void setPosition(float x, float y, float z);
float getPitch();
void setPitch(float pitch); void setPitch(float pitch);
float getYaw();
void setYaw(float yaw); void setYaw(float yaw);
float getSize(); float getSize();
Mat4 getModelview();
private: private:
int render_mode; // 0 = perspective, 1 = orthogonal int render_mode; // 0 = perspective, 1 = orthogonal
Vec3 position; // The camera's coordinates in 3D space Vec3 position; // The camera's coordinates in 3D space