Základy 3D grafiky
Výukové texty
Ing Miroslav Fribert Dr.
Obsah
1. Prostorová geometrie – základní vztahy
2. Křivky
3. Plochy
4. 3D modelování a reprezentace těles
5. Geometrické transformace
6. Zobrazování prostorových dat
2
1. Geometrie v prostoru - základní vztahy
V této kapitole opakujeme základní pojmy z analytické geometrie v prostoru. Jedná se
o problematiku probíranou v předmětu matematika, proto bude uveden pouze přehled základních vztahů, které jsou důležité z hlediska pochopení principů vytváření 3D grafiky.
1.1 Vektory
V praxi se často setkáváme s veličinami, které mají velikost a orientovaný směr (rychlost,
síla). Takové veličiny nazýváme vektory a zobrazujeme je pomocí orientovaných úseček
s počátečním a koncovým bodem. Rozeznáváme volné a vázané vektory. Volný vektor je
umístěn v libovolném místě prostoru, vázaný vektor je spojen s nějakým konkrétním bodem –
počátek souřadnic, střed tělesa apod.
Obr. 1.1 Vázaný vektor
Jestliže umístíme počáteční bod vázaného vektoru do počátku souřadnic, je tak určen
polohový vektor. Polohový vektor je vázaný vektor a určuje bod v prostoru P. Počátečním
bodem polohového vektoru je tedy počátek souřadnic a koncovým je bod P. Vektory značíme
r
různými způsoby. My budeme používat OP , nebo a , nebo a - tučným písmenem bez šipky.
k
r
kde x,y,z jsou složky vektoru
j
i
r
Pro souřadnicové vyjádření polohového vektoru platí
=x +y +z
, i, j, k jednotkové vektory ve směru os souřadné soustavy.
2
+
z
2
= x2 +
y
r
Velikost polohového vektoru
x=
y=
z=
a a a
Průměty vektoru a do souřadných os (složky vektoru)
cos α
cos β
cos γ
kde α, β, γ jsou úhly, které svírá vektor a se souřadnými osami.
3
b
a
b
a
Pro jednotkový vektor jsou velikosti jeho složky x = cosα, y = cosβ, z = cosγ protože
velikost složky jednotkového vektoru je 1.
Součet a rozdíl dvou vektorů
Součet vektorů + a rozdíl vektorů − definujeme jako úhlopříčky rovnoběžníka,
který vznikne, když počátky vektorů umístíme do společného bodu a oba vektory považujeme za dvě strany tohoto rovnoběžníka.
= ( x1 ± x 2 ) + ( y1 ± y 2 ) + ( z1 ± z 2 )
k
j
i
±
b
a
Obr. 1.2 Součet a rozdíl dvou vektorů
Pro souřadnicové vyjádření platí vztah
V souřadnicovém vyjádření bude mít vypočítaný rozdílový vektor počáteční bod ve
společném bodě vektorů a, b. Nebude tedy úhlopříčkou uvedeného rovnoběžníka, ale bude
mít stejnou velikost i směr.
Násobení vektoru skalárem
Součin vektoru a a skaláru λ je vektor λ a, jehož absolutní hodnota je λ násobkem ab-
λ = λx + λy + γz
k
j
i
a
solutní hodnoty a a směr je pro kladné λ souhlasný se směrem a a pro záporné λ opačný.
V souřadnicovém vyjádření
⋅
b
a
b
a
Skalární součin dvou vektorů je skalár daný vztahem
cos ϕ
=
b
a
kde φ je úhel, který oba vektory svírají.
V souřadnicovém vyjádření
⋅
= x1 x 2 + y1 y 2 + z1 z 2
×
b
a
b
a
Vektorový součin dvou vektorů je vektor kolmý na směr obou vektorů, orientace je dána
kladně orientovaným trojhranem a jeho absolutní hodnota je dána vztahem
sin ϕ
=
kde φ je úhel, který oba vektory svírají.
k
j
i
V souřadnicovém vyjádření s použitím determinantu
a × b = x1
y1
z1
x2
y2
z2
a × b = ( y1 z 2 − y 2 z1 ) + ( x 2 z1 − x1 z 2 ) + ( x1 y 2 − x 2 y1 )
4
k
j
i
Po vyčíslení determinantu pomocí Hornerova schematu
1.2 Prostorová křivka
t
k
t
j
t
i
t
t
r
Vektorová rovnice parametrického vyjádření křivky je vektorová funkce skalárního argumentu. Pro polohový vektor r parametrické křivky můžeme psát
() =
(φ ) ⋅ +(χ ) ⋅ +(
ψ) ⋅
∈ a;b
kde t je parametr (skalární argument funkce).
Rozepsáním do složek dostaneme skalární tvar parametrické rovnice křivky
x = φ (t )
y = χ (t )
z = ψ (t )
Funkce φ(t), χ(t), ψ(t) jsou obecně nelineární, pro přímku jsou potom lineárními funkcemi argumentu t.
Příklad 1.
Parametrické rovnice φ(t) =sin t, χ(t) = cos t, ψ(t) = t pro t ∈< 0,10π > určují spirálovou
křivku podle následujícího obrázku.
Obr.1.3 Graf prostorové křivky
a
b
t
a
t
r
Zvláštním případem křivky je přímka. Parametrická vektorová rovnice přímky určené dvěma
body A = [a1,a2,a3], B = [b1,b 2,b3]
() = + ( )
kde a je polohový vektor bodu přímky v bodě A, b je vektor bodu přímky v bodě B do, r je
polohový vektor obecného bodu P přímky, t je skalární parametr v intervalu (-∞,∞).
Obr.1.4 Vektorové vyjádření přímky
5
Rozepsáním do složek dostaneme skalární tvar parametrické rovnice přímky
x = a1 + t (b1 − a1 )
y = a 2 + t ( b2 − a 2 )
z = a3 + t ( b3 − a3 )
Hodnoty b1 – a1, b2 – a2, b3 – a3 jsou směrovými koeficienty této přímky.
r
r
m
i
l
Derivace vektorové funkce
Jestliže existuje limita
r
∆t →0
(t + ∆t ) − (t )
∆t
k
j
i
k
j
i
r
Potom má funkce r(t) v bodě t derivaci ′(t ) vektorové funkce skalárního argumentu t rovnou této limitě.
dϕ
dχ
dψ
+
+
dt
dt
dt
Derivace složek křivky φ ′(t ), χ ′(t ),ψ ′(t ) jsou směrovými koeficienty tečny v bodě t.
′(t ) = ϕ ′(t ) + χ ′(t ) + ψ ′(t ) =
j
k
t
r
i
i
t
r
Příklad 2.
k
j
Je dána křivka( ) = t + t 2 + t 3 . Vypočítejte rovnici tečny v bodě t = 1 a souřadnice
jejího průsečíku v rovinou z = 0.
Velikosti složek bodu křivky v bodě t = 1 určíme z vektorové rovnice křivky. Potom a1 = 1,
a2 = 1, a3 = 1.
Derivace rovnice křivky je( ′) = + 2t + 3t 2 . Směrové koeficienty v bodě t = 1 jsou b1 –
a1 = 1, b2 – a2 = 2, b3 – a3 = 3.
Parametrický tvar rovnice tečny určíme ze skalárního tvaru rovnice přímky. Potom v bodě
t = 1 je x = 1+ t, y = 1+2t, z = 1+3t.
Z poslední rovnice pro z = 0 je t = -1/3. Dosazením do x a y jsou souřadnice průsečíku [2/3,
1/3, -1/3].
Průvodní trojhran prostorové křivky
Je dána prostorová křivka a na ní libovolně zvolený bod s parametrem t0. Průvodním
trojhranem křivky v bodě t0 rozumíme tečnu t v toto bodě, která je dána první derivací křivky
v bodě t0, normálu n, která je kolmá na tečnu a je dána druhou derivací křivky v bodě t0 a
binormálu b, která je kolmá na tečnu a normálu. Binormálu můžeme vypočítat jako vektorový součin tečny a normály.
Oskulační rovina τ je pak rovina, která je určena tečnou a normálou, normálová rovina
ν normálou a a binormálou a rektifikační rovina µ tečnou a binormálou. Všechny tři roviny
jsou na sebe kolmé.
6
Obr. 1.5 Průvodní trojhran prostorové křivky
Pomocí vzájemného natočení oskulačních rovin při změně parametru t se definuje tzv.
druhá křivost křivky – zkrut.
c=
dβ
ds
kde dβ je úhel natočení a ds je délka oblouku při změně parametru o dt.
1.3 Plocha v prostoru
v
,
u
k
v
,
u
j
v
,
u
i
v
,
u
v
,
u
r
Vektorová rovnice plochy je vektorová funkce dvou skalárních argumentů. Pro polohový
vektor r plochy můžeme psát
( ) =
(φ ) ⋅ +(χ ) ⋅ +(
ψ )⋅
∈ a; b
Rozepsáním do složek dostaneme skalární tvar parametrické rovnice plochy
x = φ (u, v)
y = χ (u , v)
z = ψ (u, v)
Funkce φ(u,v), χ(u,v), ψ(u,v) jsou obecně nelineární, pro rovinu jsou to potom lineární funkce
argumentů u,v. Parametrické rovnice x = u + 0.5v, y = 3v, z = 1- u2 definují kvadratickou
plochu podle následujícího obrázku 1.6.
Obr.1.6 Graf prostorové plochy
Zvláštním případem prostorové plochy je rovina. V tom případě jsou funkce parametrů
u,v lineární.
7
Příklad 3.
Parametrické rovnice x = u + 0.5v, y = 3v, z = v-5u definují rovinu podle následujícího obrázku.
Obr.1.7 Rovina v prostoru
Rovina v prostoru může být určena polohovým vektorem bodu, který v ní leží a normálovým vektorem, který je na ni kolmý, nebo dvěma protínajícími se přímkami, nebo třemi
body [a1,a2, a3], [b1,b2,b3], [c1,c2,c3], které neleží na přímce.
Obr.1.8 Rovina určená bodem a normálovým vektorem
k
j
i
n
Rovina je v prvním případě, který je nejobecnější a na který lze převést ostatní, určena
bodem P0(x0,y0,z0) a normálovým vektorem (je na rovinu kolmý) = a + b + c . Označíme r polohový vektor libovolného bodu P(x,y,z) roviny.
n
r0
r
Vektorový tvar normálové rovnice roviny vyplývá ze skalárního součinu kolmých vektorů a je tedy
(
)⋅ = 0
kde r0 je polohový vektor definičního bodu P0 a r je polohový vektor libovolného bodu P
roviny.
8
Po rozepsání do složek dostaneme
)⋅
k
j
i
) = (x − x0 ) + ( y − y 0 ) + (z − z 0 )
n
(
r0 r0
- r r
(
= a ( x − x 0 ) + b( y − y 0 ) + c ( z − z 0 )
Potom skalární tvar normálového tvaru roviny
a ( x − x 0 ) + b( y − y 0 ) + c ( z − z 0 ) = 0
Po vynásobení a sloučení dostaneme obecný tvar rovnice roviny
kde d = ax0 + by 0 + cz 0 =
n
r0
ax + by + cz − d = 0
⋅ .
k
j
i
n
Příklad 4.
Napište rovnici roviny určené bodem P0(-3,5,-1) a kolmé na vektor
=2 − +4 .
Vyjdeme z rovnice 2( x + 3) − ( y − 5) + 4( z + 1) = 0 . Po úpravě je výsledná rovnice této
roviny 2 x − y + 4 z = −15 .
Vypočítáme pro kontrolu parametr d
d = 2 ⋅ (− 3) − 5 + 4 ⋅ (− 1) = −15
3D graf této roviny vykreslený v Matlabu
Obr.1.9 Graf roviny z příkladu 4
Ještě uvedeme rovnici roviny danou třemi body P1, P2, P3, které neleží na přímce. Častým prvkem používaným v počítačové grafice jsou totiž trojúhelníkové plošky, které aproximují hraniční plochy nebo isoplochy těles. Plošky jsou zadány svými vrcholy.
9
r
m r
Obr. 1.10 Rovina určená třemi body
Normálový vektor m určíme jako vektorový součin kterýchkoli dvou vektorů určených
definičními body (obr.1.10), např. jako vektorový součin vektorů P1 P2 a P1 P3 . Pomocí normálového vektoru m a bodu P roviny můžeme rovnici této roviny napsat například ve tvaru
( − 1) ⋅
m
= P1 P2 × P1 P3
=0
kde r je polohový vektor proměnného bodu roviny, r1 je polohový vektor bodu P1.
Po rozepsání do složek a vyjádřením pomocí determinantu je rovnice roviny určené třemi
body ve tvaru
x − x1
y − y1
z − z1
x 2 − x1
y 2 − y1
z 2 − z1 = 0
x3 − x1
y 3 − y1
z 3 − z1
kde x1,y1,z1 jsou souřadnice bodu P1, x2,y2,y3 souřadnice bodu P2 a x3,y3,z3 souřadnice
bodu P3.
k
j
i
k
j
i
Příklad 5.
Vypočítejte normálový vektor a rovnici roviny proložené body P1(-2, 3, 1), P2(1, 0, -2) a
P3(1,2, -3).
Normálový vektor hledané roviny je vektor
k
j
i
m
= P1 P2 × P1 P3 = x 2 − x1 y 2 − y1 z 2 − z1 = 3 − 3 − 3 = 9 + 3 + 6
x3 − x1 y3 − y1 z 3 − z1 3 − 1 − 4
Potom rovnici roviny vypočítáme ze skalární rovnice roviny určené bodem P1 a normálovým
vektorem m, nebo přímo z předchozího determinantu.
9( x + 2) + 3( y − 3) + 6( z − 1) = 0
3x + 7 + 2 z + 1 = 0
1.4 Promítání na rovinu
V 3D počítačové grafice je problémem zobrazování těles na 2D zobrazovacích zařízeních. Jednou z metod je promítání jednotlivých bodů tělesa na rovinu. Touto problematikou
se zabývá deskriptivní geometrie. Zobrazovanému tvaru říkáme vzor, odpovídající útvar
vzniklý zobrazením na rovině - průmětně, je jeho obraz. V počítačové grafice se navíc při
10
tomto promítání řeší viditelnost jednotlivých částí tělesa, stínování a další postupy, které
umožní pozorovateli obrazu vnímat i prostorové vlastnosti vzoru.
Průměty velkých objektů (staveb, velkých strojů, zemského povrchu ) nelze provést ve
skutečné velikosti, a proto je zmenšujeme. V takovém případě mluvíme o měřítku plánu, mapy nebo výkresu. Naopak průměty malých objektů pro zřetelnost výkresu zvětšujeme. Nejpoužívanější druhy promítání v počítačové grafice jsou středové a rovnoběžné promítání.
Středové (centrální) promítání.
Zvolme libovolnou rovinu ρ (obr. 1.11), kterou nazýváme průmětna, a mimo ni bod S,
zvaný střed promítání. Středový čili centrální průmět bodu A je průsečík As spojnice SA s
průmětnou. Této spojnici říkáme promítací přímka nebo též promítací paprsek.(orientovaná
polopřímka). Je-li zobrazovaný bod A v témže poloprostoru jako střed promítání S, považujeme jeho vzdálenost od průmětny za zápornou, v opačném poloprostoru za kladnou (např.
bod B). Bod C, ležící v průmětně, je totožný se svým průmětem Cs. Bod totožný se středem
promítání nemá středový průmět.
Obr.1.11. Středový a kosoúhlý průmět bodu
Obraz vzniklý středovým promítáním odpovídá přibližně dojmu, jaký bychom měli,
kdybychom zobrazovaný objekt pozorovali jedním okem ze středu promítání. Téměř přesným středovým průmětem je fotografický snímek.
Rovnoběžné (paralelní) promítání.
Stane-li se střed promítání S nevlastním bodem S ∞ (je umístěn v nekonečnu) vzniká
rovnoběžné promítání. Promítací přímky jsou vzájemně rovnoběžné a svírají s průmětnou
úhel ρ úhel ϕ (obr. 1.11). Průměty bodů tělesa jsou průsečíky promítacích přímek, které jimi
vedeme rovnoběžně se směrem promítání s průmětnou. Rovnoběžné promítání dělíme na:
Kosoúhlé promítání je rovnoběžné promítání, kde 0° < ϕ < 90° . Na obrázku 1.8 jsou
zobrazeny kosoúhlé průměty Ak, Bk obecně položených bodů A, B a bodu C ležícího v průmětně.
Pravoúhlé čili ortogonální promítání vznikne, když směr promítání je k průmětně kolmý ( ϕ = 90° ). Pak tedy pravoúhlé průměty bodů A, B (obr.1.12) v prostoru jsou paty A0, B0
kolmic vedených z těchto bodů k průmětně.
11
Obr.1.12. Pravoúhlý průmět bodu
Ve všech uvedených případech můžeme volit polohu průmětny v prostoru libovolně.
V pravoúhlém promítání na jednu průmětnu bývá zvykem volit ji vodorovně a pak jí říkáme
půdorysna a průmět tělesa jako půdorys. Vzdálenosti těch bodů od půdorysny, které leží v
poloprostoru nad‚ považujeme za kladné, v dolním poloprostoru je považujeme za záporné.
V technické praxi je obvyklé pravoúhlé promítání těles na více průmětných rovin, obvykle tři. Potom se volí směry pohledů kolmé a průmětny se nazývají nárysna a bokorysna.
Na obr.1.13 jsou znázorněny všechny možné směry kolmých pohledů na těleso.
Obr.1.13 Směry pohledů na těleso při půdorysu (1), nárysu (2), bokorysu (3), pohledu
zdola (4), pohledu zezadu (5), pohledu zprava (6)
Dojem vzniklý při pohledu na rovnoběžný průmět objektu je podobný tomu, jako bychom těleso pozorovali ve směru promítání z velké vzdálenosti. Dodejme, že náš osobní prostorový dojem vnějšího světa vzniká v mozku po složitém přenosu obrazů vzniklých středovým průmětem na sítnicích obou očí, které jsou přibližně kulového tvaru.
Je ještě mnoho dalších zobrazení těles na rovinu, uveďme některá z nich.
Dvojstředové (bicentrální) promítání vzniká promítáním ze dvou různých středů do
téže roviny. Toto promítání je základem stereoskopického vidění, kde získáváme plastický
prostorový dojem téměř takový, jaký máme při přímém pozorování zobrazeného objektu
oběma očima. S tímto promítáním se setkáváme v plastické fotografii, v plastickém filmu
nebo v různých měřicích přístrojích.
Válcové promítání čili cylindrická projekce je promítání na rotační válcovou průmětnu,
kterou pak rozvineme do roviny.
12
Kuželové promítání čili kónická projekce je promítání na rotační kuželovou plochu, kterou pak rozvineme do roviny.
Těchto promítacích metod různě přizpůsobených se užívá v mediálních technologiích
ke zvýšení prostorového nebo panoramatického dojmu.
1.5 Knihovna OpenGL
Knihovna OpenGL (Open Graphics Library) byla navržena firmou Silicon Graphics
jako aplikační programové rozhraní (Application Programming Interface - API) ke grafickým
subsystémům. OpenGL byla navržena s důrazem na to, aby byla použitelná na různých typech grafických akcelerátorů a aby ji bylo možno použít i v případě, že na určité platformě
žádný grafický akcelerátor není nainstalován - v tom případě se použije softwarová simulace.
V současné době lze knihovnu OpenGL použít na různých verzích unixových systémů (včetně Linuxu a IRIXu), OS/2 a na platformách Microsoft Windows.
Jako doplněk ke grafické knihovně OpenGL byla vytvořena knihovna OpenGL Utility
Toolkit - GLUT. Definuje a implementuje aplikační rozhraní pro tvorbu oken a jednoduchého
grafického uživatelského rozhraní, přičemž je systémově nezávislá, tj. pro práci s okny se na
všech systémech používají vždy stejné funkce, které mají stejné parametry. Nezávislost na
operačním systému i platformě jde dokonce tak daleko, že se ve všech funkcích knihovny
GLUT používají pouze základní datové typy jazyka C/C++.
Kromě jazyka C/C++ existuje i rozhraní pro použití ve Fortranu a Object Pascalu (což
je programovací jazyk, který tvoří základ prostředí Delphi). Knihovna GLUT je v našem případě implementována do vývojového systému Visual C++ 6.0.
Syntaxe funkcí deklarovaných v OpenGL
Většina funkcí, které jsou v knihovně OpenGL deklarovány, používá poměrně důmyslnou syntaxi, kdy je již ze jména funkce zřejmé, kolik parametrů je použito a jakého jsou typu.
Nejprve si uveďme příklad volání funkce z demonstrační aplikace.
glColor3f(0.0f, 1.0f, 0.0f);
Jméno každé funkce z knihovny OpenGL začíná prefixem (předponou) gl. Podobnou
vlastnost mají i funkce z navazujících knihoven. Například všechny funkce z knihovny GLU
začínají prefixem glu a u knihovny GLUT je použit prefix glut. Pokud chce tvůrce aplikace
zachovat čitelnost a srozumitelnost kódu, neměl by své vlastní funkce pojmenovávat se zde
uvedenými prefixy.
Za prefixem gl následuje tělo jména funkce, které většinou značí vytvářený předmět
(např. Vertex-vrchol) nebo vlastnost, jež se mění (např. Color-barva). Tělo jména funkce začíná velkým písmenem, a pokud se skládá z více slov, jsou počáteční písmena slov velká
(např. ClearColor). Ve funkcích nejsou použita podtržítka a neexistují dvě jména funkcí, která by se lišila pouze ve velikosti písem, protože by to dělalo problémy u programovacích jazyků, které velikosti písma nerozlišují, například Pascalu.
13
Za tělem jména funkce většinou následuje číslo, které značí počet parametů. Z uvedeného příkladu je tedy zřejmé, že funkce bude mít tři parametry. Pokud funkce nemá žádné
parametry, žádné číslo se nepíše (tedy ani 0).
Na závěr je jedním či dvěma znaky uveden typ parametrů. U většiny funkcí mají
všechny parametry stejný typ, takže typ lze specifikovat. Pokud má funkce více parametrů, z
nichž každý je odlišného typu, tyto znaky se neuvádí. Některé funkce existující ve více variantách umožňují místo skupiny parametrů stejného typu předat pole.
Pro dosažení co nejsnazší přenositelnosti definuje knihovna OpenGL své vlastní datové
typy, které se při volání funkcí OpenGL doporučuje upřednostňovat před primitivními datovými typy použitého programovacího jazyka. Tyto nové typy si uvedeme v následující tabulce i s příslušným suffixem (příponou), který je použit při skládání jména funkce.
Tabulka č. 449
suffix datový typ
v jazyce C
v OpenGL
b
8-bit integer
signed char
GLbyte
s
16-bit integer
short int nebo int
GLshort
i
32-bit integer
int nebo long int
GLint
GLsizei
f
32-bit float
float
GLfloat
GLclampf
d
64-bit float
double
GLdouble
GLclampd
ub
8-bit unsigned integer
unsigned char
GLubyte
GLboolean
us
16-bit unsigned integer unsigned short/int GLushort
ui
32-bit unsigned integer unsigned int/long
GLuint
GLenum
GLbitfield
Jak je z předchozí tabulky patrné, je v OpenGL u každého datového typu pevně definovaná bitová délka, což je rozdíl oproti například jazyku C, kde typ int může mít podle použité
platformy nebo překladače šířku 16, 32 nebo 64 bitů.
Většina deklarativních funkcí v OpenGL existuje ve více verzích, které se liší počtem a
typem parametrů, například:
glColor3f(float1, float2, float3);
glColor3b(byte1, byte2, byte3);
glColor4b(byte1, byte2, byte3, byte4);
glVertex2i(int1, int2);
glVertex2d(double1, double2);
14
glVertex3f(float1, float2, float3);
glVertex4f(float1, float2, float3, float4);
Dále jsou uveden jednoduchý demonstrační příklad programu s knihovnou GLUT. V
příkladu pouze otevřeme okno do kterého vykreslíme zelený trojúhelník. Program reaguje na
změnu velikosti okna a polohy okna. Aplikaci lze ukončit stisknutím klávesy ESC.
Otevřeme prostředí Visual C++ a projekt troj.dsw. Postupně sledujeme jednotlivé příkazy a nakonec program spustíme a měníme vykreslovací okno. V kódu potom také změníme
barvu okna a trojúhelníka a polohu jeho vrcholů.
Vysvětlení funkcí a příkazů.
Tělo programu je rozděleno do několika funkcí, které jsou volány při výskytu určitých
událostí z funkce main(). Funkce onResize() je zavolána v případě, že se má změnit velikost
okna aplikace. Tato funkce je také zavolána ihned po vytvoření okna. Funkce onDisplay() je
zavolána při každém požadavku na překreslení okna. Funkce onKeyboard() se zavolá, když
uživatel stiskne některou klávesu generující ASCII kód. A poslední je funkce main().
V tomto příkladu se zaměříme na volání příkazů OpenGL, které jsou uvedené ve funkci
onDisplay(). Příkaz glClearColor(0.0, 0.0, 0.0, 0.0) specifikuje barvu, kterou se vymaže pozadí okna. Zadávají se čtyři barevné složky (Red, Green, Blue a Alpha), z nichž každá je v
rozsahu 0.0-1.0 (0.0 znamená nulovou složku ve výsledné barvě, 1.0 maximální hodnotu).
Příkazem glClear(GL_COLOR_BUFFER_BIT) vymažeme určité bufery na grafické kartě
(více v dalších pokračováních seriálu). Zde se vymaže pouze barvový bufer. Příkazem glColor3f(0.0f, 1.0f, 0.0f) specifikujeme barvu pro další vykreslování ve formátu RGB. V tomto
případě byla zvolena čistě zelená barva.
Příkaz glBegin(GL_TRIANGLES) zahájí vykreslování trojúhelníků, z nichž každý je
specifikován třemi vrcholy. Tyto vrcholy se zadávají příkazem glVertex2i(), kterému předáme 2D souřadnice vrcholu trojúhelníka. Ukončení zadávání vrcholů zajistí příkaz glEnd(),
který tvoří příkazové závorky spolu s glBegin(). Tyto příkazy tedy vždy musí tvořit pár. Posledním příkazem je glFlush(), který zajistí provedení všech operací na grafické kartě. Bez
uvedení tohoto příkazu by se mohlo stát, že některé objekty by nebyly zobrazeny.
15
Download

Základy 3D grafiky