• Create Account

## problem with quaternion camera

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

5 replies to this topic

### #1rejak  Members

114
Like
0Likes
Like

Posted 22 August 2013 - 03:30 AM

I have problems implementing a quaternion camera. It looks weird, it looks like the camera is not rotating but the object at the x,y-plane is rotating.

class Camera
{
public:
Camera();
virtual ~Camera();

void rotate_mouse(int16_t x, int16_t y);
void rotate(double angle, glm::dvec3 axis);
void update();

protected:
private:
glm::dvec3 pos;
glm::dvec3 tar;
glm::dvec3 up;
};

Camera::Camera()
: pos(0,0,-5), tar(0,0,1), up(1,0,0)
{
update();
}

void Camera::rotate_mouse(int16_t x, int16_t y)
{
glm::dvec3 axis = glm::cross(tar-pos, up);

glm::normalize(axis);

rotate((double)y/1000.0f, axis);
rotate((double)x/1000.0f, glm::dvec3(0.0f, 1.0f, 0.0f));
}

void Camera::rotate(double angle, glm::dvec3 axis)
{
glm::dquat temp(cos(angle/2),
axis.x * sin(angle/2),
axis.y * sin(angle/2),
axis.z * sin(angle/2));

glm::dquat quat_view(0, tar);

glm::dquat result = (temp * quat_view) * glm::conjugate(temp);

tar.x = result.x;
tar.y = result.y;
tar.z = result.z;
}

void Camera::update()
{
gluLookAt(pos[0], pos[1], pos[2],
tar[0], tar[1], tar[2],
up[0], up[1], up[2]);
}

case SDL_MOUSEMOTION:
if (dragging)
{
//graphics->get_camera()->rotate(event.motion.xrel/1000000.0f, glm::vec3(0.f,1.f,0.f));
graphics->get_camera()->rotate_mouse(event.motion.xrel, event.motion.yrel);
graphics->get_camera()->update();
}
break;


### #2Álvaro  Members

20235
Like
0Likes
Like

Posted 22 August 2013 - 03:50 AM

Place more than one object in the scene and you might be able to tell whether the object or the camera is rotating...

### #3rejak  Members

114
Like
0Likes
Like

Posted 22 August 2013 - 04:12 AM

Hmm, maybe i've explained the problem not right. I have a camera and if i move the mouse the camera should rotate but the camera should not move to an other point, just rotating. But I can see the objects placed in the world, when i move the camera from the other side.

I can see the camera rotating AND the object a hexagonal tiled board, rotates very ugl arround himself.

Edit:
Even the camera rotation is correct. It rotates somehow but not in the right direction

Edited by rejak, 22 August 2013 - 05:20 AM.

### #4DT....  Members

487
Like
0Likes
Like

Posted 23 August 2013 - 03:13 AM

Hmm, maybe i've explained the problem not right.

A video (youtube or whatever) would be best....

### #5cephalo  Members

739
Like
0Likes
Like

Posted 26 August 2013 - 04:56 PM

I've had some problems with camera rotation that had to do with changing platforms. Sometimes the order of operations is different depending on the library you are using. For example, in SlimDX I had to say quat * rotMatrix, then when I switched to SharpDX I had to say rotMatrix * quat, and then in the latest SharpDX I had to go back to quat * rotMatrix. The order of terms changes things, so watch out for that. It depends upon how the '*' operator is overloaded.

### #6Doublefris  Members

316
Like
0Likes
Like

Posted 31 August 2013 - 02:35 PM

Make sure you are multiplying with the inverse view matrix in your transformations.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.