Jump to content

  • Log In with Google      Sign In   
  • 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.

  • You cannot reply to this topic
5 replies to this topic

#1 rejak   Members   -  Reputation: 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;


Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 10591

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...

#3 rejak   Members   -  Reputation: 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.


#4 DT....   Members   -  Reputation: 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....



#5 cephalo   Members   -  Reputation: 457

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.



#6 Doublefris   Members   -  Reputation: 268

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.



PARTNERS