PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL/QT Problem



KravenZ
30-11-2006, 22:24
Hallo Leute,

Bin gerade am Verzweifeln:(
Ich habe ein QT Fenster erstellt und drin ein OpenGL Widget reingemacht. Dann hab ich eine GLWidget Klasse erstellt die folgendermassen aussieht.



#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


Nun hab ich eine Implementierung geschrieben die nur leer ist und das Programm kompiliert und ausgeführ und alles war in Ordnung. Aber sobald ich eine OpenGl Funktion in zB initializeGL() stecke bekomme ich ne Fehlermeldung von undefined reference


#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()
{

}

}


Hab mich auf der TrolltechSeite blöd gesucht und immer noch nix gefunden :( wisst ihr was das Problem sein kann?

Schönen Gruß

KravenZ

KravenZ
01-12-2006, 00:05
Hab das Forum bißchen durchwühlt und das gefunden:
http://mrunix.de/forums/showthread.php?t=39352
Also muss ich die wahrscheinlich erst linken. Aber wie linke ich etwas mit qmake?

anda_skoa
01-12-2006, 16:49
Nachdem du leider keine Fehlerausgabe angeführt hast, müssen wir wohl die Glaskugel befragen :(

Meine Glaskugel vermutet, daß du folgendes in dein .pro File eintragen mußt



LIBS += -lGL


Ciao,
_

KravenZ
04-12-2006, 19:52
deine Glaskugel hatte Recht ;)

Aber hab ein neues Problem:
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:


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.

Dieser Code liegt in der paintGL Funktion.

KravenZ
05-12-2006, 15:24
Hab den Fehler gefunden. Etwas mit meinen Perspektiveeinstellungen war nicht in Ordnung.

Aber bin nun beim nächsten Problem. gibt es unter Linux die includedatei GL/glaux.h ? Ich hab die unter Windows zum Textureneinbinden gebraucht aber irgendwie finde ich die nicht unter bzw. für Linux, Gibt es Alternativen?

anda_skoa
12-12-2006, 18:01
Welche Funktionen benutzt du aus diesem Header.
Eventuell findest du diese mit einem grep in den GL/ Headern

Ciao,
_

Yonibear
13-12-2006, 16:58
GLaux ist meines wissens ein unportabler Vorläufer von GLUT, also einem Toolkit das sich um Dinge wie Fensterverwaltung kümmert und diverse andere Hilfsfunktionen anbietet.
Allerdings wird unter Qt keines der beiden Kits funktionieren, da dein GL-Fenster durch QT erstellt wird und diese Toolkits AFAIK keine Möglichkeit bieten ein bereits erstelltes Window einzubinden.
Dir bleibt wohl nichts anderes übrig als die Input-Methoden zu verwenden die Qt dir anbietet.