OpenGl compilieren?
-
Hallo zusammen,
Kennt sich hier jemand mit opengl+qt aus?
Ich würde gern wissen, welche libs ich einbinden muss,
wenn ich nur mit der qgl.h arbeite.(ist nur ein test-programm)
Funktioniert das mit den Mesa-Libs? Wenn ja, mit welcher?
Ich hab sie nämlich alle eingebunden, aber der compiler sagt immernoch/tmp/ccFac0aV.o(.gnu.linkonce.d._ZTV8MyWindow+0x1ec): undefined reference to `MyWindow::paintGL()' collect2: ld returned 1 exit status
Ich hab hauch alle qt und kde-relevanten libs mit eingebunden!?
Kann mir jemand helfen?
-
Ich glaube nicht dass der Fehler wegen fehlenden Libs kommt.
Ich kenne mich mit Mesa bzw QT nicht aus, aber kann es sein dass du deine Application von einer Hauptklasse ableiten musst ?
Wenn ja hast du wohl vergessen die Funktion paintGL zu implementieren
-
Auf jeden Fall muss die GLU mit rein. Deine Library-Optionen sollten so aussehen:
-lGL -lGLU -lqt
Dann sollte alles korrekt durchgehen!
-
Also erstmal ist die Klasse glaub ich richtig
abgeleitet (QGLWidget), so wie es sich gehört
(denke ich?)
Und zum zweiten hab ich genau diese libs mit eingebunden .
Nur bei qt heißt die (bei version 3) -lqt-mt. Liegt da irgendwo der Fehler?
-
Mal ne andere Frage, vielleicht liegt's daran:
Wenn ich die Basis-Klasse an meine Klasse als "public" vererbe
aber die Methoden, auf die ich daraus zugreifen will "protected" sind,
geht das überhaupt?
-
Nee, ich habs jetzt, lag daran, dass ich paintGL nicht als Methoden-definition
hingeschrieben hab, sondern als normale Funktion...
War also nur'n Flüchtigkeits-Fehler!Danke nochmal.
[ Dieser Beitrag wurde am 17.01.2003 um 13:16 Uhr von Nike editiert. ]
-
Hier mal meine Klasse:
CPP-Datei
#include "renderoutput.h" #include <FastPic/Picture.h> #include <FastPic/PicIo.h> void RenderOutput::setPic2Render(Picture *pict) { pic = pict; } void RenderOutput::initializeGL() { glClearColor(0 , 0 , 0 , 0 ); glColor3f(0 , 1 , 1); } void RenderOutput::resizeGL(int w, int h) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0 , w , 0.0 , h); glMatrixMode(GL_MODELVIEW); updateGL(); } void RenderOutput::paintGL() { typedef GLfloat point2[2]; int actpix; point2 p = {width()/2,height()/2}; glClear(GL_COLOR_BUFFER_BIT); if(pic!=NULL) { for(int x=0;x<pic->getCols();x++) for(int y=0;y<pic->getRows();y++) { p[0]=x; p[1]=y; actpix=pic->getPixel(x,y); glBegin(GL_POINTS); glColor3f((float)actpix/64000,(float)actpix/64000,(float)actpix/64000); glVertex2fv(p); glEnd(); } } glFlush(); } #include "renderoutput.moc"
H-Datei:
#ifndef RENDEROUTPUT #define RENDEROUTPUT #include <qgl.h> #include <GL/glut.h> #include <GL/glu.h> #include <stdlib.h> #include <FastPic/Picture.h> #include <FastPic/PicIo.h> #include <FastPic/Picture16.h> #include <FastPic/PixBox.h> #include <FastVox/VoxDesc.h> class RenderOutput : public QGLWidget { Q_OBJECT public: RenderOutput(QWidget *x) : QGLWidget(x) {}; virtual void paintGL(); virtual void initializeGL(); virtual void resizeGL(int w, int h); void setPic2Render(Picture *pict); protected: Picture* pic; }; #endif
Vielleicht hilft's dir!
-
Ausserdem solltest du deine Library-Pathes auf dein QT3-Lib-Verzeichnis setzen!
-L/dein/pfad/nach/qt3/lib
Und da ist garantiert libqt.so drin. Also funzt auch
-lqt
.
Und: Hast du die Header gemoct?
-
Hi grimmsen, falls du noch mal reinschaust...
Nee, jetzt läuft alles wunderbar, den qt-lib-path hab ich natürlich gesetzt,
war nur, wie HeadHunter gesagt hat, dass paintGL() nich implementiert war.
Ich hab (ausversehen) geschrieben:void paintGL(){...}
anstatt:
void MyWindow::paintGL(){...}
Blöder Fehler also...
Danke nochmal!Tschau
Nike
P.S. Die qt-lib heißt bei mir aber tatsächlich libqt-mt.so, anstatt einfach nur libqt.so
(Mandrake 9.0 + Qt version 3-irgendwas!)[ Dieser Beitrag wurde am 18.01.2003 um 11:49 Uhr von Nike editiert. ]