Podstawy opengl wersja 2 1 a w a ciwie 1 x kr tka informacja o jogl
This presentation is the property of its rightful owner.
Sponsored Links
1 / 55

Wprowadzenie do grafiki komputerowej PowerPoint PPT Presentation


  • 83 Views
  • Uploaded on
  • Presentation posted in: General

Podstawy OpenGL Wersja 2.1, a właściwie 1.x Krótka informacja o JOGL. Wprowadzenie do grafiki komputerowej. Co to jest OpenGL ?. Jest to p rzenośna , wieloplatformowa biblioteka graficzna . Działa w środowisku MS Windows, Linux, IOS, Android…

Download Presentation

Wprowadzenie do grafiki komputerowej

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Podstawy opengl wersja 2 1 a w a ciwie 1 x kr tka informacja o jogl

Podstawy OpenGL

Wersja 2.1, a właściwie 1.x

Krótka informacja o JOGL

Wprowadzenie do grafiki komputerowej

Podstawy OpenGL


Co to jest opengl

Co to jest OpenGL?

  • Jest to przenośna, wieloplatformowabibliotekagraficzna.

  • Działa w środowisku MS Windows, Linux, IOS, Android…

  • Oryginalnie przewidziana do współpracy z językiem C

  • Dzięki licznym wrapperom może być użyta z wieloma językami. Można zajrzeć na stronę http://www.opengl.org/wiki/Language_bindings. Między innymi:

    • C++

    • Java

    • Python

    • Ruby

    • (w sumie 16 języków lub coś koło tego)


Co to jest opengl c d najkr tszej charakterystyki

Co to jest OpenGL, c.d. najkrótszej charakterystyki

  • Open GL jest określany jako API (Application Programming Interface, Interfejs programowania aplikacji).

  • OpenGL jest niezależny od sprzętu

    • Obecnie to nie sprzęt dyktuje warunki. Jednak dawniej było inaczej – przykład Silicon Graphics.

  • Jest uważany za bibliotkę niskopoziomową grafiki 3D.

  • Stanowipodstawędlabibliotekipakietównarzędziowychwysokiegopoziomu (np. Open Inventor, Open SceneGraphiinnych) oraz licznych aplikacji.‏

  • Głównym konkurentem OpenGL jest wprowadzona w roku 1995 przez Microsoft biblioteka Direct3D/DirectX


Opengl jako narz dzie do renderowania

OpenGL jako narzędzie do renderowania

  • Tworzy elementarne obiekty geometryczne (primitives)

    • Wykorzystuje do tego: punkty, linie, wielokąty

  • Wykonuje operacje na obrazach rastrowych

  • Renderuje sceny zależnie od stanu

    • Uwzlędnia: kolory, materiały, źródła światła, etc.


Najkr tsza historia opengl

Najkrótsza historia OpenGL

  • Utworzona z biblioteki IRIS GL (Graphics Library) – SGI, z 1982.

  • Od 1992 rozwijanaprzez Architecture Review Board (ARB) jużjako OpenGL (wersja 1.0 została ogłoszona w czerwcu 1992). Kluczowi uczestnicy ARB: SGI, DEC, IBM, Intel, Microsoft.

  • W kolejnych latach ogłaszane są oficjalne wersje: 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5. Wersja 2.0 ogłoszona w 2004 włączyła oficjalnie język shaderów (OpenGLShadingLanguage, GLSL).

  • Wersja 2.1 kończy serię bibliotek kompatybilnych wstecz. W dalszym ciągu może być i jest używana.


Najkr tsza historia opengl c d

Najkrótsza historia OpenGL, c.d.

  • Od września 2006 nadzór na rozwojem OpenGL sprawuje Khronos Group.

  • W sierpniu 2008 ogłoszono OpenGL 3.0, kompatybilny z wcześniejszymi wersjami, ale zapowiadający usuwanie starszych rozwiązań w kolejnych wersjach. Realizuje wersję 1.30 GLSL.

  • W marcu 2009 – OpenGL 3.1 + GLSL 1.40.

  • W sierpniu 2009 – OpenGL 3.2 + GLSL 1.50.

  • W marcu 2010 – OpenGL 3.3 i 4.0

  • W lipcu 2010 – OpenGL 4.1

  • W tej chwili bieżącymi wersjami są OpenGL3.3 i 4.4


Na czym polega prze om pomi dzy wersj 2 1 a p niejszymi

Na czym polega przełom pomiędzy wersją 2.1, a późniejszymi?

  • Wersje =< 2.1 pozwalały na ukrycie karty graficznej przed użytkownikiem

  • W wersji 2.1 można jawnie programować kartę graficzną za pomocą GLSL (jawnie korzystać z shaderów), można jednak korzystać jedynie z mechanizmów OpenGL.

  • W wersji 3.3 istnieje tryb tradycyjny (CompatibilityMode) i tryb nowy (CoreMode) pozwalający na efektywne wykorzystanie procesorów graficznych.

  • W wersji 3.3 (CoreMode) jawne korzystanie z shaderów jest konieczne.


Podsumowanie

Podsumowanie

  • Przygotowując program w OpenGL w wersji > 3.0, w rzeczywistości przygotowujemy DWA programy:

    • pierwszy, opisany przy pomocy funkcji OpenGL realizowany na CPU (przygotowuje scenę, buduje obiekty)

    • drugi opisany przez język shaderów GLSL, realizowany na GPU (dokonuje przekształceń obiektów i renderowania)

  • W wersji 2.1 mamy możliwość wyboru: piszemy albo z shaderami, albo bez – przełączenie nie jest zbyt zgrabne.

  • W wersjach wcześniejszych nie korzystamy z shaderów. Prościej, ale:

    • Mniejsze możliwości renderowania, niższa efektywność kodu, nie zawsze jasne działanie funkcji OpenGL.


Potok renderowania model klient serwer

Potok renderowania; model klient-serwer

klient – kod pracujący na CPU

serwer – kod pracujący na GPU


R ne linki do tutoriali starego opengl

Różne linki do tutoriali „starego” OpenGL

  • W tej chwili podstawowym linkiem jest: http://www.opengl.org/wiki/Code_Resources

  • W nim można znaleźć dużo przykładów i tutoriali.


Z czego sk ada si opengl

Z czego składa się OpenGL?

  • Z biblioteki właściwej GL;Nazwy funkcji zaczynają się od gl(np. glClearColor).

  • W wersji 2.1 mamy 249 funkcji.

  • W wersji 3.3 - 199 funkcji.

  • Z pomocniczej biblioteki narzędziowej

  • W wersji 2.1 – Biblioteka GLU (OpenGL Utilities)

  • W wersji 3.3 …no właśnie … wszystko jest w trakcie tworzenia …Można np. korzystać z biblioteki GLTools związanej z podręcznikiem OpenGLSuperBible.

  • Przykłady, m.in. http://www.starstonesoftware.com/OpenGL/


Z czego sk ada si opengl1

Z czego składa się OpenGL?

  • GL - biblioteka podstawowa, >180 funkcji, nazwy funkcji zaczynają się od gl(np. glClearColor())‏

  • GLU - biblioteka funkcji pomocniczych (OpenGL Utilities). Funkcje GLU obsługują orientację w przestrzeni (np. gluLookAt()), rzutowanie (np. gluPerspective()), renderowaniekrzywych i powierzchni.

  • GLUT - biblioteka narzędziowa (OpenGLUtilityToolkit),GUI obsługuje okna, zdarzenia, prosty interfejs użytkownika. Jej główną zaletą jest prostota.

  • Dostępne są liczne inne GUI.

Podstawy OpenGL


Po yteczne ksi ki

Pożyteczne książki

  • R.S.Wright, et al.. OpenGL-Superbible, 5th edition, Addison-Wesley, 2010

  • Randi J. Rost, OpenGLShadingLanguage, 3rd edition,‏ 2009

  • T. Akenine-Moller, Real-time rendering, 3rd edition, 2009

  • M. Bailey i S. Cunnigham, Graphicsshaders, A.K. Peters, 2009

  • M.Woo, J.Neider, T.Davies, OpenGL – Programming Guide, Addison-Wesley, 7th edition, 2010 (wersja elektroniczna, np. fly.srk.fer.hr/~unreal/theredbook/www.opengl.org/documentation/red_book_1.0)‏

Podstawy OpenGL


Dost pne ksi ki po polsku redbook

Dostępne książki (po polsku + RedBook)

  • R.S.Wright, M.Sweet, OpenGL-Księga eksperta, Helion 1999

  • R.S.Wright, B.Lipchak, OpenGL-Księga eksperta, Helion 2005 (wyd 3.)‏

  • K.Hawkins, D.Astle, OpenGL – Programowanie Gier, Helion 2003

  • P. Andrzejewski, J.Krzak, Wprowadzenie do OpenGL, Kwantum 2000

  • M.Woo, J.Neider, T.Davies, OpenGL – Programming Guide, Addison-Wesley (wersja elektroniczna, np. fly.srk.fer.hr/~unreal/theredbook/www.opengl.org/documentation/red_book_1.0)‏

Podstawy OpenGL


Po yteczne linki

Pożyteczne linki

  • www.nopper.tv

  • strona Janusza Ganczarskiegojanuszg.hg.pl

  • znany tutorialnehe.gamedev.net

  • strona podstawowa OpenGL, www.opengl.org


Instalacja jogl w eclipse

Instalacja JOGL w Eclipse

  • Skorzystałem z tutoriala: http://youtu.be/2EaaQrgvsL0

  • Autor (http://schabby.de/) prowadzi też stronę-blog m.in. na temat JOGL

  • Inny wideo tutorial: http://youtu.be/DnVWNFwelTI


Po yteczne linki dla jogl

Pożyteczne linki dla JOGL

  • http://jogamp.org/ podstawowa strona biblioteki, taki odpowiednik opengl.org

  • http://math.hws.edu/graphicsnotes/ sympatyczna strona z podręcznikiem i licznymi przykładami

  • http://thebetaprogrammer.com/ kurs wideo (również na youtube) + przykłady oparte na NeHe


Na pocz tek glut a w a ciwie freeglut

Na początek – GLUT (a właściwie FreeGLUT)

Na następnych slajdach przedstawione są krótko wybrane funkcje GLUT (daleko nie wszystkie).

Pełny opis w dokumentacji Marka Kilgarda (autora biblioteki).www.opengl.org/documentation/....

Również jest dostępna nagd.tuwien.ac.at/graphics/GLUT/glut3.html

freeGLUT - bieżąca wersja: 2.8.1 z kwietnia 2013

(z wxDev C++ działa chyba wersja 2.6.0)

Podstawy OpenGL


Zasadnicze funkcje biblioteki glut freeglut

Zasadnicze funkcje biblioteki GLUT/freeglut

  • Obsługa okien (otwarcie okna, ustalenie poczatkowego położenia i rozmiarów, etc.)

  • Obsługa zdarzeń (klawiatury, myszki, zmiany rozmiarów i proporcji okna)

  • Przygotowanie prostego menu

  • Budowanie prostych obiektów geometrycznych (sfera, sześcian i inne wielościany, walec, …)


Przyk ad z czerwonej ksi ki

Przykład z czerwonej książki

#include <stdio.h>

#include <GL/glut.h>

voidinit(void)‏ {

glClearColor(0.0, 0.0, 0.0, 0.0); // czarne tło

glMatrixMode(GL_PROJECTION); // tryb rzutowania

glLoadIdentity(); // macierz jednostkowa

glOrtho(0.0, 10.0, 0.0, 10.0, -1.0, 1.0); // obszar rzutowania

}

void display(void) {

glClear( GL_COLOR_BUFFER_BIT);

glColor3f(0.0, 1.0, 0.0);

glBegin(GL_POLYGON);

glVertex3f(2.0, 4.0, 0.0);

glVertex3f(8.0, 4.0, 0.0);

glVertex3f(8.0, 6.0, 0.0);

glVertex3f(2.0, 6.0, 0.0);

glEnd();

glFlush();

}

Podstawy OpenGL


Przyk ad z czerwonej ksi ki c d

Przykład z czerwonej książki, c.d.

intmain(intargc, char **argv)

{

glutInit(&argc, argv);

glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

glutInitWindowPosition(100,100);

glutInitWindowSize(300,300);

glutCreateWindow ("square");

init();

glutDisplayFunc(display);

glutMainLoop();

return 0;

}

Podstawy OpenGL


Om wienie niekt rych funkcji glut

Omówienie niektórych funkcji GLUT


Inicjalizacja i obs uga okien

Inicjalizacja i obsługa okien

  • Mamy dostępne następujące funkcje:

    • glutInit();

    • glutInitWindowPosition();

    • ‏glutInitWindowSize()‏;

    • glutInitDisplayMode();

    • glutCreateWindow();‏


Glut freeglut inicjowanie biblioteki

GLUT, freeglut – inicjowanie biblioteki

voidglutInit(int *argcp, char **argv)‏

Zainicjowanie biblioteki GLUT.

Ta funkcja zawsze jest wywoływana na początku.

Może zakończyć się błędem, gdy np. system nie obsługuje OpenGL.

W ogólności przekazuje parametry umieszczone w linii wywołania programu, ale tylko w X Windows została zaimplementowana interpretacja kilku parametrów.

Podstawy OpenGL


Glut inicjowanie okna

GLUT – inicjowanie okna

voidglutInitWindowPosition(int x, int y);‏

voidglutInitWindowSize(int x, int y)‏;

Zgodnie z nazwą, funkcje określają:

  • początkowe położenie okna – x, y są współrzędnymi lewego górnego rogu;

  • początkowy rozmiar okna, domyślnie 300x300 pikseli

  • x, y są współrzędnymi ekranowymi wyrażonymi w pikselach od lewego górnego rogu ekranu.

Podstawy OpenGL


Glut inicjowanie trybu wy wietlania w oknie

GLUT- inicjowanie trybu wyświetlania w oknie

voidglutInitDisplayMode(GLbitfieldmode);‏

voidglutInitDisplayMode(unsigned long intmode);‏

mode jest bitową sumą poszczególnych masek bitowych (zapisanychsymbolicznie):

GLUT_RGBA, GLUT_INDEX

GLUT_SINGLE, GLUT_DOUBLEpojedynczy lub podwójny bufor ekranu

GLUT_DEPTHaktywny bufor głębokości

GLUT_ACCUMaktywny bufor akumulacji

GLUT_ALPHA

GLUT_STENCIL

GLUT_STEREO

Podstawy OpenGL


Glut obs uga okien otwarcie okna graficznego

GLUT – obsługa okienOtwarcie okna graficznego

voidglutCreateWindow(char *name)‏

Otwarcie okna na ekranie; namejest łańcuchem znaków wpisanym w górnej belce okna.

Podstawy OpenGL


Wybrane funkcje obs ugi zdarze

Wybrane funkcje obsługi zdarzeń

voidglutDisplayFunc(void(*func)(void))‏

voidglutReshapeFunc(void(*func)(intw, inth))‏

voidglutKeyboardFunc(void(*func) (unsigned char key, intx, inty))‏

Podstawy OpenGL


Wybrane funkcje obs ugi zdarze1

Wybrane funkcje obsługi zdarzeń

void glutSpecialFunc(void(*func) (unsigned char key, int x, int y))‏

Oznaczenia kluczy:

GLUT_KEY_*

GLUT_KEY_F1,...,GLUT_KEY_F12

GLUT_KEY_LEFT, GLUT_KEY_UP, GLUT_KEY_RIGHT,

GLUT_KEY_DOWN

GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN

GLUT_KEY_HOME, GLUT_KEY_END, GLUT_KEY_INSERT

Podstawy OpenGL


Wybrane funkcje obs ugi zdarze2

Wybrane funkcje obsługi zdarzeń

voidglutMouseFunc(void(*func)‏

(intbutton, intstate,

intx, inty))‏

button: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON,

GLUT_RIGHT_BUTTON

state: GLUT_DOWN, GLUT_UP

voidglutMotionFunc(void(*func)(intx, inty))

voidglutMainLoop(void); ‏

Podstawy OpenGL


Wybrane funkcje obs ugi zdarze3

Wybrane funkcje obsługi zdarzeń

voidglutIdleFunc(void (*func)(void))‏

glutIdleFuncwprowadza nieprzerywalną pętlę.

Ew. przerwanie:

glutIdleFunc(NULL)‏

voidglutPostRedisplay(void)‏

Podstawy OpenGL


Obiekty z oryginalnej biblioteki glut tylko do wersji 2 1 w cznie

Obiekty z oryginalnej biblioteki GLUT (tylko do wersji 2.1 włącznie)

  • voidglutWireSphere(GLdoubler, GLintslices, GLintstacks)‏;voidglutSolidSphere(GLdoubler, GLintslices, GLintstacks)‏;

  • voidglutWireCube(GLdoublesize)‏;

  • voidglutWireTorus(GLdoubleinnerRadius, GLdoubleouterRadius,GLintnsides, GLintrings)‏;

  • voidglutWireIcosahedron(void)‏;

  • voidglutWireOctahedron(void)‏;

  • voidglutWireTetrahedron(void)‏;

  • voidglutWireDodecahedron(GLdoubleradius)‏;

  • voidglutWireTeapot(GLdoublesize)‏;


  • W bibliotece freeglut dochodzi jeszcze par obiekt w

    W bibliotece freeglut dochodzi jeszcze parę obiektów.

    • glutWireCone, glutSolidCone

    • glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron

    • glutWireTeacup, glutSolidTeacup, glutWireTeaspoon, glutSolidTeaspoon

    • Można je znaleźć w dokumentacji freegluthttp://freeglut.sourceforge.net/docs/api.php


    Typy danych w opengl

    Typy danych w OpenGL

    OpenGL wprowadził własne typy danych w celu zapewnienia przenośności programów. Używanie standardowych oczywiście też jest dopuszczalne

    SuffixData typeC typeOpenGL type

    b8-bit integersigned char GLbyte

    s16-bit integershort GLshort

    i32-bit integerint/long GLint, GLsizei

    f32-bit floating pointfloat GLfloat, GLclampf

    d64-bit floating pointdouble GLdouble, GLclampd

    ub8-bit unsigned integerunsigned char GLubyte, GLboolean

    us16-bit unsigned integerunsigned short GLushort

    ui32-bit unsigned integerunsigned int/long GLuint, GLenum, GLbitfield

    Podstawy OpenGL


    Typy danych w opengl cd

    Typy danych w OpenGL, cd

    Gdy spojrzymy na typy danych OpenGL, odnajdujemy odpowiedniki z C/C++.

    Z małymi wyjątkami.

    GLclampf, GLclampd – to float i double obcięty do [0,1]

    Podstawy OpenGL


    Konwencje nazw funkcji

    Konwencje nazw funkcji

    • OpenGL w zasadzie nie dopuszcza przeładowania funkcji.

    • W zamian za to wprowadzony jest system jedno- lub dwuznakowych sufiksów; Maksymalnie można użyć trzech:

      • pierwszy określa liczbę argumentów,

      • drugi (jeden lub dwa znaki) określa typ parametru

      • trzeci – jeśli występuje, pokazuje że podany jest adres do argumentów

    • Od OpenGL 1.5 możliwe jest przeładowywanie funkcji odwołujących się do buforów jako obiektów (wspomnimy o tym później)


    Konwencje nazw funkcji1

    Konwencje nazw funkcji

    • Wszystkie funkcje poprzedzone są przedrostkiem

      gl, glu, glut

    • po którym następuje określenie funkcji pisane dużą literą.

    • Nazwy funkcji wskazują na liczbę i typ argumentów.Funkcje zakończone na f wymagają float, i wymagają int,

      b wymagają byte, ub wymagają unsignedbyte, itd.

    • Funkcje zakończone na v wymagają tablicy.

    • Na przykład

      glColor3f() 3 floaty

      glColor4fv() tablica 4 floatów

    Podstawy OpenGL


    Konwencje nazw funkcji jeszcze raz

    glVertex3fv( v )‏

    Data Type

    Vector

    Number of

    components

    b - byte

    ub - unsigned byte

    s - short

    us - unsigned short

    i - int

    ui - unsigned int

    f - float

    d - double

    omit “v” for

    scalar form

    glVertex2f( x, y )‏

    2 - (x,y)

    3 - (x,y,z)‏

    4 - (x,y,z,w)‏

    Konwencje nazw funkcji – jeszcze raz

    Podstawy OpenGL


    Konwencje nazw zmiennych stanu biblioteki

    Konwencje nazw zmiennych stanu biblioteki

    OpenGL zawiera ponad 250 parametrów (zmiennych stanu) określających „stan maszyny OpenGL” – środowisko tworzenia grafiki.

    Parametry zapisywane symbolicznie dużymi literami są poprzedzone przedrostkiem GL_, np. GL_SMOOTH, GL_FLAT.

    Analogiczne parametry (choć w mniejszej ilości) dostarczone są do bibliotek GLU, GLUT.

    Ich postać jest analogiczna, np. GLU_POINTGLUT_RGBAGLUT_SINGLE

    Podstawy OpenGL


    Jeszcze o zmiennych stanu

    Jeszcze o zmiennych stanu

    Zmienne stanu mogą być skalarami lub tablicami zawierającymi maski bitowe lub wielkości typu int, float, double.

    Do ich ustawienia stosujemy raczej funkcje OpenGL, niż bezpośrednie podstawienie wartości – o tym będzie mowa później.

    Możemy też pytać o bieżące ustawienia zmiennych stanu.

    Zmienne stanu mają na początku pewne sensowne wartości domyślne, więc na ogół coś się na ekranie narysuje (choć nie zawsze tak, jak tego chcielibyśmy).

    Podstawy OpenGL


    Pytanie o binarne zmienne stanu

    Pytanie o binarne zmienne stanu

    O zmienne stanu, które są wartościami logicznymi możemy zapytać funkcją:

    GLbooleanglIsEnabled(GLenum opis);‏

    np. glIsEnabled(GL_DEPTH_TEST)‏;

    W odpowiedzi otrzymujemy GL_TRUElub GL_FALSE

    O inne zmienne pytamy przez glGet…()‏

    Podstawy OpenGL


    Og lne pytanie o zmienne stanu

    Ogólne pytanie o zmienne stanu

    OpenGL umożliwia również ogólne zapytanie o zmienne stanu różnych typów:

    voidglGetBooleanv(GLenumpname, GLboolean* param);

    voidglGetDoublev(GLenumpname, GLdouble* param);

    voidglGetFloatv(GLenumpname, GLfloat* param);

    voidglGetIntegerv(GLenumpname, GLint* param);

    pname jest nazwą zmiennej stanu; niestety trzeba znać te nazwy. Można je znaleźć między innymi na stroniehttp://www.opengl.org/sdk/docs/man/xhtml/glGet.xml

    param zwraca wskaźnik do zmiennej zawierającej wartość wybranej zmiennej stanu


    Uk ad wsp rz dnych

    x

    z

    Układ współrzędnych

    y

    W OpenGL przyjęto układ prawoskrętny.

    (Przeciwstawiając się wcześniejszej tradycji, zgodnie z którą w grafice komputerowej stosowano raczej układ lewoskrętny)‏

    Podstawy OpenGL


    Niekt re operacje wst pne

    Niektóre operacje wstępne

    Na następnym slajdzie...

    Podstawy OpenGL


    Czyszczenie ekranu lub og lniej bufor w

    Czyszczenie ekranu (lub ogólniej buforów)‏

    voidglClear(GLbitfieldmask)‏

    voidglClear(unsigned long intmask)‏

    Argument maskwskazuje, które bufory powinny zostać wyczyszczone.

    GL_COLOR_BUFFER_BIT

    GL_DEPTH_BUFFER_BIT

    GL_STENCIL_BUFFER_BIT

    GL_ACCUM_BUFFER_BIT

    Obecnie interesuje nas przede wszystkim postać

    voidglClear(GL_COLOR_BUFFER_BIT)‏

    Podstawy OpenGL


    Czyszczenie ekranu r nymi kolorami

    Czyszczenie ekranu różnymi kolorami

    voidglClear(GL_COLOR_BUFFER_BIT);

    domyślnie czyści ekran kolorem czarnym (zeruje bufor)

    Możemy określić dowolny kolor funkcją:

    voidglClearColor(GLclampfred,

    GLclampfgreen, GLclampfblue,

    GLclampfalpha);

    Np.

    voidglClearColor(1.0f,1.0f,1.0f,1.0f);

    Podstawy OpenGL


    Ustawienie bie cego koloru do rysowania

    Ustawienie bieżącego koloru do rysowania

    Zajmujemy się wyłącznie trybem RGB/RGBA

    Tryb pracy zazwyczaj jest taki:

    ustaw_bieżący_kolor(red);rysuj_obiekt(A);rysuj_obiekt(B);ustaw_bieżący_kolor(blue);ustaw_bieżący_kolor(green);rysuj_obiekt(C);

    Samo rysowanie jest oderwane od koloru. Bieżący kolor jest kontekstem ustawionym przez zmienne stanu.

    Podstawy OpenGL


    Ustawienie bie cego koloru do rysowania c d

    Ustawienie bieżącego koloru do rysowania, c.d.

    Ustawienie bieżącego koloru. Ogólna postać. Przesadnie ogólna, ale tym razem niech będzie

    voidglColor3{b|s|i|f|d|ub|us|ui}(TYPE r, TYPE g, TYPE b)‏;

    voidglColor4{b|s|i|f|d|ub|us|ui}(TYPE r, TYPE g, TYPE b, TYPE a)‏;

    voidglColor3{b|s|i|f|d|ub|us|ui}v(constTYPE *v)‏;

    voidglColor4{b|s|i|f|d|ub|us|ui}v(const TYPE *v)‏;

    Podstawy OpenGL


    Ustawienie bie cego koloru do rysowania c d1

    Ustawienie bieżącego koloru do rysowania, c.d.

    Typowe wywołania np:

    glColor3f(1.0f, 0.5f, 0.3f);

    glColor4f(1.0f, 1.0f, 0.0f, 1.0f);

    Jeśli pominiemy wywołanie glColor, to zostanie przyjęta wartość domyślna:

    glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

    Podstawy OpenGL


    Rysowanie punkt w linii wielok t w

    Rysowanie punktów, linii, wielokątów

    voidglBegin(GLenummode)

    voidglEnd(void)‏

    GLfloat pt[2] = {3.0, 4.0};

    glBegin(GL_POINTS);

    glVertex2f(1.0, 2.0); // x=1, y=2

    glVertex2f(2.0, 3.0); // x=2, y=3

    glVertex2fv(pt); // x=3, y=4

    glVertex2i(4,5); // x=4, y=5

    glEnd();

    glBegin (GL_LINE_LOOP);

    for (j=0; j<10; j++) {

    angle = 2*M_PI*j/10;

    glVertex2f (cos(angle), sin(angle);

    }

    glEnd();

    Podstawy OpenGL


    Triangle strip

    Triangle strip

    glBegin(GL_TRIANGLE_STRIP);

    glVertex3fv(v0);

    glVertex3fv(v1);

    glVertex3fv(v2);

    glVertex3fv(v3);

    glVertex3fv(v4);

    glVertex3fv(v5);

    glEnd();

    Kolejność przeglądania węzłów:

    • trójkąt 0 -> v0, v1, v2

    • trójkąt 1 -> v2, v1, v3 (czemunie v1, v2, v3?)‏

    • trójkąt 2 -> v2, v3, v4

    • trójkąt3 -> v4, v3, v5 (nie v3, v4, v5)‏

    v4

    v2

    v0

    v0

    v0

    v0

    v5

    v5

    v5

    v5

    v5

    v1

    v1

    v1

    v1

    v3

    Podstawy OpenGL


    Przyk ad rysowanie siatki

    Przykład: rysowanie siatki

    GLintsize = 20;GLfloat x, z, punkt1[3], punkt2[3];GLfloat x0 = -10, z0 = -10, krok = 1.0, value = 0.5;

    glClear(GL_COLOR_BUFFER_BIT); punkt1[1] = punkt2[1] = value;

    for(x = x0; x < x0 + size; x += krok){ punkt1[0] = x; punkt2[0] = x + krok;glBegin(GL_TRIANGLE_STRIP); for(z = z0; z < z0 + size; z += krok) { punkt1[2] = punkt2[2] = z; glVertex3fv(punkt1); glVertex3fv(punkt2); }

    glEnd(); }

    Podstawy OpenGL


    Koniec wst pu

    Koniec wstępu

    Podstawy OpenGL


  • Login