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);
}
}
} 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) {
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);
Vec3 camera_pos = camera->getPosition();
float x = event.tfinger.dx * v_width/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();
} else if (event.type == SDL_MOUSEMOTION) {
if (event.motion.which == SDL_TOUCH_MOUSEID) continue;

View File

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

View File

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