Followers 0

problem with quaternion camera

5 posts in this topic

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;

0

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

Share on other sites
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
0

Share on other sites

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

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

0

Share on other sites

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.

0

Share on other sites

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

0

Create an account

Register a new account

Followers 0

• 19
• 14
• 23
• 11
• 28