Beispiel #1
0
void Camera::drag(int x, int y)
{
	if(!isDragging) return;

	currentVector = ProjectToSphere(ScreenToNDC(x, y));

	vector3df axis = startVector.crossProduct(currentVector);
	float theta = acos(startVector.dotProduct(currentVector));

    quaternion delta(axis.x, axis.y, axis.z, -theta);

	currentQuat = delta * startQuat;
}
Beispiel #2
0
  void Camera::Rotate(
    int from_x, int from_y, int to_x, int to_y, int width, int height)
  {
    ElVisFloat from_x_pos =
      2.0 * static_cast<ElVisFloat>(from_x) / static_cast<ElVisFloat>(width) -
      1.0;
    ElVisFloat from_y_pos =
      1.0 -
      2.0 * static_cast<ElVisFloat>(from_y) / static_cast<ElVisFloat>(height);

    ElVisFloat to_x_pos =
      2.0 * static_cast<ElVisFloat>(to_x) / static_cast<ElVisFloat>(width) -
      1.0;
    ElVisFloat to_y_pos =
      1.0 -
      2.0 * static_cast<ElVisFloat>(to_y) / static_cast<ElVisFloat>(height);

    ElVisFloat3 to = ProjectToSphere(from_x_pos, from_y_pos, 0.8);
    ElVisFloat3 from = ProjectToSphere(to_x_pos, to_y_pos, .8);

    Matrix4x4 m = RotationMatrix(to, from);
    Transform(m, true);
    OnCameraChanged();
  }
Beispiel #3
0
void Camera::beginDrag(int x, int y)
{
	startVector = ProjectToSphere(ScreenToNDC(x, y));
	startQuat = currentQuat;
	isDragging = true;
}