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

Podobne dokumenty