OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
OpenGL
narzędzie dla bardzo ambitnych
Robert Machejek
Instytut Informatyki
Uniwersytet Śląski w Katowicach
12 grudnia 2008
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
OpenGL - co to właściwie jest?
OpenGL (ang. Open Graphics Library) - specyfikacja uniwersalnego API
do generowania grafiki. Zestaw funkcji składa się z 250 podstawowych
wywołań, umożliwiających budowanie złożonych trójwymiarowych scen z
podstawowych figur geometrycznych.
OpenGL wykorzystywany jest często przez gry komputerowe i wygaszacze
ekranu, spełnia rolę analogiczną, jak konkurencyjny Direct3D (część
DirectX) w systemie Windows firmy Microsoft. Również programy do
przedstawiania wyników badań naukowych, CAD, oraz wirtualnej
rzeczywistości używają OpenGL.
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
OpenGL - krótka historia
Troszkę historii..
1992 - powstaje wersja 1.0 specyfikacji OpenGL przenośnej między
platformami. OpenGL Architecture Review Board (SG,HP,IBM)
1995 - wersja 1.1 tej biblioteki z wieloma poprawkami
przyśpieszającymi wyświetlanie grafiki.
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
No to na pewno warte uwagi
OpenGL nie należy do języków opisu sceny. Scena tworzona jest w
OpenGL z wielokątów poprzez wywoływanie odpowiednich procedur
Języki programowania:
Pascal,C/C++,Visual Basic,Python,Java
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
Składnia - bo jak bez niej żyć
Polecenia OpenGL określane są jako funkcje lub procedury. Znaczna cześć
funkcji wykonuje te same operacje, ale różni się zbiorem argumentów.
Przyjęta konwencja nazewnictwa określa ilość i rodzaj parametrów funkcji
według poniższego schematu:
[ , ] , ..., [, ]
gdzie poszczególne elementy oznaczają:
" rtype - wartość zwracana przez funkcje,
" Name - nazwa funkcji,
" 1, 2, 3, 4 - ilość argumentów funkcji,
" b - argumenty typu GLbyte,
" s - argumenty typu GLshort,
" ... itd... czyli najnormalniej typy danych GLfloat, GLdouble, GLubyte, GLushort,
GLuint
" v - argument funkcji stanowi tablica wartości,
" T arg1, ..., T argN - argumenty funkcji.
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
Typy danych - aby ładnie na różnych platformach hulało
Typ danych min. liczba Opisik
OpenGL bitów
GLboolean 1 typ logiczny
GLbyte 8 liczba całkowita ze znakiem (U2)
GLubyte 8 liczba całkowita bez znaku
GLchar 8 ciąg znaków tekstowych
GLshort 16 liczba całkowita ze znakiem (U2)
GLushort 16 liczba całkowita bez znaku
GLint 32 liczba całkowita ze znakiem (U2)
GLuint 32 liczba całkowita bez znaku
GLsizei 32 nieujemna liczba całkowita
GLenum 32 typ wyliczeniowy całkowity
GLintptr ptrbits wskaznik na liczbę całkowitą ze znakiem (U2)
GLsizeiptr ptrbits wskaznik na nieujemna liczbę całkowitą
GLbitfield 32 pole bitowe
GLfloat 32 liczba zmiennoprzecinkowa
GLclampf 32 liczba zmiennoprzecinkowa z przedziału [0, 1]
GLdouble 64 liczba zmiennoprzecinkowa
GLclampd 64 liczba zmiennoprzecinkowa z przedziału [0, 1]
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
Wady a może zalety
OpenGL nie ma funkcji obsługujących operacje:
wejścia/wyjścia
interakcje z użytkownikiem
zarządzanie oknami.
Wywołania funkcji w OpenGL są zgodne z konwencją wywoływania
funkcji w języku C.
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
No to narysujmy tło
Na dobry początek tworzymy klasę MyView
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
No to narysujmy tło
Mamy już klasę to teraz wypada konstruktor ładny napisać
... a jeżeli komuś się wydaje że to już koniec to zapomniał o ...
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
No to narysujmy tło
...o metodzie main klasy Form1
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
No to narysujmy tło
Na koniec wypadało by się pochwalić wynikami :D ...
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
No to narysujmy tło
... wiec się chwalimy
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
aby nie było bo mieliśmy się czegoś nauczyć
Przywołani do porządku dowiedzmy się co te dziwne znaczki na
wcześniejszych stronach oznaczają
.
.
.
.
.
.
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
...a co namieszaliśmy w metodzie Main?
Po pierwsze usunęliśmy standardowe uruchomienie aplikacji. W tym
przypadku było to konieczne. Problem tkwi bowiem w nieustannym
odświeżaniu okna. Problem rozwiązaliśmy następująco:
tworzymy obiekt reprezentujący nasze okno głównego
wyświetlamy okno
wykonujemy pętle do momentu kiedy okno nie zostanie uznane za
niewłaściwą kontrolkę (następuje to np po wywołaniu komendy
zamknięcia aplikacji). W każdej iteracji wywołujemy metodą rysującą
klasy MyView, odświeżamy okno a następnie obsługujemy
komunikaty okna.
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
rysujemy trójkącik :D
W tym celu musimy naspidać metodę Draw()
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
rysujemy trójkącik cd..
Biorąc pod uwagę, że tym razem korzystamy z bogatej biblioteki
TaoFrameworkw wyniku powyższej operacji powinniśmy otrzymać
poniższy efekt
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
rysujemy trójkącik cd..
Chcąc narysować kwadracik w wersji ambitniejszej wracamy do pierwszej
implementacji (niebieskie tło) i nadpisujemy klasy zgodnie ze schematem.
protected override void InitGLContext()
{ GL.glShadeModel(GL.GL_SMOOTH);
// gładkie cieniowanie
GL.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
// kolor czyszczenia bufora kolorów
GL.glClearDepth(1.0f);
// wartość wypełnienia bufora głębi
GL.glEnable(GL.GL_DEPTH_TEST);
GL.glDepthFunc(GL.GL_LEQUAL);
GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT,GL.GL_NICEST);
}
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
rysujemy kwadracik cd..
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
rysujemy kwadracik cd..
public override void glDraw() { GL.glClear(GL.GL_COLOR_BUFFER_BIT); GL.glClear(GL.GL_COLOR_BUFFER_BIT |
GL.GL_DEPTH_BUFFER_BIT); GL.glMatrixMode(GL.GL_MODELVIEW); GL.glLoadIdentity(); GL.glTranslatef(0.0f,0.0f,-5.0f);
GL.glRotatef(xrot,1.0f,0.0f,0.0f); // obrót po osi X xrot+=0.3f; // zwiększenie kąta obrotu po osi X GL.glRotatef(yrot,0.0f,1.0f,0.0f); // obrót po osi Y
yrot+=0.2f; // zwiększenie kąta obrotu po osi Y GL.glRotatef(zrot,0.0f,0.0f,1.0f); // obrót po osi Z zrot+=0.4f; // zwiększenie kąta obrotu po osi Z
GL.glBegin(GL.GL_QUADS); // rozpoczęcie rysowania czworoboków
GL.glColor3f(1.0f, 0.0f, 0.0f); GL.glVertex3f(1.0f,1.0f,1.0f); // deklaracja koloru i wierzchołka
GL.glColor3f(1.0f, 0.0f, 0.0f); GL.glVertex3f(-1.0f,1.0f,1.0f)
GL.glColor3f(1.0f, 0.0f, 0.0f); GL.glVertex3f(-1.0f,-1.0f,1.0f);
GL.glColor3f(1.0f, 0.0f, 0.0f); GL.glVertex3f(1.0f,-1.0f,1.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f); GL.glVertex3f(-1.0f,1.0f,-1.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f); GL.glVertex3f(1.0f,1.0f,-1.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f); GL.glVertex3f(1.0f,-1.0f,-1.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f); GL.glVertex3f(-1.0f,-1.0f,-1.0f);
GL.glColor3f(0.0f, 0.0f, 1.0f); GL.glVertex3f(1.0f,1.0f,-1.0f);
GL.glColor3f(0.0f, 0.0f, 1.0f); GL.glVertex3f(-1.0f,1.0f,-1.0f);
GL.glColor3f(0.0f, 0.0f, 1.0f); GL.glVertex3f(-1.0f,1.0f,1.0f);
GL.glColor3f(0.0f, 0.0f, 1.0f); GL.glVertex3f(1.0f,1.0f,1.0f);
GL.glColor3f(1.0f, 0.0f, 1.0f); GL.glVertex3f(1.0f,-1.0f,1.0f);
GL.glColor3f(1.0f, 0.0f, 1.0f); GL.glVertex3f(-1.0f,-1.0f,1.0f);
GL.glColor3f(1.0f, 0.0f, 1.0f); GL.glVertex3f(-1.0f,-1.0f,-1.0f);
GL.glColor3f(1.0f, 0.0f, 1.0f); GL.glVertex3f(1.0f,-1.0f,-1.0f);
GL.glColor3f(0.0f, 1.0f, 1.0f); GL.glVertex3f(1.0f,1.0f,-1.0f);
GL.glColor3f(0.0f, 1.0f, 1.0f); GL.glVertex3f(1.0f,1.0f,1.0f);
GL.glColor3f(0.0f, 1.0f, 1.0f); GL.glVertex3f(1.0f,-1.0f,1.0f);
GL.glColor3f(0.0f, 1.0f, 1.0f); GL.glVertex3f(1.0f,-1.0f,-1.0f);
GL.glColor3f(1.0f, 1.0f, 0.0f); GL.glVertex3f(-1.0f,1.0f,1.0f);
GL.glColor3f(1.0f, 1.0f, 0.0f); GL.glVertex3f(-1.0f,1.0f,-1.0f);
GL.glColor3f(1.0f, 1.0f, 0.0f); GL.glVertex3f(-1.0f,-1.0f,-1.0f);
GL.glColor3f(1.0f, 1.0f, 0.0f); GL.glVertex3f(-1.0f,-1.0f,1.0f);
GL.glEnd(); // koniec rysowania
}
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
rysujemy kwadracik cd..
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
ambitnego Bohachevskiego narysujmy
Zaczynamy standardowo - nadpisujemy klasy do czego zdążyliśmy się już
chyba przyzwyczaić.
{
}
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
ambitnego Bohachevskiego narysujmy
Nadpisujmy dalej - w końcu wersja dla ambitnych ma być
{
}
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
ambitnego Bohachevskiego narysujmy
Teraz utworzymy sobie klasę którą sobie porysujemy
{ {
float r = 0, g = 0, b = 0;
GetData(bohachevsky f1.dat); break; }
GL.glBegin(GL.GL_QUAD_STRIP);
for (int layer = 0; layer < 10; layer++)
{
for (int i = 0; i < pointCount; i++)
{
if (zTable[i] < 0)
GL.glColor3f(0.0f, 0.6f, 1.0f);
else
GL.glColor3f(0.0f, 0.3f, 1.0f);
GL.glVertex3f(xTable[i], zTable[i], yTable[i]);
GL.glVertex3f(xTable[i + layer * pointCount], zTable[i + layer * pointCount], yTable[i + layer * pointCount]);
if (i == 96)
{
i = i + 2;
GL.glEnd();
GL.glBegin(GL.GL_QUAD_STRIP);
}
{ r = r + 0.01f; g = g + 0.01f; b = b + 0.01f; }
i++;
}
}
GL.glEnd(); }) }
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
Magiczny plik
Magiczny pliczek to nic innego jak współrzędne które posłużą do
wyrysowania funkcji oraz typ zmiennej
Robert Machejek OpenGL
OpenGL - co? kto? kiedy?
Napiszmy pierwszy program
Open GL
Napiszmy coś ambitniejszego
Podsumowanie
to jeszcze kwadracik w wersji dla ambitnych
Niedoceniani zróbmy coś ambitnego
wynik końcowy wcześniejszego kodu
Czyli ładny wykresik dostaliśmy
Robert Machejek OpenGL
Open GL
Podsumowanie
Podsumowanie
Reasumując olbrzymią zaletą OpenGL jest wizualizacja (takie ładne
wszystko). Wodą jest z całą pewnością skomplikowana składnia.
Dziękuje za uwagę
Robert Machejek OpenGL
Wyszukiwarka
Podobne podstrony:
Polscy dostawcy narzędzi dla elektronikówGiełda dla bardzo początkujących Jak zacząć inwestowaćJak powstają ergonomiczne narzędzia dla elektroników 1 czDarmowe narzedzia dla webmasteraJak powstają ergonomiczne narzędzia dla elektroników cz 2SIMICE narzędzie dla wymagającychNO3 dla bardzo cierpliwychswiadomy telemarketing Interaktywne narzedzie dla telemarketerow i menedzerow?ll?nter swteleXPLA Prommer doskonałe narzędzie dla doskonałych układówGiełda dla bardzo początkujących Jak zacząć inwestować Marcin SzolkePHP 5 Narzedzia dla ekspertow php5neGenealogia Hobby dla ambitnychinternetowy katalog narzędzi cat dla tłumaczyPlan dla ambitnychwięcej podobnych podstron