Qt und OpenGL Probleme



  • Hallo,
    Ich habe ein Problem mit Qt in Verbindung mit Opengl:
    Wenn ich z.B.: Dreiecke zeichnen will, erscheinen sie nicht, aber ich glaube der Code dürfte es besser erklären.

    #include <QtGui>
    #include <QtOpenGL>
    
    #include <math.h>
    
    #include "glwidget.h"
    #include "physics.h"
    
    #ifndef GL_MULTISAMPLE
    #define GL_MULTISAMPLE  0x809D
    #endif
    
    GLWidget::GLWidget(QWidget *parent)
        : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
    {
        qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);
        physx = new physics;
        double pos[6]={-1,-2,0,1,3,0};
        physx->init(2, pos, 0,0);
    }
    
    GLWidget::~GLWidget()
    {
    }
    
    QSize GLWidget::minimumSizeHint() const
    {
        return QSize(50, 50);
    }
    
    QSize GLWidget::sizeHint() const
    {
        return QSize(400, 400);
    }
    
    void GLWidget::initializeGL()
    {
        qglClearColor(qtGreen.dark());
        glClearDepth(1.0f);
        glEnable(GL_DEPTH_TEST);
      //  glEnable(GL_CULL_FACE);
        glShadeModel(GL_SMOOTH);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_MULTISAMPLE);
        static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
        glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
        paintGL();
    }
    
    void GLWidget::paintGL()
    {
        physx->compute2D();
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        for(int i=0; i<physx->data.size(); i++)
        {
            glTranslatef(physx->data[i].pos.x, physx->data[i].pos.y, -10);
            glBegin(GL_TRIANGLES);
            glVertex3f(0,0,0);
            glVertex3f(1,1,1);
            glVertex3f(2,0,0);
            glEnd();
            glLoadIdentity();
        }
    #ifdef andererversuch
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glRotatef(67,0,1,0);
          glLoadIdentity();
    
          glTranslatef(-1.5f,0.0f,-6.0f);
    
          glBegin(GL_TRIANGLES);
            glVertex3f( 0.0f, 1.0f, 0.0f);
            glVertex3f(-1.0f,-1.0f, 0.0f);
            glVertex3f( 1.0f,-1.0f, 0.0f);
          glEnd();
    
          glTranslatef(3.0f,0.0f,0.0f);
    
          glBegin(GL_QUADS);
            glVertex3f(-1.0f, 1.0f, 0.0f);
            glVertex3f( 1.0f, 1.0f, 0.0f);
            glVertex3f( 1.0f,-1.0f, 0.0f);
            glVertex3f(-1.0f,-1.0f, 0.0f);
          glEnd();
    #endif
    }
    
    void GLWidget::resizeGL(int width, int height)
    {
        int side = qMin(width, height);
        glViewport((width - side) / 2, (height - side) / 2, side, side);
    
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
    #ifdef QT_OPENGL_ES_1
        glOrthof(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0);
    #else
        glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0);
    #endif
        glMatrixMode(GL_MODELVIEW);
    }
    

    Da sehe ich nur den grünen Hintergrund. Ich weis wirklich nicht mehr weiter.
    Danke im Voraus

    mfg



  • Du setzt weder Farbe noch Textur deiner Dreiecke. Schalte mal das "Licht" aus und versuch einfach mal ein rotes Dreieck zu zeichnen. Außerdem kann es noch auf die Reihenfolge ankommen in der du die Dreiecke malst. Die Rückseite wird unter Umständen nicht gemalt.



  • Also bei mir ist noch das Viewport ein bischen anderst gesetzt.
    Also Vorsclag, ev liegts ja da dran.

    glViewport(0,0,width,height);
    

    Gruß



  • Also das ViewPort definiert ja den Platz welchen Du von der QT bekommst.
    Das Viewport ist nicht die sicht IN das PC Modell,
    deondern der Platz auf dem Bildschirm, den du mit Linealnachmessen kannst.
    Gruß



  • Danke, habs probiert aber funktioniert leider nicht..



  • Laso meiner Meinung nachst löschst Du deine Matrizen zu oft.
    glLoadidentity nach dem zeichnen ??

    Wobei ich selber oft Probleme damit habe. 🙂
    Ich tipp auch immer nur ein bischen durch die Gegend und dann läufts eben irgendwann mal *g*
    :xmas2:



  • Machst Du ein

    gluLookAt(10,10,10,    0,0,0,    0,1,0);
    

    ???



  • keine chance.. nichts geht! hättest du vllt. ein funktionierendes Qt Programm mit OpenGL, egal welches. Ich versteh einfach nicht was ich falsch mache.. 😕
    Naja, Frohe Weihnachten!! :xmas1: :xmas1:



  • ^^ Funktionierend ist gut.
    Ich habe selbst Probleme, aber ich sehe bei mir ein bischen etwas.
    Könnte Dir ein Projekt schicken, welches ich aus einem Buch habe.
    Die anderen sind ziemlich groß, weil eben noch eine riesige datenstruktur (WingedEdge) dran hängt.
    Gibst Du mir E-Mail Adresse, oder soll ich den code hier rein kopieren ??

    Dir auch fröhliche QT-OpenGL Weihnachten. Wir sollte christbäume zeichnen und keine dreiecke *ggg*



  • das ist war 😃
    fred_14@gmx.at kannst du ein beispiel schicken, danke!



  • Hi Sorry, aber ich kann Dir nichts schicken
    Die kommen alle wieder zurück
    Gruß



  • 🙂 ok. dann nimm franz.scherr@gmail.com
    mfg



  • Hast Du und klappts ??



  • carrbit schrieb:

    🙂 ok. dann nimm franz.scherr@gmail.com
    mfg

    Ich hoffe, du hast einen guten Spam-Schutz.

    Ich halte es nicht für Klug, seine E-Mail-Adresse so ins Netz zu stellen. Du solltest lieber die Mail Funktion des Forums benutzen. Dafür müsste man sich natürlich anmelden.


Anmelden zum Antworten