OpenGL - wprowadzenie
Transkrypt
OpenGL - wprowadzenie
OpenGL - wprowadzenie 14 kwietnia 2008 Skladnia Wszyskie nazwy funkcji podstawowej biblioteki OpenGL zaczynaja֒ sie֒ od liter gl : glBegin, glClear, glPolygonMode. Stale symboliczne rozpoczynaja֒ sie֒ od GL i posane sa֒ zawsze dużymi literami: GL_RGB, GL_POLYGON, GL_AMBIENT_AND_DIFFUSE. OpenGL operuje na nastepuj acych typach danych: ֒ ֒ GLbyte, GLshort, GLint, GLfloat. Wraz z podstawowa֒ biblioteka֒ OpenGL używane sa֒ również biblioteki OpenGL Utility (GLU) oraz OpenGL Utility Toolkit (GLUT). Obsluga okienka przy użyciu biblioteki GLUT • glutInit(&argc, argv) - inicjalizuje biblioteke֒ GLUT. • glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) - ustawia jeden bufor odświeżania i model kolorów. • glutInitWindowPosition(x,y) - określa polożenie okienka na ekranie liczac ֒ od lewego górnego rogu w pikselach. • glutInitWindowSize(x,y) - określa rozmiary poczatkowe okienka w pikselach. ֒ • glutCreateWindow("Window title") - tworzy na ekranie okienko w którym bed ֒ a֒ wyświeltane obrazy. • glutDisplayFunc(some_function) - przetwarza opis obrazu wygenerowany przez podana֒ funkcje. ֒ • glutMainLoop() - wyświetla obraz w okienku i przechodzi w stan oczekiwania na zdarzenia. • glClearColor(r,g,b,alpha) - ustawia kolor tla w buforze. 1 • glClear(GL_COLOR_BUFFER_BIT) - zmienia kolor tla w wyświetlanym okienku na kolor ustawiony przez funkcje֒ glClearColor. • glMatrixMode(GL_PROJECTION) - ustala sposób przetworzenia obrazu do wyświetlenia • gluOrtho2D(xmin, xmax, ymin, ymax) - określa zasieg w wyświetlanym okienku. ֒ wspólrzednych ֒ • glFlush() - opróżnia bufory Opis obrazu • glColor3f(r,g,b) - ustawia aktualny kolor. • glBegin(GL_LINES) - rozpoczyna sekwencje֒ wierzcholków. Możliwe figury: – GL POINTS - punkty – GL LINES - odcinki – GL LINE STRIP - ciag ֒ odcinków ostatni wierz– GL LINE LOOP - ciag ֒ odcinków wraz z odcinkiem lacz ֒ acym ֒ cholek z pierwszym. – GL POLYGON - rysuje wielokat ֒ o zadanych wierzcholkach – GL TRIANGLES - rysuje trójkaty ֒ – GL TRIANGLE STRIP - ciag ֒ trójkatów ֒ – GL TRAINGLE FAN - wachlarz trójkatów ֒ – GL QUADS - czworoboki – GL QUAD STRIP - ciag ֒ czworoboków • glEnd() - kończy sekwencje֒ wierzcholków • glVertex*() - dodaje wierzcholek • glRasterPosition* - ustawia kursor w wybrane miejsce • glutBitmapCharacter(czcionka, znak) - wypisuje wybrany znak. Przykladowe czcionki: GLUT BITMAP TIMES ROMAN 10 lub, GLUT BITMAP HELVETICA 12. 2 Wlaściwości obrazu • glLineWidth(width) - ustawia grubość linii • glLineStipple(repeatFactor, pattern) - ustala typ linii: pattern jest bitowym wzorem a repeatFactor określa powtarzalność pikseli. • glEnable(GL_LINE_STIPPLE) - zezwala na zmiane֒ typu linii • glDisable(GL_LINE_STIPPLE) - powraca do cigag ֒ lej linii • glPolygonMode(face, displayMode) - ustala sposób wyświetlania wielościanu na displayMode: face przyjmuje wartości GL FRONT, GL BACK lub GL FRONT AND BACK, natomiast displayMode wartości GL POINT, GL LINE, GL FILL. Transformacje obrazu • glLoadIdentity() - przypisuje macierzy transformacji macierz jednostkowa. ֒ • glMatrixMode(GL_MODELVIEW) - stosuje nastepne operacje do macierzy transformacji geometrycznych ֒ • glTranslatef(tx, ty, tz) - tworzy macierz opisujac ֒ a֒ translacje. • glRotatef(theta, vx, vy, vz) - tworzy macierz opisujac ֒ a֒ obrót o kat ֒ theta wokól osi wskazanej przez wektor (vx,vy,vz). • glScalef(tx, ty, tz) - tworzy macierz opisujac osi x, ty ֒ a֒ przeskalowanie o czynnik tx wzgledem ֒ wzgledem osi y i tz wzgl edem osi z. ֒ ֒ Funkcje interaktywne • glutMouseFunc(mouseFunc) - obsluga myszy poprzez funkcje void mouseFcn( GLint button, GLint action, GLint xMouse, GLint yMouse), gdzie button: GLUT LEFT BUTTON, GLUT MIDDLE BUTTON, GLUT RIGHT BUTTON, natomiast action: GLUT DOWN, GLUT UP. Wywolywana gdy dany klawisz zostanie naciśniety lub zwolniony. Wspólrzedne punkty sa֒ prze֒ ֒ kazywane przez zmienne xMouse i yMouse. 3 • glutMotionFunc(mouseFunc) - wywolywana gdy kursor zostanie przeciagni ety nad okienkiem z naciśnietym ֒ ֒ ֒ klawiszem. Tym razem zostaje wywolana funkcja void mouseFcn( GLint xMouse, GLint yMouse) actualnego polożenia myszy wzgledem lewego, górnego rogu. ֒ • glutPassiveMotionFunc(mouseFcn) - wywolywana gdy kursor zostanie przeciagni ety nad okienkiem bez naciśnietego ֒ ֒ ֒ klawisza. • glutKeyboardFunc(keyFunc) - wywolywana gdy naciśniety jest klawisz. Odpowiada funkcja void keyFcn( ֒ GLubyte key, GLint xMouse, GLint yMouse), przy czym xMouse i yMouse zawieraja֒ aktualna֒ pozycje֒ kursora myszy. • glutSpecialFunc(specialKeyFcn) - obsluguje klawisze specjalne. Wywolywana jest funkcja void specialKeyFcn( GLint specialKey, GLint xMouse, GLint yMouse), gdzie specialKey przyjmuje wartości: GLUT KEY F1, ..., GLUT KEY F12, GLUT KEY UP, GLUT KEY DOWN, GLUT KEY PAGE DOWN, GLUT KEY HOME, ... 4