Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. OpenGL gluPickMatrix not existing
Qt 6.11 is out! See what's new in the release blog

OpenGL gluPickMatrix not existing

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 4 Posters 2.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    sandro4912
    wrote on last edited by
    #3

    OK i could install it. But what else do i have to do that the project finds it?

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #4

      Taking a look at the package content, the header is under "GL/glu.h".

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • S Offline
        S Offline
        sandro4912
        wrote on last edited by
        #5

        I added the header however its not found.

        Steps i took:

        sudo apt-get update
        sudo apt-get install libglu1-mesa-dev
        

        Restart the project and

        #include "gl/glu.h"

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #6

          Casing is important.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          1
          • S Offline
            S Offline
            sandro4912
            wrote on last edited by
            #7

            Ok I changed it to the correct:

            "GL/glu.h".

            It looks like it is found. However when i compile i still get an error with the gluPickMatrix like this:

            ../tetrahedron/tetrahedron.cpp:128: undefined reference togluPickMatrix'
            `

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #8

              You need to also link to libGLU.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              2
              • W Offline
                W Offline
                wrosecrans
                wrote on last edited by
                #9

                GLU was last updated in the 1990's, it's basically deprecated, and depends on functionality that was deprecated from OpenGL years ago. Ideally you should find a different way of doing what you are trying to accomplish. If you are using any kind of modern OpenGL with vertex shaders from the last ~15 - 20 years, GLU will have no idea how to understand your projection matrices, and the results it gives you will be nonsensical or wrong even if you get it working.

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  sandro4912
                  wrote on last edited by
                  #10

                  The whole code which uses the gluPickMatrix looks like this.

                  int Tetrahedron::faceAtPosition(const QPoint &pos)
                  {
                      constexpr int MaxSize = 512;
                      GLuint buffer[MaxSize];
                      GLint viewport[4];
                  
                      makeCurrent();
                  
                      glGetIntegerv(GL_VIEWPORT, viewport);
                      glSelectBuffer(MaxSize, buffer);
                      glRenderMode(GL_SELECT);
                  
                      glInitNames();
                      glPushName(0);
                  
                      glMatrixMode(GL_PROJECTION);
                      glPushMatrix();
                      glLoadIdentity();
                      gluPickMatrix(GLdouble(pos.x()), GLdouble(viewport[3] - pos.y()),
                                    5.0, 5.0, viewport);
                      GLdouble x = GLdouble(width()) / height();
                      glFrustum(-x, x, -1.0, 1.0, 4.0, 15.0);
                      draw();
                      glMatrixMode(GL_PROJECTION);
                      glPopMatrix();
                  
                      if (!glRenderMode(GL_RENDER)) {
                          return -1;
                      }
                      return static_cast<int>(buffer[3]);
                  }
                  

                  What would be an alternative?

                  And how can i link against libGLU?

                  jsulmJ 1 Reply Last reply
                  0
                  • S sandro4912

                    The whole code which uses the gluPickMatrix looks like this.

                    int Tetrahedron::faceAtPosition(const QPoint &pos)
                    {
                        constexpr int MaxSize = 512;
                        GLuint buffer[MaxSize];
                        GLint viewport[4];
                    
                        makeCurrent();
                    
                        glGetIntegerv(GL_VIEWPORT, viewport);
                        glSelectBuffer(MaxSize, buffer);
                        glRenderMode(GL_SELECT);
                    
                        glInitNames();
                        glPushName(0);
                    
                        glMatrixMode(GL_PROJECTION);
                        glPushMatrix();
                        glLoadIdentity();
                        gluPickMatrix(GLdouble(pos.x()), GLdouble(viewport[3] - pos.y()),
                                      5.0, 5.0, viewport);
                        GLdouble x = GLdouble(width()) / height();
                        glFrustum(-x, x, -1.0, 1.0, 4.0, 15.0);
                        draw();
                        glMatrixMode(GL_PROJECTION);
                        glPopMatrix();
                    
                        if (!glRenderMode(GL_RENDER)) {
                            return -1;
                        }
                        return static_cast<int>(buffer[3]);
                    }
                    

                    What would be an alternative?

                    And how can i link against libGLU?

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #11

                    @sandro4912 said in OpenGL gluPickMatrix not existing:

                    And how can i link against libGLU?
                    Add

                    LIBS += -lGLU
                    

                    to your pro file.

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    1
                    • S Offline
                      S Offline
                      sandro4912
                      wrote on last edited by
                      #12

                      The linking worked.

                      However i found this approach to implement gluPickMatrix and not need the glu library:

                      void gluPickMatrix(
                              GLdouble x, GLdouble y, GLdouble deltax, GLdouble deltay,
                              GLint viewport[4])
                      {
                         if (deltax <= 0 || deltay <= 0) {
                             return;
                           }
                      
                         /* Translate and scale the picked region to the entire window */
                         glTranslated((viewport[2] - 2 * (x - viewport[0])) / deltax,
                                 (viewport[3] - 2 * (y - viewport[1])) / deltay, 0);
                         glScaled(viewport[2] / deltax, viewport[3] / deltay, 1.0);
                      }
                      
                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved