Seite 1 von 2

QT/OpenGL Problem

Verfasst: 1. Dezember 2006 10:26
von KravenZ
Hi Leute,

Hab mal wieder ien Probelm und zwar folgendes. Ich habe eine QT Anwendung erstellt und ein OpenGl Widget reingepackt. nur wollte ich OpenGL Funktionen benutzen aber ich erhalte immer die Fehlermeldung... undefined reference in (irgendeine OpenGL Funktion)

Hier ist meine Widgetklasse:

Code: Alles auswählen

#ifndef _OGL_WIDGET_H_
#define _OGL_WIDGET_H_
#include <qgl.h>

namespace SWP0607 {


class OGLWidget : public QGLWidget
{
       Q_OBJECT
   

public:
       //! Default constructor
       OGLWidget( QWidget* parent = 0, const char* name = 0 );

       //! Destructor
       ~OGLWidget();

protected:
   void initializeGL();
   void resizeGL(int w, int h);
   void paintGL();

private:
   
};

}

#endif

Code: Alles auswählen

#include <GL/gl.h>
//#include <GL/glu.h>
//#include <GL/glx.h>
//#include <GL/glaux.h>
#include "OGLWidget.hh"


namespace SWP0607 {

OGLWidget::OGLWidget( QWidget* parent, const char* name )
    : QGLWidget( parent, name )
{

}


OGLWidget::~OGLWidget()
{

}

void OGLWidget::initializeGL()
{
         glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}

void OGLWidget::resizeGL(int w, int h)
{

}

void OGLWidget::paintGL()
{

}

} 
Ich denke mal dass ich irgendeine Library linken muss oder?
Nur leider habe ich keine genaue Ahnung welche und was ich noch weinger weiss ist wie man mit qmake Librarys linken kann. Dachte erstmal, dass es fast alles automatisch macht aber dem ist anscheinend nicht so. Auf der Trolltech seite wurde ich auch nicht fündig. Da stand auch etwas davon dass QT OpenGl automatisch erkennt hmm...
Weisst vielleicht einer wie das geht?

Verfasst: 1. Dezember 2006 10:44
von BartSimpson
Haste in deiner Projektdatei OpenGL "aktiviert"?

Verfasst: 1. Dezember 2006 12:31
von macman
Und QtOpenGL dazu gelinkt?

Verfasst: 1. Dezember 2006 18:01
von KravenZ
ne ich glaube beides trifft nicht zu ^^ welche sachen muss ich dazulinken und wie?

Verfasst: 1. Dezember 2006 18:08
von Christian81
KravenZ hat geschrieben:welche sachen muss ich dazulinken und wie?
Das stand schon in deinem gehijackten Thread:
http://qtforum.de/forum/viewtopic.php?t=2097#11140

Verfasst: 3. Dezember 2006 00:07
von KravenZ
Hallo,

Hab jetzt make -lXext und qmake -lXext ausprobiert aber beide klappt nicht. hab echt keine Ahnung was ich noch ausprobieren kann. Wiess echt nicht wie ich mit qmake linken kann.

Verfasst: 3. Dezember 2006 00:13
von KravenZ
Ah ich glaube es klappt jetzt. hab mal in der Makefile flogendes gesetzt:
LINK = g++ -lGL
Auf jeden Fall mekert der Compiler nicht merh beim linken. Mal schauen ob alles weitere klappt ;)

Verfasst: 3. Dezember 2006 00:19
von KravenZ
Ok es hat wirklich geklappt. BIG THX:

Verfasst: 4. Dezember 2006 15:39
von KravenZ
Hab eine neue Frage. ^^

Kann es sein, dass OGL in QT als Koordinaten nur Werte von 0 - 1 annimmt?
Wenn ich folgendes schreibe dann geht das Dreieck bis an die Ränder:

Code: Alles auswählen

glBegin(GL_TRIANGLES); // Ein Dreieck soll gezeichnet werden
    glColor3f(0.0f,0.0f,1.0f); // es soll soll blau werden
    glVertex3f( 0.0f, 0.1f, 0.0f); // Die obere Ecke des Dreiecks
    glVertex3f(-1.0f,-1.0f, 0.0f); // unten links
    glVertex3f( 1.0f,-1.0f, 0.0f); // unten rechts
  glEnd(); 
Kann man das irgendwie ändern?
Ich will eigentlich ganz normal mit Koordinaten arbeiten können. Dabei sollen diese im Bereich von 0-QGLWidgetbreite und 0-QGLWidgethöhe liegen.

Verfasst: 5. Dezember 2006 07:11
von macman
KravenZ hat geschrieben:Kann es sein, dass OGL in QT als Koordinaten nur Werte von 0 - 1 annimmt?
Will da jemand OpenGL nutzen, ohne sich vorher über 3D informiert zu haben? Hier ein OpenGL-Tutorial, sollte helfen.

Verfasst: 5. Dezember 2006 16:27
von KravenZ
Hab meinen Fehler befunden ^^ Hatte die Perspektive falsch eingestellt gehabt.

Aber hab nun ein weiteres Problem^^ Alos ich versuche gerade das NeHe Tutorial durchzuarbeiten. Aber irgendwie wird bei mir glaux.h nicht gefunden. Ich arbeite unter Linux und da dachte ich dass es vielleicht nur unter Windows funtkioniert aber das würde gegen die Plattformunabhängigkeit von OpenGL sprechen. Bei google finde ich auch nur Berichte zu Windows und glaux.h. Ich wollte mit Texturen arbeiten aber ich weiss nicht wie ich es ohne glaux hinkriegen soll.

Verfasst: 5. Dezember 2006 20:42
von macman
Bei den OpenGL-Examples müsste eins mit Texturen dabei sein. Tut es das auch nicht?

Verfasst: 5. Dezember 2006 22:33
von KravenZ
In meinem QT Ordner sind keine Examples :/

Verfasst: 6. Dezember 2006 07:10
von macman

Verfasst: 6. Dezember 2006 20:08
von KravenZ
THX werde das gleich mal direkt durcharbeiten.

Aber wie es so ist hab ich natürlich das nächste Problem. Hab mir jetzt mal eine eigene Klasse MyVector3Df geschrieben und die in Header und cc datei aufgeteilt. In der cc Datei stehen die Definitionen der Methoden etc. Bei de liegen im Hauptordner des Projekts. Nun möchte ich auf die Klasse zugrifen und binde myvector3df.h ein. Ich kann dann zwar ein Klassenobjekt erstellen aber sobald ich dann eine Methode aufrufen will erhalte ich:

Code: Alles auswählen

/home/bulczak/Desktop/Softwarepraktikum/OGLWidget.cc:21: undefined reference to `MyVector3Df::length()'
/home/bulczak/Desktop/Softwarepraktikum/OGLWidget.cc:21: undefined reference to `MyVector3Df::length()'
obwohl sich die cc Datein mit den Definitionen auch im Ordner befindet. Muss ich vielleicht irgndwie auch die cc Datei linken? Bin halt von Windows gewohnt, dass man das eigentlich nicht muss aber bei Linux ist ja alles irgendwie bißchen anders :)