• Advertisement
Sign in to follow this  

problem with quaternion camera

This topic is 1604 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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;

Share this post


Link to post
Share on other sites
Advertisement
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

Share this post


Link to post
Share on other sites


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

 

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

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement