Exemplo n.º 1
0
void cursorpos_callback(GLFWwindow* window, double xpos, double ypos)
{
	if(!mouseButtonRightReleased)//Êó±êÓÒ¼üÍ϶¯
	{
		double xpos, ypos;
		glfwGetCursorPos(window, &xpos, &ypos);

		int width, height;
		glfwGetWindowSize(window, &width, &height);

		if(xpos < 0 || xpos >= width || ypos < 0 || ypos > height)
			return ;

		vec3 v1 = trackball_ptov(mouseButtonRightLastpos.x, mouseButtonRightLastpos.y, width, height);
		vec3 v2 = trackball_ptov(xpos, ypos, width, height);

		vec3 axis = cross(v1, v2);
		float angle = acos(dot(v1, v2)) * 180 / M_PI;

		camera = rotate(mat4(), angle, axis) * camera;//mat4_cast(angleAxis(angle, axis))ÓÐbug

		mouseButtonRightLastpos.x = xpos;
		mouseButtonRightLastpos.y = ypos;
	}
}
Exemplo n.º 2
0
void mouseMotion(int x, int y)
{
    float curPos[3], dx, dy, dz;

    trackball_ptov(x, y, winWidth, winHeight, curPos);
	if(trackingMouse)
	{
		dx = curPos[0] - lastPos[0];
		dy = curPos[1] - lastPos[1];
		dz = curPos[2] - lastPos[2];

		if (dx || dy || dz) {
			angle = 90.0F * sqrt(dx*dx + dy*dy + dz*dz);

			axis[0] = lastPos[1]*curPos[2] - lastPos[2]*curPos[1];
			axis[1] = lastPos[2]*curPos[0] - lastPos[0]*curPos[2];
			axis[2] = lastPos[0]*curPos[1] - lastPos[1]*curPos[0];

			lastPos[0] = curPos[0];
			lastPos[1] = curPos[1];
			lastPos[2] = curPos[2];
		}
	}
    glutPostRedisplay();
}
Exemplo n.º 3
0
void startMotion(int x, int y)
{
    trackingMouse = true;
    redrawContinue = false;
    startX = x; startY = y;
    curx = x; cury = y;
    trackball_ptov(x, y, winWidth, winHeight, lastPos);
	trackballMove=true;
}
Exemplo n.º 4
0
void startMotion(long time, int button, int x, int y) {
   if (!trackballEnabled) return;

   trackingMouse = true;
   redrawContinue = false;
   startX = x; startY = y;
   curx = x; cury = y;
   trackball_ptov(x, y, winWidth, winHeight, lastPos);
   trackballMove = true;
}
Exemplo n.º 5
0
void mouseMotion(int x, int y) {
   float curPos[3], dx, dy, dz;

   if (zoomState == false && shiftState == false) {

      trackball_ptov(x, y, winWidth, winHeight, curPos);

      dx = curPos[0] - lastPos[0];
      dy = curPos[1] - lastPos[1];
      dz = curPos[2] - lastPos[2];

      if (dx||dy||dz) {
         angle = 90.0 * sqrt(dx*dx + dy*dy + dz*dz);

         axis[0] = lastPos[1]*curPos[2] - lastPos[2]*curPos[1];
         axis[1] = lastPos[2]*curPos[0] - lastPos[0]*curPos[2];
         axis[2] = lastPos[0]*curPos[1] - lastPos[1]*curPos[0];

         lastPos[0] = curPos[0];
         lastPos[1] = curPos[1];
         lastPos[2] = curPos[2];
      }

   }
   else if (zoomState == true) {
      curPos[1] = y;
      dy = curPos[1] - lastPos[1];

      if (dy) {
         modelTrans[2] += dy * 0.01;
         lastPos[1] = curPos[1];
      }
   }
   else if (shiftState == true) {
      curPos[0] = x;
      curPos[1] = y;
      dx = curPos[0] - lastPos[0];
      dy = curPos[1] - lastPos[1];

      if (dx) {
         modelTrans[0] += dx * 0.01;
         lastPos[0] = curPos[0];
      }
      if (dy) {
         modelTrans[1] -= dy * 0.01;
         lastPos[1] = curPos[1];
      }
   }
   glutPostRedisplay( );

}
Exemplo n.º 6
0
void
mouseMotion(int x, int y)
{
   float curPos[3], dx, dy, dz;

   trackball_ptov(x, y, winWidth, winHeight, curPos);
   if(trackingMouse)
   {
      dx = curPos[0] - lastPos[0];
      dy = curPos[1] - lastPos[1];
      dz = curPos[2] - lastPos[2];

      if (dx || dy || dz) {
	      angle = 180.0 * sqrt(dx*dx + dy*dy + dz*dz)/M_PI;

        axis[0] = lastPos[1]*curPos[2] - lastPos[2]*curPos[1];
	      axis[1] = lastPos[2]*curPos[0] - lastPos[0]*curPos[2];
	      axis[2] = lastPos[0]*curPos[1] - lastPos[1]*curPos[0];

	      lastPos[0] = curPos[0];
	      lastPos[1] = curPos[1];
	      lastPos[2] = curPos[2];
      }

     glMatrixMode(GL_MODELVIEW);
     GLfloat curMvM[16];
     glGetFloatv(GL_MODELVIEW_MATRIX,curMvM);
        
     glLoadIdentity();
     glRotatef(angle, axis[0], axis[1], axis[2]);
     glMultMatrixf(curMvM);
     glPushMatrix();
     glGetFloatv(GL_MODELVIEW_MATRIX,curMvM);
    
     glLoadIdentity();
     glTranslatef(0, 0, 0);
     glMultMatrixf(curMvM);

   } 

   glutPostRedisplay();
}
Exemplo n.º 7
0
void startMotion(long time, int button, int x, int y) {
   startX = x; startY = y;
   trackball_ptov(x, y, winWidth, winHeight, lastPos);
   trackballMove = true;
}