SlideShare a Scribd company logo
1 of 8
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   OpenGL. Leksykon
                                         kieszonkowy
           KATALOG KSI¥¯EK
                                         Autor: Andrzej Or³owski
                      KATALOG ONLINE     ISBN: 83-7361-968-2
                                         Format: B6, stron: 160
       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Biblioteka OpenGL to narzêdzie s³u¿¹ce do tworzenia realistycznej grafiki
                                         trójwymiarowej w programach. Mo¿liwo ci OpenGL mo¿emy dzi podziwiaæ w grach
                                         komputerowych, animacjach, wizualizacjach i filmowych efektach specjalnych.
         CENNIK I INFORMACJE             Wiêkszo æ publikacji dotycz¹cych biblioteki OpenGL przedstawia j¹ w kontek cie
                                         jêzyka C++, z poziomu którego faktycznie jest najczê ciej wykorzystywana. Jednak¿e
                   ZAMÓW INFORMACJE      wielu programistów, którzy czêsto rozpoczynaj¹ swoj¹ naukê od Pascala i zwi¹zanego
                     O NOWO CIACH        z nim rodowiska Delphi, próbuje stosowaæ j¹ równie¿ w po³¹czeniu z tym jêzykiem.
                                         Ksi¹¿ka „OpenGL. Leksykon kieszonkowy” jest przeznaczona w³a nie dla tych
                       ZAMÓW CENNIK      programistów. Opisuje bibliotekê OpenGL pod k¹tem zastosowania jej w aplikacjach
                                         tworzonych za pomoc¹ Delphi. Przedstawia wszystkie funkcje s³u¿¹ce do generowania
                                         i wy wietlania grafiki — pocz¹wszy od bry³ podstawowych, a skoñczywszy na krzywych
                 CZYTELNIA               NURBS i Be`ziera. Pokazuje sposoby o wietlania i teksturowania obiektów w scenie
                                         oraz metody importowania siatek stworzonych w programach 3D.
          FRAGMENTY KSI¥¯EK ONLINE           • Typy danych w OpenGL
                                             • Metody rzutowania i wy wietlania sceny 3D na ekranie monitora
                                             • Obiekty i bry³y podstawowe
                                             • O wietlenie
                                             • Umieszczanie napisów w scenie
                                             • Korzystanie z map bitowych
                                             • Materia³y i tekstury
                                             • Animacja
                                             • Import obiektów 3D
                                         Delphi to nie tylko aplikacje bazodanowe i internetowe. Przekonaj siê, ¿e w Delphi
                                         mo¿na równie¿ stworzyæ realistyczn¹ animacjê 3D.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści


     Wstęp ............................................................................................ 5

1. OpenGL dla Windows .................................................................. 7
     Typy Object Pascal i OpenGL                                                                      7
     Przygotowanie środowiska pracy. Funkcje WGL                                                     10
     Aplikacja w oknie                                                                               13
     Aplikacja pełnoekranowa                                                                         19
     Komponent (VC) dla Delphi                                                                       19

2. Biblioteki OpenGL ...................................................................... 23
     Biblioteka standardowa                                                                          23
     Biblioteka GLU                                                                                  59
     Biblioteki GLUT                                                                                 63

3. Metody zobrazowania ...............................................................64
     Rzut prostokątny                                                                                64
     Rzut perspektywiczny i kamera                                                                   67
     Organizacja ekranu OpenGL                                                                       72

4. Obiekty podstawowe ................................................................. 74
     Punkt                                                                                           74
     Linia                                                                                           78
     Trójkąt                                                                                         81
     Czworokąt                                                                                       83
     Wielokąt                                                                                        84




                                                                                                       3
5. Bryły ............................................................................................86
            Cylinder                                                                                    87
            Dysk                                                                                        88
            Sfera                                                                                       91

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

     7. Światło ...................................................................................... 108
            Światło tła (otoczenia)                                                                   109
            Położenie źródła światła w przestrzeni                                                    110
            Światło rozproszone                                                                       112
            Reflektor                                                                                 112
            Rozmycie                                                                                  113

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

     9. Obrazy w OpenG L .....................................................................118
            Mapy bitowe                                                                               118
            Wczytywanie plików BMP                                                                    119
            Wyświetlanie obrazów w formacie BMP                                                       121
            Kopiowanie fragmentu ekranu                                                               124
            Powiększenie                                                                              126

    10. Materiał i tekstura ................................................................... 128
            Materiał                                                                                  128
            Tekstura                                                                                  133

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

    12. Ruch .......................................................................................... 148
            Przemieszczenie                                                                           148
            Obroty                                                                                    150
            Skalowanie                                                                                153

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


4       |     Spis treści
Rozdział 4. Obiekty podstawowe

Punkt
Punkt stanowi najważniejszy element każdej rysowanej sceny.
Wszystkie obiekty rysowane za pomocą procedur OpenGL są
zbudowane z punktów. Punkty te mogą wyznaczać wierzchołki
obiektów (linia, trójkąt) lub stanowić wypełnienie tych obiektów.
Za pomocą punktów można również rysować wykresy funkcji
matematycznych czy też dowolne figury ułożone z kolejnych
punktów. Aby wyznaczyć położenie punktu i jego wielkość,
wykorzystuje się specjalne procedury OpenGL. Bardzo ważnym
zagadnieniem jest wzajemna zależność pomiędzy punktem ry-
sowanym w OpenGL a pikselem. Piksel jest najmniejszym ob-
szarem ekranu, jaki może przy rozdzielczości określonej para-
metrami danej karty graficznej w danej chwili być zapalony
(zgaszony). Na rozmiar piksela programista nie ma żadnego
wpływu (poza zmianą rozdzielczości ekranu). Punkt natomiast
posiada rozmiar określony wielkością płaszczyzny rzutowania
i zadeklarowaną wielkością. Domyślną wielkością punktu jest 1
(jeden), co nie oznacza wcale, że na ekranie będzie on odpo-
wiadał jednemu pikselowi. W przypadku zmiany rozmiaru
płaszczyzny rzutowania zmieni się również rozmiar wyświe-
tlanego punktu o wielkości jednostkowej (może wynosić kilka
lub kilkanaście pikseli). Zagadnienie to jest szczególnie istotne
przy imporcie obrazków, jak również podczas wykorzystywa-
nia bitmap, których wymiary są określane w pikselach. Rezultat
nieskorelowania wymiarów okna grafiki i płaszczyzny rzuto-
wania przedstawia rysunek 4.1.




                                                               74
Rysunek 4.1. Zależność wymiarów wyświetlania obiektu, którego
wymiary określane są w pikselach i w punktach
Obrazek z lewej strony został wykonany z wykorzystaniem
procedury glDrawPixels(), tzn. narysowano go pikselami, na-
tomiast ten z prawej strony jest teksturą nałożoną na kwadrat
o takich samych wymiarach, ale określonych w punktach. Wy-
miary obrazka wynoszą 128 na 128 pikseli, wymiary kwadratu
— 128 na 128 punktów. Okno grafiki określone procedurą
glViewPort() ma wymiary 600 na 600 pikseli, a wymiary płasz-
czyzny rzutowania zdefiniowane procedurą glOrtho() wyno-
szą 400 na 400 punktów. Jak wynika z przedstawionego rysunku,
proporcje pomiędzy rzeczywistymi rozmiarami rysunku a obiek-
tem o tych samych wymiarach, ale wyrażonych w innych jed-
nostkach, są oczywiste. Z powyższego wywodu wynika więc
jasno, że piksel to nie to samo co punkt.

glPointSize()
Deklaracja: procedure glPointSize(Grubość : GLFloat);
Działanie: ustala nową wielkość rysowanych punktów.



                                 Rozdział 4. Obiekty podstawowe   |   75
Uwaga
         Nowa wielkość rysowanych punktów będzie taka sama
         dla wszystkich punktów rysowanych po jej ustaleniu. Aby
         przywrócić domyślną wielkość punktu 1 (jeden), należy po-
         nownie wywołać procedurę glPointSize(), z parametrem
         Grubość równym 1 (jeden).
          glPointSize(5); // Punkt o wielkości 5 jednostek
          glPointSize(1); // Powrót do wielkości domyślnej



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.


Działanie: rysuje wierzchołek (punkt) na płaszczyźnie rzutowania,
w miejscu określonym parametrami wywołania. Tworzenie takich
obiektów jak linie, wielokąty itp. odbywa się za pomocą okre-
ślenia położenia ich wierzchołków w przestrzeni. Cyfra przy-
rostka określa liczbę wymiarów w przestrzeni, w której będzie
umieszczony wierzchołek. Litera v oznacza, że parametry do
procedury będą przekazane w postaci tablicy (wektora). Najczę-
ściej procedura ta jest wywoływana w postaci: glVertex3f().
Należy w tym miejscu wspomnieć, że liczby typu Double
(GLDouble) i Single (GLFloat) są bez konwersji akceptowane
przez koprocesor matematyczny (CPU) i z tego też względu
należy z nich korzystać, oczywiście jeżeli inne względy nie


76   |    OpenGL. Leksykon kieszonkowy
wymuszają stosowania innego typu liczb. W powyższym przy-
kładzie uwzględniono procedurę glPointSize(), która określa
wielkość rysowanych punktów na ekranie. Jeżeli nie wywołamy
tej procedury, to wszystkie punkty będą miały domyślną wiel-
kość równą 1 (jeden). Dla punktów, podobnie jak dla innych
obiektów, można wykorzystać narzędzie do wygładzania kra-
wędzi, czyli tzw. antialiasing. W razie zwiększenia rozmiarów
punktu okaże się, że ma on kształt kwadratu, co nie zawsze jest
pożądane. Aby tego uniknąć, wystarczy wywołać procedurę
glEnable() z parametrem GL_POINT_SMOOTH, co spowoduje, że
narożniki zostaną zaokrąglone. Należy pamiętać o wywołaniu
procedury glDisable(GL_POINT_SMOOTH), jeżeli kolejne punkty
mają być rysowane bez wygładzania. Włączanie wygładzania
dla punktów o domyślnej wielkości 1.0 jest bezcelowe i nie na-
leży go stosować. Poniżej przedstawiono fragment kodu, którego
wykonanie powoduje narysowanie punktu bez wygładzania
i z wygładzaniem:
 // Punkt
    glColor3f(0.0, 0.0, 1.0); // Kolor niebieski
 // Punkt bez wygładzania
    glPointSize(95); // Wielkość punktu(95 pikseli);
    glBegin(GL_POINTS); // Rysowanie punktów
     glVertex3f(0, 0, 0); // Położenie punktu(Środek okna
                             grafiki OpenGL)
    glEnd; // Koniec rysowania
 // Punkt wygładzony
    glEnable(GL_POINT_SMOOTH); // Włączenie wygładzania
                                  (antialiasing) punktu
    glPointSize(95);
    glTranslatef(100, 0, 0);
    glBegin(GL_POINTS);
     glVertex3f(0, 0, 0);
    glEnd;
    glDisable(GL_POINT_SMOOTH); // Wyłączenie wygładzania
                                   punktu

Rezultat działania powyższego fragmentu kodu ilustruje ry-
sunek 4.2.



                              Rozdział 4. Obiekty podstawowe   |   77
Rysunek 4.2. Punkt o wielkości 95 jednostek bez wygładzania i po włączeniu
wygładzania

                                   Uwaga
         Domyślnie wygładzanie jest wyłączone, a to ze względu na
         bardzo znaczące spowolnienie pracy programu. Przed włą-
         czeniem wygładzania należy przeanalizować konieczność jego
         użycia i wyłączyć, jeżeli przestaje być faktycznie niezbędne.




78   |     OpenGL. Leksykon kieszonkowy

More Related Content

More from Wydawnictwo Helion

Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++Wydawnictwo Helion
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaWydawnictwo Helion
 
Rewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejRewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejWydawnictwo Helion
 
Fotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantówFotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantówWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga eksperta
 
Rewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejRewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowej
 
Fotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantówFotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantów
 

OpenGL. Leksykon kieszonkowy

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI OpenGL. Leksykon kieszonkowy KATALOG KSI¥¯EK Autor: Andrzej Or³owski KATALOG ONLINE ISBN: 83-7361-968-2 Format: B6, stron: 160 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA Biblioteka OpenGL to narzêdzie s³u¿¹ce do tworzenia realistycznej grafiki trójwymiarowej w programach. Mo¿liwo ci OpenGL mo¿emy dzi podziwiaæ w grach komputerowych, animacjach, wizualizacjach i filmowych efektach specjalnych. CENNIK I INFORMACJE Wiêkszo æ publikacji dotycz¹cych biblioteki OpenGL przedstawia j¹ w kontek cie jêzyka C++, z poziomu którego faktycznie jest najczê ciej wykorzystywana. Jednak¿e ZAMÓW INFORMACJE wielu programistów, którzy czêsto rozpoczynaj¹ swoj¹ naukê od Pascala i zwi¹zanego O NOWO CIACH z nim rodowiska Delphi, próbuje stosowaæ j¹ równie¿ w po³¹czeniu z tym jêzykiem. Ksi¹¿ka „OpenGL. Leksykon kieszonkowy” jest przeznaczona w³a nie dla tych ZAMÓW CENNIK programistów. Opisuje bibliotekê OpenGL pod k¹tem zastosowania jej w aplikacjach tworzonych za pomoc¹ Delphi. Przedstawia wszystkie funkcje s³u¿¹ce do generowania i wy wietlania grafiki — pocz¹wszy od bry³ podstawowych, a skoñczywszy na krzywych CZYTELNIA NURBS i Be`ziera. Pokazuje sposoby o wietlania i teksturowania obiektów w scenie oraz metody importowania siatek stworzonych w programach 3D. FRAGMENTY KSI¥¯EK ONLINE • Typy danych w OpenGL • Metody rzutowania i wy wietlania sceny 3D na ekranie monitora • Obiekty i bry³y podstawowe • O wietlenie • Umieszczanie napisów w scenie • Korzystanie z map bitowych • Materia³y i tekstury • Animacja • Import obiektów 3D Delphi to nie tylko aplikacje bazodanowe i internetowe. Przekonaj siê, ¿e w Delphi mo¿na równie¿ stworzyæ realistyczn¹ animacjê 3D. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wstęp ............................................................................................ 5 1. OpenGL dla Windows .................................................................. 7 Typy Object Pascal i OpenGL 7 Przygotowanie środowiska pracy. Funkcje WGL 10 Aplikacja w oknie 13 Aplikacja pełnoekranowa 19 Komponent (VC) dla Delphi 19 2. Biblioteki OpenGL ...................................................................... 23 Biblioteka standardowa 23 Biblioteka GLU 59 Biblioteki GLUT 63 3. Metody zobrazowania ...............................................................64 Rzut prostokątny 64 Rzut perspektywiczny i kamera 67 Organizacja ekranu OpenGL 72 4. Obiekty podstawowe ................................................................. 74 Punkt 74 Linia 78 Trójkąt 81 Czworokąt 83 Wielokąt 84 3
  • 3. 5. Bryły ............................................................................................86 Cylinder 87 Dysk 88 Sfera 91 6. Krzywe i powierzchnie .............................................................. 93 Krzywe i powierzchnie Beziera 93 7. Światło ...................................................................................... 108 Światło tła (otoczenia) 109 Położenie źródła światła w przestrzeni 110 Światło rozproszone 112 Reflektor 112 Rozmycie 113 8. Napisy ........................................................................................ 116 9. Obrazy w OpenG L .....................................................................118 Mapy bitowe 118 Wczytywanie plików BMP 119 Wyświetlanie obrazów w formacie BMP 121 Kopiowanie fragmentu ekranu 124 Powiększenie 126 10. Materiał i tekstura ................................................................... 128 Materiał 128 Tekstura 133 11. Import siatek ............................................................................ 140 12. Ruch .......................................................................................... 148 Przemieszczenie 148 Obroty 150 Skalowanie 153 Skorowidz ................................................................................. 154 4 | Spis treści
  • 4. Rozdział 4. Obiekty podstawowe Punkt Punkt stanowi najważniejszy element każdej rysowanej sceny. Wszystkie obiekty rysowane za pomocą procedur OpenGL są zbudowane z punktów. Punkty te mogą wyznaczać wierzchołki obiektów (linia, trójkąt) lub stanowić wypełnienie tych obiektów. Za pomocą punktów można również rysować wykresy funkcji matematycznych czy też dowolne figury ułożone z kolejnych punktów. Aby wyznaczyć położenie punktu i jego wielkość, wykorzystuje się specjalne procedury OpenGL. Bardzo ważnym zagadnieniem jest wzajemna zależność pomiędzy punktem ry- sowanym w OpenGL a pikselem. Piksel jest najmniejszym ob- szarem ekranu, jaki może przy rozdzielczości określonej para- metrami danej karty graficznej w danej chwili być zapalony (zgaszony). Na rozmiar piksela programista nie ma żadnego wpływu (poza zmianą rozdzielczości ekranu). Punkt natomiast posiada rozmiar określony wielkością płaszczyzny rzutowania i zadeklarowaną wielkością. Domyślną wielkością punktu jest 1 (jeden), co nie oznacza wcale, że na ekranie będzie on odpo- wiadał jednemu pikselowi. W przypadku zmiany rozmiaru płaszczyzny rzutowania zmieni się również rozmiar wyświe- tlanego punktu o wielkości jednostkowej (może wynosić kilka lub kilkanaście pikseli). Zagadnienie to jest szczególnie istotne przy imporcie obrazków, jak również podczas wykorzystywa- nia bitmap, których wymiary są określane w pikselach. Rezultat nieskorelowania wymiarów okna grafiki i płaszczyzny rzuto- wania przedstawia rysunek 4.1. 74
  • 5. Rysunek 4.1. Zależność wymiarów wyświetlania obiektu, którego wymiary określane są w pikselach i w punktach Obrazek z lewej strony został wykonany z wykorzystaniem procedury glDrawPixels(), tzn. narysowano go pikselami, na- tomiast ten z prawej strony jest teksturą nałożoną na kwadrat o takich samych wymiarach, ale określonych w punktach. Wy- miary obrazka wynoszą 128 na 128 pikseli, wymiary kwadratu — 128 na 128 punktów. Okno grafiki określone procedurą glViewPort() ma wymiary 600 na 600 pikseli, a wymiary płasz- czyzny rzutowania zdefiniowane procedurą glOrtho() wyno- szą 400 na 400 punktów. Jak wynika z przedstawionego rysunku, proporcje pomiędzy rzeczywistymi rozmiarami rysunku a obiek- tem o tych samych wymiarach, ale wyrażonych w innych jed- nostkach, są oczywiste. Z powyższego wywodu wynika więc jasno, że piksel to nie to samo co punkt. glPointSize() Deklaracja: procedure glPointSize(Grubość : GLFloat); Działanie: ustala nową wielkość rysowanych punktów. Rozdział 4. Obiekty podstawowe | 75
  • 6. Uwaga Nowa wielkość rysowanych punktów będzie taka sama dla wszystkich punktów rysowanych po jej ustaleniu. Aby przywrócić domyślną wielkość punktu 1 (jeden), należy po- nownie wywołać procedurę glPointSize(), z parametrem Grubość równym 1 (jeden). glPointSize(5); // Punkt o wielkości 5 jednostek glPointSize(1); // Powrót do wielkości domyślnej 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. Działanie: rysuje wierzchołek (punkt) na płaszczyźnie rzutowania, w miejscu określonym parametrami wywołania. Tworzenie takich obiektów jak linie, wielokąty itp. odbywa się za pomocą okre- ślenia położenia ich wierzchołków w przestrzeni. Cyfra przy- rostka określa liczbę wymiarów w przestrzeni, w której będzie umieszczony wierzchołek. Litera v oznacza, że parametry do procedury będą przekazane w postaci tablicy (wektora). Najczę- ściej procedura ta jest wywoływana w postaci: glVertex3f(). Należy w tym miejscu wspomnieć, że liczby typu Double (GLDouble) i Single (GLFloat) są bez konwersji akceptowane przez koprocesor matematyczny (CPU) i z tego też względu należy z nich korzystać, oczywiście jeżeli inne względy nie 76 | OpenGL. Leksykon kieszonkowy
  • 7. wymuszają stosowania innego typu liczb. W powyższym przy- kładzie uwzględniono procedurę glPointSize(), która określa wielkość rysowanych punktów na ekranie. Jeżeli nie wywołamy tej procedury, to wszystkie punkty będą miały domyślną wiel- kość równą 1 (jeden). Dla punktów, podobnie jak dla innych obiektów, można wykorzystać narzędzie do wygładzania kra- wędzi, czyli tzw. antialiasing. W razie zwiększenia rozmiarów punktu okaże się, że ma on kształt kwadratu, co nie zawsze jest pożądane. Aby tego uniknąć, wystarczy wywołać procedurę glEnable() z parametrem GL_POINT_SMOOTH, co spowoduje, że narożniki zostaną zaokrąglone. Należy pamiętać o wywołaniu procedury glDisable(GL_POINT_SMOOTH), jeżeli kolejne punkty mają być rysowane bez wygładzania. Włączanie wygładzania dla punktów o domyślnej wielkości 1.0 jest bezcelowe i nie na- leży go stosować. Poniżej przedstawiono fragment kodu, którego wykonanie powoduje narysowanie punktu bez wygładzania i z wygładzaniem: // Punkt glColor3f(0.0, 0.0, 1.0); // Kolor niebieski // Punkt bez wygładzania glPointSize(95); // Wielkość punktu(95 pikseli); glBegin(GL_POINTS); // Rysowanie punktów glVertex3f(0, 0, 0); // Położenie punktu(Środek okna grafiki OpenGL) glEnd; // Koniec rysowania // Punkt wygładzony glEnable(GL_POINT_SMOOTH); // Włączenie wygładzania (antialiasing) punktu glPointSize(95); glTranslatef(100, 0, 0); glBegin(GL_POINTS); glVertex3f(0, 0, 0); glEnd; glDisable(GL_POINT_SMOOTH); // Wyłączenie wygładzania punktu Rezultat działania powyższego fragmentu kodu ilustruje ry- sunek 4.2. Rozdział 4. Obiekty podstawowe | 77
  • 8. Rysunek 4.2. Punkt o wielkości 95 jednostek bez wygładzania i po włączeniu wygładzania Uwaga Domyślnie wygładzanie jest wyłączone, a to ze względu na bardzo znaczące spowolnienie pracy programu. Przed włą- czeniem wygładzania należy przeanalizować konieczność jego użycia i wyłączyć, jeżeli przestaje być faktycznie niezbędne. 78 | OpenGL. Leksykon kieszonkowy