You are on page 1of 8

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

OpenGL. Leksykon
kieszonkowy
Autor: Andrzej Orowski
ISBN: 83-7361-968-2
Format: B6, stron: 160

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Biblioteka OpenGL to narzdzie suce do tworzenia realistycznej grafiki


trjwymiarowej w programach. Moliwoci OpenGL moemy dzi podziwia w grach
komputerowych, animacjach, wizualizacjach i filmowych efektach specjalnych.
Wikszo publikacji dotyczcych biblioteki OpenGL przedstawia j w kontekcie
jzyka C++, z poziomu ktrego faktycznie jest najczciej wykorzystywana. Jednake
wielu programistw, ktrzy czsto rozpoczynaj swoj nauk od Pascala i zwizanego
z nim rodowiska Delphi, prbuje stosowa j rwnie w poczeniu z tym jzykiem.
Ksika OpenGL. Leksykon kieszonkowy jest przeznaczona wanie dla tych
programistw. Opisuje bibliotek OpenGL pod ktem zastosowania jej w aplikacjach
tworzonych za pomoc Delphi. Przedstawia wszystkie funkcje suce do generowania
i wywietlania grafiki poczwszy od bry podstawowych, a skoczywszy na krzywych
NURBS i Be`ziera. Pokazuje sposoby owietlania i teksturowania obiektw w scenie
oraz metody importowania siatek stworzonych w programach 3D.
Typy danych w OpenGL
Metody rzutowania i wywietlania sceny 3D na ekranie monitora
Obiekty i bryy podstawowe
Owietlenie
Umieszczanie napisw w scenie
Korzystanie z map bitowych
Materiay i tekstury
Animacja
Import obiektw 3D
Delphi to nie tylko aplikacje bazodanowe i internetowe. Przekonaj si, e w Delphi
mona rwnie stworzy realistyczn animacj 3D.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci

Wstp ............................................................................................ 5
1. OpenGL dla Windows .................................................................. 7
Typy Object Pascal i OpenGL
Przygotowanie rodowiska pracy. Funkcje WGL
Aplikacja w oknie
Aplikacja penoekranowa
Komponent (VC) dla Delphi

7
10
13
19
19

2. Biblioteki OpenGL ...................................................................... 23


Biblioteka standardowa
Biblioteka GLU
Biblioteki GLUT

23
59
63

3. Metody zobrazowania ...............................................................64


Rzut prostoktny
Rzut perspektywiczny i kamera
Organizacja ekranu OpenGL

64
67
72

4. Obiekty podstawowe ................................................................. 74


Punkt
Linia
Trjkt
Czworokt
Wielokt

74
78
81
83
84

5. Bryy ............................................................................................86
Cylinder
Dysk
Sfera

87
88
91

6. Krzywe i powierzchnie .............................................................. 93


Krzywe i powierzchnie Beziera

93

7. wiato ...................................................................................... 108


wiato ta (otoczenia)
Pooenie rda wiata w przestrzeni
wiato rozproszone
Reflektor
Rozmycie

109
110
112
112
113

8. Napisy ........................................................................................ 116


9. Obrazy w OpenG L .....................................................................118
Mapy bitowe
Wczytywanie plikw BMP
Wywietlanie obrazw w formacie BMP
Kopiowanie fragmentu ekranu
Powikszenie

118
119
121
124
126

10. Materia i tekstura ................................................................... 128


Materia
Tekstura

128
133

11. Import siatek ............................................................................ 140


12. Ruch .......................................................................................... 148
Przemieszczenie
Obroty
Skalowanie

148
150
153

Skorowidz ................................................................................. 154


4

Spis treci

Rozdzia 4. Obiekty podstawowe


Punkt
Punkt stanowi najwaniejszy element kadej rysowanej sceny.
Wszystkie obiekty rysowane za pomoc procedur OpenGL s
zbudowane z punktw. Punkty te mog wyznacza wierzchoki
obiektw (linia, trjkt) lub stanowi wypenienie tych obiektw.
Za pomoc punktw mona rwnie rysowa wykresy funkcji
matematycznych czy te dowolne figury uoone z kolejnych
punktw. Aby wyznaczy pooenie punktu i jego wielko,
wykorzystuje si specjalne procedury OpenGL. Bardzo wanym
zagadnieniem jest wzajemna zaleno pomidzy punktem rysowanym w OpenGL a pikselem. Piksel jest najmniejszym obszarem ekranu, jaki moe przy rozdzielczoci okrelonej parametrami danej karty graficznej w danej chwili by zapalony
(zgaszony). Na rozmiar piksela programista nie ma adnego
wpywu (poza zmian rozdzielczoci ekranu). Punkt natomiast
posiada rozmiar okrelony wielkoci paszczyzny rzutowania
i zadeklarowan wielkoci. Domyln wielkoci punktu jest 1
(jeden), co nie oznacza wcale, e na ekranie bdzie on odpowiada jednemu pikselowi. W przypadku zmiany rozmiaru
paszczyzny rzutowania zmieni si rwnie rozmiar wywietlanego punktu o wielkoci jednostkowej (moe wynosi kilka
lub kilkanacie pikseli). Zagadnienie to jest szczeglnie istotne
przy imporcie obrazkw, jak rwnie podczas wykorzystywania bitmap, ktrych wymiary s okrelane w pikselach. Rezultat
nieskorelowania wymiarw okna grafiki i paszczyzny rzutowania przedstawia rysunek 4.1.

74

Rysunek 4.1. Zaleno wymiarw wywietlania obiektu, ktrego


wymiary okrelane s w pikselach i w punktach

Obrazek z lewej strony zosta wykonany z wykorzystaniem


procedury glDrawPixels(), tzn. narysowano go pikselami, natomiast ten z prawej strony jest tekstur naoon na kwadrat
o takich samych wymiarach, ale okrelonych w punktach. Wymiary obrazka wynosz 128 na 128 pikseli, wymiary kwadratu
128 na 128 punktw. Okno grafiki okrelone procedur
glViewPort() ma wymiary 600 na 600 pikseli, a wymiary paszczyzny rzutowania zdefiniowane procedur glOrtho() wynosz 400 na 400 punktw. Jak wynika z przedstawionego rysunku,
proporcje pomidzy rzeczywistymi rozmiarami rysunku a obiektem o tych samych wymiarach, ale wyraonych w innych jednostkach, s oczywiste. Z powyszego wywodu wynika wic
jasno, e piksel to nie to samo co punkt.
glPointSize()
Deklaracja: procedure glPointSize(Grubo : GLFloat);
Dziaanie: ustala now wielko rysowanych punktw.

Rozdzia 4. Obiekty podstawowe

75

Uwaga
Nowa wielko rysowanych punktw bdzie taka sama
dla wszystkich punktw rysowanych po jej ustaleniu. Aby
przywrci domyln wielko punktu 1 (jeden), naley ponownie wywoa procedur glPointSize(), z parametrem
Grubo rwnym 1 (jeden).
glPointSize(5); // Punkt o wielkoci 5 jednostek
glPointSize(1); // Powrt do wielkoci domylnej

glVertex*()
Deklaracja: procedure glVertex2*(x, y, z, w : GL**[PGL**]);
lub procedure glVertex3*(x, y, z, w : GL**[PGL**]);
lub procedure glVertex4*(x, y, z, w : GL**[PGL**]);
Uwaga
Znak * (gwiazdka) to jedno z: d, f, i, s, dv, fv, iv lub sv.
Dwuznak ** (dwie gwiazdki) to odpowiednio: Double, Float,
Int lub Short.

Dziaanie: rysuje wierzchoek (punkt) na paszczynie rzutowania,


w miejscu okrelonym parametrami wywoania. Tworzenie takich
obiektw jak linie, wielokty itp. odbywa si za pomoc okrelenia pooenia ich wierzchokw w przestrzeni. Cyfra przyrostka okrela liczb wymiarw w przestrzeni, w ktrej bdzie
umieszczony wierzchoek. Litera v oznacza, e parametry do
procedury bd przekazane w postaci tablicy (wektora). Najczciej procedura ta jest wywoywana w postaci: glVertex3f().
Naley w tym miejscu wspomnie, e liczby typu Double
(GLDouble) i Single (GLFloat) s bez konwersji akceptowane
przez koprocesor matematyczny (CPU) i z tego te wzgldu
naley z nich korzysta, oczywicie jeeli inne wzgldy nie

76

OpenGL. Leksykon kieszonkowy

wymuszaj stosowania innego typu liczb. W powyszym przykadzie uwzgldniono procedur glPointSize(), ktra okrela
wielko rysowanych punktw na ekranie. Jeeli nie wywoamy
tej procedury, to wszystkie punkty bd miay domyln wielko rwn 1 (jeden). Dla punktw, podobnie jak dla innych
obiektw, mona wykorzysta narzdzie do wygadzania krawdzi, czyli tzw. antialiasing. W razie zwikszenia rozmiarw
punktu okae si, e ma on ksztat kwadratu, co nie zawsze jest
podane. Aby tego unikn, wystarczy wywoa procedur
glEnable() z parametrem GL_POINT_SMOOTH, co spowoduje, e
naroniki zostan zaokrglone. Naley pamita o wywoaniu
procedury glDisable(GL_POINT_SMOOTH), jeeli kolejne punkty
maj by rysowane bez wygadzania. Wczanie wygadzania
dla punktw o domylnej wielkoci 1.0 jest bezcelowe i nie naley go stosowa. Poniej przedstawiono fragment kodu, ktrego
wykonanie powoduje narysowanie punktu bez wygadzania
i z wygadzaniem:
// Punkt
glColor3f(0.0, 0.0, 1.0); // Kolor niebieski
// Punkt bez wygadzania
glPointSize(95); // Wielko punktu(95 pikseli);
glBegin(GL_POINTS); // Rysowanie punktw
glVertex3f(0, 0, 0); // Pooenie punktu(rodek okna
grafiki OpenGL)
glEnd; // Koniec rysowania
// Punkt wygadzony
glEnable(GL_POINT_SMOOTH); // Wczenie wygadzania
(antialiasing) punktu
glPointSize(95);
glTranslatef(100, 0, 0);
glBegin(GL_POINTS);
glVertex3f(0, 0, 0);
glEnd;
glDisable(GL_POINT_SMOOTH); // Wyczenie wygadzania
punktu

Rezultat dziaania powyszego fragmentu kodu ilustruje rysunek 4.2.

Rozdzia 4. Obiekty podstawowe

77

Rysunek 4.2. Punkt o wielkoci 95 jednostek bez wygadzania i po wczeniu


wygadzania

Uwaga
Domylnie wygadzanie jest wyczone, a to ze wzgldu na
bardzo znaczce spowolnienie pracy programu. Przed wczeniem wygadzania naley przeanalizowa konieczno jego
uycia i wyczy, jeeli przestaje by faktycznie niezbdne.

78

OpenGL. Leksykon kieszonkowy

You might also like