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 6 of 6

Thread: Quick question: Newbie and modelview-matrix..

  1. #1
    Intern Contributor
    Join Date
    Aug 2011
    Posts
    76

    Quick question: Newbie and modelview-matrix..

    Consider this pseudo-code (partly from python, you'll get the idea, I think):

    Code :
    A44 = matrix([\
         [  0.96126169,   0.,           0.27563736,          0],\
         [  0.07597595,   0.96126169,  -0.26495963,          0],\
         [ -0.26495963,   0.27563736,   0.92402405,          0],\
         [  0,            0,            0,                   1])
     
    glMultMatrixf(Anew)
    // Drawing some stuff works ok
    model = glGetDoublev(GL_MODELVIEW_MATRIX)
    print "model = \n", model
     
    // This prints the following out to screen:
    //model = 
    //[[ 1.  0.  0.  0.]
    // [ 0.  1.  0.  0.]
    // [ 0.  0.  1.  0.]
    // [ 0.  0.  0.  1.]]
    // But why is it still identity matrix, like it's unaffected by multiplication???

    And then I have another problem:
    Code :
    A44 = matrix([\
         [  0.96126169,   0.,           0.27563736,          0],\
         [  0.07597595,   0.96126169,  -0.26495963,          0],\
         [ -0.26495963,   0.27563736,   0.92402405,          0],\
         [  0,            0,            0,                   1])
    glLoadMatrixd(Anew)
    // Trying to draw some new things - don't work - nothing happens!
     
    // And once again, when I try to print out current modelview matrix, I get 4x4 identity - why???

    In the last case, I suspect that the A44 matrix I've given isn't precise enough and then I suspect that the matrix isn't orthogonal - hence nothing is drawn. Is that guess correct (that I need more digits to A44) ???

  2. #2
    Advanced Member Frequent Contributor
    Join Date
    Apr 2010
    Posts
    788
    You set values on A44, but pass Anew to the OpenGL functions.
    Also, are you sure GL_MODELVIEW is the current matrix mode (set with glMatrixMode())?

  3. #3
    Intern Contributor
    Join Date
    Aug 2011
    Posts
    76
    Quote Originally Posted by carsten neumann View Post
    You set values on A44, but pass Anew to the OpenGL functions.
    Also, are you sure GL_MODELVIEW is the current matrix mode (set with glMatrixMode())?
    Oh, damn... I'm sorry, I was too fast because actually A44 = Anew. Besides that, I just inserted " glMatrixMode(GL_MODELVIEW) " just before
    glLoadMatrixd(Anew) and still nothing happens...

    My guess is that it will fail for sure, if I for instance define A44 with only 1 digit after the comma (because then the matrix is not orthogonal and I guess then it'll not show anything?) ? Is this assumption correct? Maybe I should post some python code for you, however my impression is that most people here use C++... I hoped what I had already posted would suffice, however it's good to know that you also feel this should work (so I know I'm not alone)... Maybe I made a stupid mistake somewhere. I hope more people will tell their opion... Thanks a lot for your suggesion, though I don't think my problem is yet solved.



  4. #4
    Senior Member OpenGL Pro BionicBytes's Avatar
    Join Date
    Mar 2009
    Location
    UK, London
    Posts
    1,170
    model = glGetDoublev(GL_MODELVIEW_MATRIX)
    Firstly, what are you using doubles instead of floats?
    Secondly, glGetFloatv and freinds take two arguments not one. The first is the enumerant, the second is a pointer.
    Code :
    procedure TMatrix44.GetModelViewMatrix(var result: TMatrix44);
    begin
       glGetFloatv(GL_MODELVIEW_MATRIX, @result.M.glmatrixf[0]);
    end;

  5. #5
    Intern Contributor
    Join Date
    Aug 2011
    Posts
    76
    Thanks a lot for a good answer. I gave up and thought nobody could help - still, my problem is unsolved.
    About why using doubles vs. floats: Not 100% sure, but here it says that double is better than float:

    http://3dengine.org/Avoid_glGetFloat_in_Python

    I'm using python, so my syntax should be ok, at least that's what I think. So in python, I guess there's only one argument and then a matrix that is returned/popped back from the stack...

  6. #6
    Intern Contributor
    Join Date
    Aug 2011
    Posts
    76
    hmm. Maybe it's my own mistake. Explaining a bit better, what I do (very simplified, removed a lot for simplicity):


    Code :
    glutDisplayFunc(display)
    Code :
    def display():
        global lightZeroPosition
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        glLoadIdentity()
        gluLookAt(0,0,10,0,0,0,0,1,0)
        glCallList(1) # <<=========== display list, look into here...
     
     
        # light stuff    
        glutSwapBuffers()
        return
    Display list number 1:
    Code :
    def setupDispList():
        # setup display list
        glNewList(1,GL_COMPILE)
        glPushMatrix()
        drawSomething() # <<<===== look into this function...
        cyl = gluNewQuadric()
        gluCylinder(cyl, 0.3, 0.3, 0.5, 12, 12)
        glPopMatrix()
        glEndList()
    Code :
    def drawSomething():
        glPushMatrix()
     
        # here I do my glLoadmatrixf (doesn't work) and/or glMultMatrixf(works)
        A44 = matrix([\
             [  0.96126169,   0.,           0.27563736,          0],\
             [  0.07597595,   0.96126169,  -0.26495963,          0],\
             [ -0.26495963,   0.27563736,   0.92402405,          0],\
             [  0,            0,            0,                   1])
     
        if 1:
            glLoadMatrixf(A44) # doesn't work
        else:
            glMultMatrixf(Anew) # does work
     
     
        gluCylinder(arrcyl, 0.3, 0.0, 1.0, 6, 6) # not draw with loadmatrixf, only with multmatrixf
        glutPostRedisplay()
     
        glPopMatrix()

    I think I would've been better off, it I had shown this from the beginning (thanks, laziness)...

Posting Permissions

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