Qt - interfejs do OpenGL
Transkrypt
Qt - interfejs do OpenGL
Qt - interfejs do OpenGL Bogdan Kreczmer ZPCiR ICT PWR pokój 307 budynek C3 [email protected] Copyright c 2003 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostepiony ˛ pod warunkiem wykorzystania wyłacznie ˛ do własnych prywatnych potrzeb i może on by ć kopiowany wyłacznie ˛ w całości, razem z ninijesza˛ strona˛ tytułowa. ˛ – BK, ZPCiR - ICT - PWr – Przykłady prostych rysunków Qt - interfejs do OpenGL 1 Przykład klasy wykorzystujacej ˛ QGLWidget class Okno GL: public QGLWidget { Q OBJECT GLuint object; GLfloat xRot, yRot, zRot, scale; protected : void initializeGL(); void paintGL(); void resizeGL( int w, int h ); virtual GLuint makeObject(); // Metoda wirtualna dziedziczona z QGLWidget // Metoda wirtualna dziedziczona z QGLWidget // Metoda wirtualna dziedziczona z QGLWidget public : Okno GL( QWidget parent ); Okno GL(); public void void void slots : setXRotation( int kat w stopniach ); setYRotation( int kat w stopniach ); setZRotation( int kat w stopniach ); }; Qt - interfejs do OpenGL 2 Przykład implementacji obsługi QGLWidget Okno GL::Okno GL( QWidget parent ): QGLWidget(parent) { xRot = yRot = zRot = 0; scale = 1.25; object = 0; } void Okno GL::initializeGL() { qglClearColor(black); object = makeObject(); glShadeModel(GL FLAT); } // Metoda z QGLWidget // Sposób cieniowania (GL FLAT, GL SMOOTH) void Okno GL::resizeGL( int w, int h ) { glViewport( 0, 0, (GLint)w, (GLint)h); glMatrixMode(GL PROJECTION); glLoadIdentity(); glFrustum(-1,1,-1,1,5,15); glMatrixMode(GL MODELVIEW); } Okno GL:: Okno GL() { glDeleteLists(object,1); } // Zmiana rozmiaru widzianego obszaru, aby unikna˛ć zniekształceń // Wybór typu macierzy na której bedzie ˛ wykonana operacja // Załadowanie macierzy jednostkowej // Zadanie stożka perspektywy Qt - interfejs do OpenGL ˛ od object // Usuwa jeden element z listy rysowania poczynajac 3 Przykład tworzenia rysowanego obiektu GLuint Okno GL::makeObject() { GLuint glist = glGenLists(1); glNewList( glist, GL COMPILE ); qglColor(white); glLineWidth(4); //Zaalokowanie miejsca na liste˛ rysowania z jednym elementem //Zainicjalizowanie składowania elementów do listy rysowania glBegin(GL LINE LOOP); glVertex3f( 1, 0.5, -0.4); glVertex3f( 1,-0.5, -0.4); glVertex3f(-1,-0.5, -0.4); glVertex3f(-1, 0.5, -0.4); glEnd(); glBegin(GL LINE LOOP); glVertex3f( 1, 0.5, 0.4 ); glVertex3f( 1,-0.5, 0.4 ); glVertex3f(-1,-0.5, 0.4 ); glVertex3f(-1, 0.5, 0.4 ); glEnd(); glBegin(GL LINES); glVertex3f( 1, 0.5,-0.4 ); glVertex3f( 1, 0.5, 0.4 ); glVertex3f( 1,-0.5,-0.4 ); glVertex3f( 1,-0.5, 0.4 ); glVertex3f(-1,-0.5,-0.4 ); glVertex3f(-1,-0.5, 0.4 ); glVertex3f(-1, 0.5,-0.4 ); glVertex3f(-1, 0.5, 0.4 ); glEnd(); glEndList(); return glist; } Qt - interfejs do OpenGL 4 Przykład tworzenia rysowanego obiektu void Okno GL::paintGL() { glClear( GL COLOR BUFFER BIT ); glLoadIdentity(); glTranslatef(0,0,-10); glScalef(scale,scale,scale); glRotatef(xRot,1,0,0); glRotatef(yRot,0,1,0); glRotatef(zRot,0,0,1); glCallList(object); } void Okno GL::setXRotation(int Kat) { xRot = (GLfloat)(Kat % 360); updateGL(); } Qt - interfejs do OpenGL 5