void Camera::setOrigin(const Vector3& newOrigin) { _origin = newOrigin; _prevOrigin = _origin; updateModelview(); m_update(); GlobalCamera().movedNotify(); }
void Camera::setAngles(const Vector3& newAngles) { _angles = newAngles; _prevAngles = _angles; updateModelview(); m_update(); GlobalCamera().movedNotify(); }
void Camera::addRadius(float r) { float oldRadius=radius; radius+=r; clamp(radius,50,400); float rd=radius-oldRadius; Matrix4 mr; mr.translate(0,0,-rd); mr*=modelview; modelview=mr; updateModelview(); }
void Camera::keyControl(float dtime) { int angleSpeed = getCameraSettings()->angleSpeed(); int movementSpeed = getCameraSettings()->movementSpeed(); // Update angles if (movementflags & MOVE_ROTLEFT) _angles[CAMERA_YAW] += 15 * dtime* angleSpeed; if (movementflags & MOVE_ROTRIGHT) _angles[CAMERA_YAW] -= 15 * dtime * angleSpeed; if (movementflags & MOVE_PITCHUP) { _angles[CAMERA_PITCH] += 15 * dtime* angleSpeed; if (_angles[CAMERA_PITCH] > 90) _angles[CAMERA_PITCH] = 90; } if (movementflags & MOVE_PITCHDOWN) { _angles[CAMERA_PITCH] -= 15 * dtime * angleSpeed; if (_angles[CAMERA_PITCH] < -90) _angles[CAMERA_PITCH] = -90; } updateModelview(); freemoveUpdateAxes(); // Update position if (movementflags & MOVE_FORWARD) _origin += forward * (dtime * movementSpeed); if (movementflags & MOVE_BACK) _origin += forward * (-dtime * movementSpeed); if (movementflags & MOVE_STRAFELEFT) _origin += right * (-dtime * movementSpeed); if (movementflags & MOVE_STRAFERIGHT) _origin += right * (dtime * movementSpeed); if (movementflags & MOVE_UP) _origin += g_vector3_axis_z * (dtime * movementSpeed); if (movementflags & MOVE_DOWN) _origin += g_vector3_axis_z * (-dtime * movementSpeed); updateModelview(); }
void Camera::rotate(float a, float x, float y, float z) { //rotate around the camera's axes (axises?) by a Vector3 vy=getUpVector()*y; Vector3 vx=getRightVector()*x; Vector3 vz=getCameraNorm()*z; Vector3 total=vx+vy+vz; if (total.length()>0.001) { total.normalise(); modelview.rotate(a,total.x,total.y,total.z); updateModelview(); } }
void Viewport::reset() { // reset values that would become inappropr. selection = 0; hover = -1; // reset limiters to most-lazy values setLimiters(0); // update y-axis (used by updateModelView()) updateYAxis(); // update coordinate system updateModelview(true); }
void Camera::applyView() { cgeAssert( isAttached() ); getNode().update(); bool needFrustumUpdate = needProjUpdate_ || needModelUpdate_; glMatrixMode(GL_MODELVIEW); if( needModelUpdate_ ) { needModelUpdate_ = false; glLoadIdentity(); updateModelview(); glGetFloatv(GL_MODELVIEW_MATRIX,model_); } else { glLoadMatrixf(model_); } glMatrixMode(GL_PROJECTION); if( needProjUpdate_ ) { needProjUpdate_ = false; glLoadIdentity(); updateProjection(); glGetDoublev(GL_PROJECTION_MATRIX,proj_); } else { glLoadMatrixd(proj_); } if( needFrustumUpdate ) { glPushMatrix(); glMultMatrixf( model_ ); float transform[ 16 ]; glGetFloatv( GL_PROJECTION_MATRIX, transform ); glPopMatrix(); frustum_.setFromTransform( transform ); } }
void Viewport::drawBackground(QPainter *painter, const QRectF &rect) { // update geometry int nwidth = painter->device()->width(); int nheight = painter->device()->height(); if (nwidth != width || nheight != height) { width = nwidth; height = nheight; zoom = 1.f; updateYAxis(); // update transformation (needed already for legend, axes drawing) updateModelview(); // defer buffer update (do not hinder resizing with slow update) buffers[0].dirty = buffers[1].dirty = true; resizeTimer.start(150); } // draw drawScene(painter); }
void Camera::freeMove(int dx, int dy) { int angleSpeed = getCameraSettings()->angleSpeed(); // free strafe mode, toggled by the keyboard modifiers if (m_strafe) { const float strafespeed = GlobalEventManager().MouseEvents().getCameraStrafeSpeed(); const float forwardStrafeFactor = GlobalEventManager().MouseEvents().getCameraForwardStrafeFactor(); _origin -= vright * strafespeed * dx; if (m_strafe_forward) { _origin += vpn * strafespeed * dy * forwardStrafeFactor; } else { _origin += vup * strafespeed * dy; } } else { // free rotation const float dtime = 0.1f; const float zAxisFactor = getCameraSettings()->invertMouseVerticalAxis() ? -1.0f : 1.0f; _angles[CAMERA_PITCH] += dy * dtime * angleSpeed * zAxisFactor; _angles[CAMERA_YAW] += dx * dtime * angleSpeed; if (_angles[CAMERA_PITCH] > 90) _angles[CAMERA_PITCH] = 90; else if (_angles[CAMERA_PITCH] < -90) _angles[CAMERA_PITCH] = -90; if (_angles[CAMERA_YAW] >= 360) _angles[CAMERA_YAW] -=360; else if (_angles[CAMERA_YAW] <= 0) _angles[CAMERA_YAW] +=360; } updateModelview(); freemoveUpdateAxes(); }
void Camera::mouseControl(int x, int y) { int movementSpeed = getCameraSettings()->movementSpeed(); float xf, yf; xf = (float)(x - width/2) / (width/2); yf = (float)(y - height/2) / (height/2); xf *= 1.0f - fabsf(yf); if (xf < 0) { xf += 0.1f; if (xf > 0) xf = 0; } else { xf -= 0.1f; if (xf < 0) xf = 0; } _origin += forward * (yf * 0.1f* movementSpeed); _angles[CAMERA_YAW] += xf * -0.1f * movementSpeed; updateModelview(); }