Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 4 of 4

Thread: Implementing a Camera + HUD

  1. #1
    Junior Member Newbie
    Join Date
    May 2012
    Posts
    2

    Implementing a Camera + HUD

    Dear community, I'm glad to write my first post today!

    Unfortunately, this is about a struggle between me and opengl, which has lasted a few weeks now, and, even though I could have accomplished some results, I'm still far from my objectives.

    I have implemented a basic opengl world, using the glfw libraries, which ( till now ) draws a simple ground plane ( a grid ), and a few squares around. A few days ago, I added support for the "camera", using a vector to store its position, and a quaternion for its rotation. It's taken a while, but it works pretty good.

    Can you please confirm me that this is how things should be implemented?

    1) INIT ( enabling options, lighting, perspective, etc )
    2) CAMERA TRANSFORMS ( translation, rotation )
    3) WORLD OBJECTS

    Once applied the transformations to the current MODELVIEW matrix to set the camera, I have to use glPushMatrix and glPopMatrix to draw things with respect to the default view, and not the current one ( the one of the camera ), am I right?

    So, things should look like:
    ------------------------
    ...
    //Camera
    glTranslated();
    glRotatef();

    //Object1
    glPushMatrix();
    glLoadIdentity();
    //DRAW
    glPopMatrix();

    //Object2
    glPushMatrix();
    glLoadIdentity();
    //DRAW
    glPopMatrix();

    ...

    ---------------

    This way everything seems to work. Now, I want to implement a simple HUD, which tells me the current camera orientation with respect to the initial ( default ) one. This can just be represented by three lines ( axis ) which are placed in a corner of my screen, and are rotated accordingly to the quaternion of my camera.

    Now, I'm having a few problems trying to implement this. To draw the hud, shouldn't it be enough to start drawing, without using glPushMatrix() and glPopMatrix()? It's not working these way, objects are still drawn with respect to the identity matrix.

    Thank you for your suggestions.

  2. #2
    Senior Member OpenGL Pro BionicBytes's Avatar
    Join Date
    Mar 2009
    Location
    UK, London
    Posts
    1,171
    //Object1
    glPushMatrix();
    glLoadIdentity();
    //DRAW
    glPopMatrix();
    Err, you don't want to reset the ModelView matrix when drawing something you want to leave it alone. Resetting the camera with glLoadIdentity is like not having a camera, so remove this line. When you do, all objects drawn will then be transformed onto the camera space as defined by the ModelView matrix in effect at the time of the draw call.

  3. #3
    Junior Member Newbie
    Join Date
    May 2012
    Posts
    2
    So, basically, the difference between

    Code :
    // draw obj

    and

    Code :
    glPushMatrix();
    // draw obj
    glPopMatrix();

    is that, in the first case, I draw with respect to the camera coordinates, and in the latter, to the world coordinates ( default ones )?

    Moreover, doesn't glLoadIdentity just affect the "new matrix" I have, after pushing the old one? Afaik, when you call glPushMatrix, you just put your current ( camera ) matrix apart, and start drawing in a completely new one. ut maybe I didn't get it right :/

  4. #4
    Senior Member OpenGL Pro BionicBytes's Avatar
    Join Date
    Mar 2009
    Location
    UK, London
    Posts
    1,171
    pushing the model matrix does not change anything. If the ModelView matrix has been setup with your camera transform then you will be drawing your models and transforming into camera space. If you use glLoadIdentity then you have reset the camera view matrix and reset the model matrix to identity. This means that camera space is the exact same a model space which, in this case, is the same as world space. Just be clear the camera matrix (gluLookat) affects the ModelView matrix - this is a matrix which is the result of two individual matricies that have been pre-multiplied. The View matrix is the camera, and the Model part of ModelView is your model space to world space conversion matrix.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •