예제 #1
0
파일: zpr.c 프로젝트: lulzmachine/OpenGLHF
static void
zprMotion(int x, int y)
{
  bool changed = false;

  const int dx = x - _mouseX;
  const int dy = y - _mouseY;

  if (dx==0 && dy==0)
    return;

  if (_mouseRight)
    {
      objectPositionZ += dy * 0.01f;
      changed = true;
    }
  else if (_mouseLeft)
    {
      objectRotationHeading += dx * 0.3f;
      objectRotationPitch += dy * 0.3f;
      changed = true;
    }

  if (changed)
    {
      updateObjectMatrix();
    }


  if (_mouseMiddle)
    {
      float speed = 0.05f;
      cameraPositionX += _cameraMatrix[0] * speed * -dx;
      cameraPositionY += _cameraMatrix[4] * speed * -dx;
      cameraPositionZ += _cameraMatrix[8] * speed * -dx;

      cameraPositionX += _cameraMatrix[1] * speed * dy;
      cameraPositionY += _cameraMatrix[5] * speed * dy;
      cameraPositionZ += _cameraMatrix[9] * speed * dy;
    }
  else if (_mouseRight)
    {
      float speed = 0.05f;
      cameraPositionX += _cameraMatrix[2] * speed * -dy;
      cameraPositionY += _cameraMatrix[6] * speed * -dy;
      cameraPositionZ += _cameraMatrix[10] * speed * -dy;
    }
  else if (_mouseLeft)
    {
      cameraRotationHeading += dx * 0.3f;
      cameraRotationPitch += dy * 0.3f;
    }


  updateCameraMatrix();

  _mouseX = x;
  _mouseY = y;

}
예제 #2
0
glm::mat4 Camera::getOrientationMatrix(){
	if( eyeChanged ){
		updateCameraMatrix();
	}
	glm::mat4 orientationMat(view);
	orientationMat[3] = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
	return orientationMat;
}
예제 #3
0
glm::mat4 Camera::getCameraMatrix(){
	if( projectionChanged ){
		updateProjectionMatrix();
	}
	if( eyeChanged ){
		updateCameraMatrix();
	}
	return camera;
}
예제 #4
0
파일: zpr.c 프로젝트: lulzmachine/OpenGLHF
void
zprInit()
{
  updateObjectMatrix();
  updateCameraMatrix();

  glutReshapeFunc(zprReshape);
  glutMouseFunc(zprMouse);
  glutMotionFunc(zprMotion);
  glutKeyboardFunc(zprKey);
}
예제 #5
0
void zprInit(mat4 *viewMatrix, vec3 cam, vec3 point)
{
//    shader = s; // EN shader?! Orimligt!
//    viewMatName = vMatName;
//    projMatName = pMatName;
    _cameraMatrix = viewMatrix;
//    _projectionMatrix = projMatrix; // ???
    camera = cam;
    lookAtPoint = point;
    up = SetVector(0, 1, 0);

    updateCameraMatrix(NULL);

    glutMouseFunc(zprMouse);
    glutKeyboardFunc(zprKey);
    glutMotionFunc(zprMouseFunc);
}
예제 #6
0
파일: zpr.c 프로젝트: lulzmachine/OpenGLHF
static void
zprKey(unsigned char key, int x, int y)
{
  float speed = 10.f;
  float speedX = 0.f;
  float speedY = 0.f;
  float speedZ = 0.f;

  switch (key)
   {
   case 'w':
     speedZ = 1.f;
     break;
   case 's':
     speedZ = -1.f;
     break;
   case 'q':
     speedY = -1.f;
     break;
   case 'e':
     speedY = 1.f;
     break;
   case 'd':
     speedX = -1.f;
     break;
   case 'a':
     speedX = 1.f;
     break;
   }

  cameraPositionX += _cameraMatrix[0] * speed * speedX;
  cameraPositionY += _cameraMatrix[4] * speed * speedX;
  cameraPositionZ += _cameraMatrix[8] * speed * speedX;
  
  cameraPositionX += _cameraMatrix[1] * speed * speedY;
  cameraPositionY += _cameraMatrix[5] * speed * speedY;
  cameraPositionZ += _cameraMatrix[9] * speed * speedY;

  cameraPositionX += _cameraMatrix[2] * speed * speedZ;
  cameraPositionY += _cameraMatrix[6] * speed * speedZ;
  cameraPositionZ += _cameraMatrix[10] * speed * speedZ;

  updateCameraMatrix();
}
예제 #7
0
파일: zpr.c 프로젝트: Seanberite/CG
void zprMouseFunc(int x, int y)
{
    if(_mouseLeft)
    {
        angle_y = (float)(x - lastX) *0.002;
        angle_x = (float)(y - lastY) *0.002;
//        tmpMat1 = ArbRotate(right, angle_x);
        tmpMat1 = ArbRotate(right, -angle_x); // Reversed, also looks more reasonable (but wasn't interesting before the Mac version got isFlipped.)
        tmpMat2 = ArbRotate(up, -angle_y); // Reversed; I think this feels better /Ingemar 130901

        rotMat = Mult(tmpMat2, tmpMat1);
        updateCameraMatrix(&rotMat);

        lastX = x;
        lastY = y;
    }

  printf("%d %d\n", x, y);
  printf("diff: x: %3.5f  y: %3.5f\n", angle_y, angle_x);
}
예제 #8
0
void zprMouseFunc(int x, int y)
{
//	printf("MouseFunc\n");

    if(_mouseLeft)
    {
        angle_y = (float)(x - lastX) *0.002;
        angle_x = (float)(y - lastY) *0.002;
//        tmpMat1 = ArbRotate(right, angle_x);
        tmpMat1 = ArbRotate(right, -angle_x); // Reverse this too - only Linux???
        tmpMat2 = ArbRotate(up, -angle_y); // Reversed; I think this feels better /Ingemar 130901

        rotMat = Mult(tmpMat2, tmpMat1);
        updateCameraMatrix(&rotMat);

        lastX = x;
        lastY = y;
    }

//	printf("%d %d\n", x, y);
//	printf("diff: x: %3.5f  y: %3.5f\n", angle_y, angle_x);
}
예제 #9
0
static void
zprKey(unsigned char key, int x, int y)
{
  float speed = 0.3, rotSpeed = 0.3;
    GLfloat speedX = 0, speedY = 0, speedZ = 0,
    angle = 0.0,
    dX = 0, dY = 0, dZ = 0;

    bool turnedX = false, turnedY = false;

 //   printf("%c\n", key);

  switch (key)
   {
   case 'i':
     speedY = speed;
     break;
   case 'k':
     speedY = -speed;
     break;
   case 'j':
     speedX = -speed;
     break;
   case 'l':
     speedX = speed;
     break;

   case 'd':
        angle = -rotSpeed;
        turnedY = true;
     break;
   case 'a':
        angle = rotSpeed;
        turnedY = true;
     break;
   case 'w':
     speedZ = -speed;
     break;
   case 's':
     speedZ = speed;
     break;

   case 'q':
    angle = -rotSpeed;
    turnedX = true;
     break;
   case 'e':
    angle = rotSpeed;
    turnedX = true;
     break;
   }

    dX = (GLfloat) _cameraMatrix->m[0] * speedX + _cameraMatrix->m[4] * speedY + _cameraMatrix->m[8] * speedZ;
    dY = (GLfloat) _cameraMatrix->m[1] * speedX + _cameraMatrix->m[5] * speedY + _cameraMatrix->m[9] * speedZ;
    dZ = (GLfloat) _cameraMatrix->m[2] * speedX + _cameraMatrix->m[6] * speedY + _cameraMatrix->m[10] * speedZ;

    camera.x += dX;
    camera.y += dY;
    camera.z += dZ;

    lookAtPoint.x += dX;
    lookAtPoint.y += dY;
    lookAtPoint.z += dZ;

    if(turnedY)
    {
        tMat = T(-camera.x, -camera.y, -camera.z);
        rotMat = ArbRotate(up, angle);
        lookAtPoint = MultVec3(tMat, lookAtPoint);
        lookAtPoint = MultVec3(rotMat, lookAtPoint);
        tMat = T(camera.x, camera.y, camera.z);
        lookAtPoint = MultVec3(tMat, lookAtPoint);
    }
    if(turnedX)
    {
        tMat = T(-lookAtPoint.x, -lookAtPoint.y, -lookAtPoint.z);
        rotMat = ArbRotate(right, angle);
        camera = MultVec3(tMat, camera);
        camera = MultVec3(rotMat, camera);
        tMat = T(lookAtPoint.x, lookAtPoint.y, lookAtPoint.z);
        camera = MultVec3(tMat, camera);
    }
    updateCameraMatrix(0);
}
예제 #10
0
glm::mat4 Camera::getView(){
	if( eyeChanged ){
		updateCameraMatrix();
	}
	return view;
}