Results 1 to 2 of 2

Thread: Problem using OpenGL from Qt Application

  1. #1
    Join Date
    Feb 2009
    Posts
    189
    Thanks
    2

    Cool Problem using OpenGL from Qt Application

    Dear Friends

    I am trying create an OpenGL graphics from within my QT application. I am getting the openGL window but I am unable see any graphicsItem on it.See below the code snippet

    class GraphicsView : public QGLWidget
    {
    Q_OBJECT
    public:
    GraphicsView();
    ~GraphicsView();
    protected:
    void initializeGL();
    void paintGL();
    private:
    QColor trolltechGreen;
    QColor trolltechPurple;

    GLuint object;
    GLuint makeobject();
    void quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
    GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4);
    void extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
    };

    GraphicsView::GraphicsView()
    {
    object = 0;
    trolltechGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);
    trolltechPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);

    }
    GraphicsView::~GraphicsView()
    {
    }

    void GraphicsView::initialize()
    {
    qglClearColor(trolltechPurple.dark());
    object = makeObject();
    glShadeModel(GL_FLAT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);


    }

    void GraphicsView:aintGL()
    {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslated(0.0, 0.0, -10.0);
    glRotated(xRot / 16.0, 1.0, 0.0, 0.0);
    glRotated(yRot / 16.0, 0.0, 1.0, 0.0);
    glRotated(zRot / 16.0, 0.0, 0.0, 1.0);
    glCallList(object);

    }

    GLuint GraphicsView::makeobject()
    {
    GLuint list = glGenLists(1);
    glNewList(list, GL_COMPILE);

    glBegin(GL_QUADS);

    GLdouble x1 = +0.06;
    GLdouble y1 = -0.14;
    GLdouble x2 = +0.14;
    GLdouble y2 = -0.06;
    GLdouble x3 = +0.08;
    GLdouble y3 = +0.00;
    GLdouble x4 = +0.30;
    GLdouble y4 = +0.22;

    quad(x1, y1, x2, y2, y2, x2, y1, x1);
    quad(x3, y3, x4, y4, y4, x4, y3, x3);

    extrude(x1, y1, x2, y2);
    extrude(x2, y2, y2, x2);
    extrude(y2, x2, y1, x1);
    extrude(y1, x1, x1, y1);
    extrude(x3, y3, x4, y4);
    extrude(x4, y4, y4, x4);
    extrude(y4, x4, y3, x3);

    const double Pi = 3.14159265358979323846;
    const int NumSectors = 200;

    for (int i = 0; i < NumSectors; ++i) {
    double angle1 = (i * 2 * Pi) / NumSectors;
    GLdouble x5 = 0.30 * sin(angle1);
    GLdouble y5 = 0.30 * cos(angle1);
    GLdouble x6 = 0.20 * sin(angle1);
    GLdouble y6 = 0.20 * cos(angle1);

    double angle2 = ((i + 1) * 2 * Pi) / NumSectors;
    GLdouble x7 = 0.20 * sin(angle2);
    GLdouble y7 = 0.20 * cos(angle2);
    GLdouble x8 = 0.30 * sin(angle2);
    GLdouble y8 = 0.30 * cos(angle2);

    quad(x5, y5, x6, y6, x7, y7, x8, y8);

    extrude(x6, y6, x7, y7);
    extrude(x8, y8, x5, y5);
    }

    glEnd();

    glEndList();
    return list;


    }

    void GraphicsView::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
    GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4)
    {
    qglColor(trolltechGreen);

    glVertex3d(x1, y1, -0.05);
    glVertex3d(x2, y2, -0.05);
    glVertex3d(x3, y3, -0.05);
    glVertex3d(x4, y4, -0.05);

    glVertex3d(x4, y4, +0.05);
    glVertex3d(x3, y3, +0.05);
    glVertex3d(x2, y2, +0.05);
    glVertex3d(x1, y1, +0.05);
    }

    void GraphicsView::extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
    {
    qglColor(trolltechGreen.dark(250 + int(100 * x1)));

    glVertex3d(x1, y1, +0.05);
    glVertex3d(x2, y2, +0.05);
    glVertex3d(x2, y2, -0.05);
    glVertex3d(x1, y1, -0.05);
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Now I am creating the instance of this openGL window in the mainwindow which is further called in the main.
    // My OpenGL black color background window is coming but there's no item that I am creating using makeobject()
    MainWindow::startMesh()
    {
    GraphicsView *view = new GraphicsView(this);
    view->show();
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Can someone tell me whats going wrong in this !!! Any help would be appreciated
    Thanks !

  2. #2
    Join Date
    Mar 2006
    Posts
    142
    Thanks
    8
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Problem using OpenGL from Qt Application

    I don't know if you have specific needs but consider using QGLViewer library, most of the functionnalities you can need with OpenGL in Qt should be there.

Similar Threads

  1. Problem with application icon
    By sanjayshelke in forum Qt Programming
    Replies: 4
    Last Post: 8th September 2009, 10:21
  2. OpenGL problem on msvc2008 in release
    By redoctober0 in forum Qt Programming
    Replies: 3
    Last Post: 6th February 2009, 17:59
  3. QT application with opengl and GLU
    By YuriyRusinov in forum Qt Programming
    Replies: 1
    Last Post: 9th June 2008, 12:20
  4. Qt application size problem : it is very big
    By mourad in forum Qt Programming
    Replies: 3
    Last Post: 15th May 2008, 16:55
  5. getting problem in running qtopia home screen application
    By afgan_rajesh in forum Qt for Embedded and Mobile
    Replies: 0
    Last Post: 31st January 2008, 07:01

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.