Ejemplo n.º 1
0
void Camera::setOrigin(const Vector3& newOrigin)
{
	_origin = newOrigin;
	_prevOrigin = _origin;

	updateModelview();
	m_update();
	GlobalCamera().movedNotify();
}
Ejemplo n.º 2
0
void Camera::setAngles(const Vector3& newAngles)
{
	_angles = newAngles;
	_prevAngles = _angles;

	updateModelview();
	m_update();
	GlobalCamera().movedNotify();
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
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();
}
Ejemplo n.º 5
0
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();
	}	
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
	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 );
		}
	}
Ejemplo n.º 8
0
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);
}
Ejemplo n.º 9
0
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();
}
Ejemplo n.º 10
0
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();
}