You are on page 1of 182

JUH

ASZ IMRE
OpenGL
mobiDI

AK konyvtar
Juhasz Imre
OpenGL
mobiDI

AK konyvtar
SOROZATSZERKESZT

O
Fazekas Istvan
JUH

ASZ IMRE
egyetemi docens
Miskolci Egyetem
OpenGL
Egyetemi jegyzet
Elso kiadas
mobiDI

AK konyvtar
Debreceni Egyetem
Lektor
Bancsik Zsolt
Lajos Sandor
Miskolci Egyetem
Copyright c _ Juhasz Imre, 2003
Copyright c _ elektronikus kozles mobiDI

AK konyvtar, 2003
mobiDI

AK konyvtar
Debreceni Egyetem
Informatikai Intezet
4010 Debrecen, Pf. 12
Hungary
http://mobidiak.inf.unideb.hu/
A m u egyeni tanulm anyoz as celj ara szabadon letolthet o. Minden egyeb
felhasznalas csak a szerzo elozetes r asbeli engedelyevel tortenhet.
A m u ,,A mobiDI

AK onszervezo mobil portal (IKTA, OMFB-00373/2003))


es a ,,GNU Iterator, a leg ujabb generaci os portal szoftver
(ITEM, 50/2003) projektek kereteben kesz ult.
Tartalomjegyzek
Eloszo 1
1. Bevezetes 2
2. Rajzolas az OpenGL-ben 6
2.1. Ablak torlese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. A rajzolas befejezesenek kikenyszertese . . . . . . . . . . . . . . . . . . . . 7
3. Geometriai alapelemek rajzolasa 9
3.1. Geometriai alapelemek megadasa . . . . . . . . . . . . . . . . . . . . . . . 9
3.2. Geometriai alapelemek megjelentese . . . . . . . . . . . . . . . . . . . . . 11
3.3. A geometriai alapelemek megjeleneset befolyasolo tenyez ok . . . . . . . . . 16
3.3.1. Pont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3.2. Szakasz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3.3. Poligon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3.4. Poligonok elhagyasa . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3.5. Kitoltes mintaval . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.6. Poligon hatarol o eleinek megjelolese . . . . . . . . . . . . . . . . . . 21
4. Szn, arnyalas 24
4.1. Szn megadasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.

Arnyalasi modell megadasa . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5. Koordinata-rendszerek es transzformaci ok 32
5.1. Nezopont, nezesi irany kivalasztasa es modelltranszformaci ok . . . . . . . . 33
5.1.1. Modelltranszformaci ok megadas at segto parancsok . . . . . . . . . 33
5.1.2. Nez opont es nezesi irany beallt asa . . . . . . . . . . . . . . . . . . 34
5.2. Vettesi transzformaci ok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3. Kepmezo-transzform aci o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.4. A transzformaci os matrixok kezelese . . . . . . . . . . . . . . . . . . . . . . 39
6. Megvilagtas 41
6.1. Megvilagt asi modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2. Fenyforr as megadasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.1. A feny szne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.2. A fenyforr asok helye . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.3. Reektor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
I
TARTALOMJEGYZ

EK II
6.3. Anyagtulajdonsagok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.4. Az anyagtulajdonsagok valtoztatasa . . . . . . . . . . . . . . . . . . . . . . 48
6.5. A cs ucspontok sznenek meghataroz asa megvilagtas eseten . . . . . . . . . 49
6.6. Megvilagt as sznindex modban . . . . . . . . . . . . . . . . . . . . . . . . 49
7. Display-lista 53
7.1. Display-lista letrehozasa, vegrehajtasa . . . . . . . . . . . . . . . . . . . . 54
7.2. A display-lista tartalma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3. Hierarchikus diplay-list ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.4. Display-list ak es indexek kezelese . . . . . . . . . . . . . . . . . . . . . . . 55
7.5. Tobb lista vegrehajtasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8. Specialis optikai hatasok 58
8.1.

Atlatsz osag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2. Simtas (antialiasing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.2.1. Pont es szakasz simtasa . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2.2. Poligonok simt asa . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.3. Kod (atmoszferikus hatasok) . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9. Raszteres objektumok rajzolasa 67
9.1. Bitterkepek es karakterek . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
9.2. Kurrens raszterpozci o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
9.3. Bitterkep rajzolasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
9.4. Kepek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
9.4.1. Pixeladatok olvasasa, rasa es masolasa . . . . . . . . . . . . . . . . 69
9.4.2. Kepek kicsinytese, nagyt asa . . . . . . . . . . . . . . . . . . . . . 71
9.5. Pixelek tarol asa, transzformal asa, lekepezese . . . . . . . . . . . . . . . . . 71
9.6. A pixeladatok tarol asanak szabalyozasa . . . . . . . . . . . . . . . . . . . . 71
9.7. M uveletek pixelek mozgatasa soran . . . . . . . . . . . . . . . . . . . . . . 72
9.8. Transzformal as tabl azat segtsegevel . . . . . . . . . . . . . . . . . . . . . . 72
10.Puerek 74
10.1. Sznpuerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
10.2. Melysegpuer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.3. Stencilpuer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.4. Gy ujt opuer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
10.4.1. Teljes kep kisimt asa . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.4.2. Bemozdulasos eletlenseg (motion blur) . . . . . . . . . . . . . . . . 77
10.4.3. Melysegelesseg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.5. Puerek torlese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
10.6. Az rand o es olvasando puerek kivalaszt asa . . . . . . . . . . . . . . . . . 79
10.7. Puerek maszkolasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
11.A fragmentumokon vegrehajtott vizsgalatok es m uveletek 82
11.1. Kivag asi vizsgalat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
11.2. Alfa-vizsgalat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
11.3. Stencilvizsgalat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
TARTALOMJEGYZ

EK III
11.4. Melysegvizsg alat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
11.5. Sznkombinal as, dithering, logikai m uveletek . . . . . . . . . . . . . . . . . 87
11.5.1. Sznkombin al as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
11.5.2. Dithering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
11.5.3. Logikai m uveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.Kivalasztas, visszacsatolas 90
12.1. Kivalaszt as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
12.2. Visszacsatolas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
13.Text urak 94
13.1. A text uralekepezes engedelyezese . . . . . . . . . . . . . . . . . . . . . . . 95
13.2. Text ura megadasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
13.3. Text urahelyettesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
13.4. Text ur ak modost asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
13.5. Egydimenzios text urak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
13.6. Haromdimenzi os text ur ak . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
13.7. A text ur ak reszletessegenek szintje (mipmapping) . . . . . . . . . . . . . . 102
13.7.1. Automatikus letrehozas . . . . . . . . . . . . . . . . . . . . . . . . . 102
13.8. Sz ur ok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
13.9. Text uraobjektumok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
13.9.1. A text uraobjektumok elnevezese . . . . . . . . . . . . . . . . . . . . 105
13.9.2. Text uraobjektumok letrehoz asa, hasznalata . . . . . . . . . . . . . 105
13.9.3. Text uraobjektumok torlese . . . . . . . . . . . . . . . . . . . . . . . 106
13.9.4. Rezidens text urak munkacsoportja . . . . . . . . . . . . . . . . . . 106
13.9.5. Text uraobjektumok prioritasa . . . . . . . . . . . . . . . . . . . . . 107
13.10.Text uraf uggvenyek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
13.11.Text urakoordinat ak megadasa . . . . . . . . . . . . . . . . . . . . . . . . . 108
13.11.1.A megfelelo text urakoordinat ak kiszamolasa . . . . . . . . . . . . . 109
13.11.2.Text ur ak ismetlese . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
13.11.3.Text urakoordinatak automatikus letrehoz asa . . . . . . . . . . . . . 110
13.12.Text uramatrix-verem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
14.Gorbek es fel uletek rajzolasa 113
14.1. Bezier-g orbe megjelentese . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
14.2. Bezier-fel ulet megjelentese . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
14.3. Racionalis B-spline (NURBS) gorbek es fel uletek megjelentese . . . . . . . 118
14.3.1. NURBS gorbek rajzolasa . . . . . . . . . . . . . . . . . . . . . . . . 121
14.3.2. NURBS fel uletek megjelentese . . . . . . . . . . . . . . . . . . . . 122
14.3.3. Trimmelt fel uletek . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
14.3.4. Hibakezeles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
14.3.5. A NURBS objektumokat kozelt o adatok visszanyerese . . . . . . . 124
14.4. Gomb, k up es korgy ur u rajzolasa . . . . . . . . . . . . . . . . . . . . . . . 125
15.A gluj f uggvenykonyvtar 130
15.1. Gorbeket es fel uleteket megjelento f uggvenyek . . . . . . . . . . . . . . . . 130
15.1.1. Gorbek rajzolasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
15.1.2. Fel uletek szemleltetese . . . . . . . . . . . . . . . . . . . . . . . . . 133
15.2. Pontok, erintok, normalvektorok . . . . . . . . . . . . . . . . . . . . . . . . 139
16.Kepessegek engedelyezese, letiltasa es lekerdezese 144
17.

Allapotvaltoz ok ertekenek lekerdezese 148


Targymutat o 168
Irodalomjegyzek 173
IV
Eloszo
Ez a ler as a [3] es [6] konyvek, valamint a rendszer hasznalata soran szerzett tapasztalatok
alapjan kesz ult. Az utobbi tevekenyseg soran sz uletett az OpenGL gorbe- es fel uletrajzolo
szolgaltat asainak kiegesztesere a GLUJ f uggvenyk onyvt ar. Mivel ez sajat fejlesztes u, a
f uggvenykonyvtart es a kapcsolod o header fajlt mellekelt uk.
Tapasztalataink szerint egy grakus rendszer megismeresehez eloszor a kovetkez o
kerdesekre celszer u a valaszokat megkeresni:
1. Milyen alapelemekbol epthetj uk fel a kepeket?
2. Hogyan lehet megadni ezeket a kepelemeket?
3. Milyen transzformaci okon mennek at a kepelemek a megadasukt ol a megjelenes ukig?
4. Az alapelemek megjelenesenek milyen tulajdonsagai adhatok meg?
5. Milyen tovabbi szolgaltatasai vannak a rendszernek?
Ezeket a szempontokat es sorrendet ajanljuk az olvas onak is annak erdekeben, hogy a
rendszerrol atfog o kepet kapjanak. Az OpenGL nagyon sok tovabbi szolgaltatast ny ujt,
de ezek megertesehez es hasznalat ahoz az 1.-4. kerdesekre adott valaszok elker ulhetetle-
nek.
Vannak lerasok, amelyek arra vallalkoznak, hogy a minden eloismeret nelk uli
remenybeli felhasznal okat is bevezetik az OpenGL rejtelmeibe. Mi erre a feladatra nem
vallalkozunk. Ennek a lerasnak a megertesehez - egyebkent az OpenGL hasznalat ahoz is
- alapvet o szamt astechnikai es matematikai (foleg geometriai) ismeretekre van sz ukseg.
Ezt a ler ast azok forgathatjak legnagyobb haszonnal, akik az OpenGL-el kapcsolatos
eload asokat hallgatnak, illetve akik mar ismernek mas grakus rendszert (rendszereket).
A megismerest es megertest hivatottak szolgalni a mellekelt demonstracios pro-
gramok. Ezek a programok a GLUT ([11]), GLUI ([7]) es a GLUJ (15. feje-
zet) f uggvenykonyvtarakat hasznalj ak. A futtatasukhoz sz ukseges glut32.dll fajlt is
mellekelt uk.
1
1. fejezet
Bevezetes
A Silicon Graphics (SG) kifejlesztette a Graphics Library (GL) rendszert, ami az altaluk
gyartott munkaallom asok grakus lehetosegeinek minel hatekonyabb kihasznal asara ki-
alaktott koncepcio. A GL tobb programozasi nyelvb ol elerhet o f uggvenykonyvt arakon
kereszt ul. Az SG munka allomasok kozismert elonye a gyors es igenyes graka, amit hard-
ver oldalrol a grakus kartyaba eptett egy vagy tobb geometriai tarsprocesszor (SG ter-
minologi aval geometry engine) tamogat. Ez a koncepcio olyan sikeresnek bizonyult, hogy
vezeto hardver- es szoftvergy art o cegek tobbek kozott a DEC, IBM, Intel, Microsoft
es Silicon Graphics osszefog asaval letrehoztak egy munkacsoportot, amely ez alapjan
specikalta az OpenGL-t.
Az OpenGL teljesen hardverf uggetlen, fo celja az igenyes, terbeli objektumok
abr azolas ara is alkalmas (un. 3D-s), interaktv, sznes, raszteres grakat igenyl o al-
kalmazasok letrehoz as anak tamogatasa. Az OpenGL-t ugy terveztek, hogy hal ozati
kornyezetben is hatekonyan m ukodj on, meg akkor is, ha az alkalmazast futtato (kli-
ens) szamt ogep tpusa elter az eredmenyt megjelento (szerver) szamt ogep tpusat ol.
A legtobb munkaallom as kategori aj u szamtogep tamogatja az OpenGL-t, de a PC-
s vilagban hasznalt WIN95, WIN98, Windows NT, Windows 2000 es Windows XP
operacios rendszerek alatt az IBM PC (es vele kompatibilis) gepeken is futtathatunk
ilyen alkalmaz asokat. Termeszetesen a UNIX operaci os rendszernek a PC-ken hasznalatos
k ul onboz o valtozatai (pl. Linux) is tamogatj ak az OpenGL alkalmazasok futtatas at.
Az egyes grakus kartyak eltero kepesseg uek a beeptett geometriai tarsprocesszorok
(grakai gyorstok) tpusat ol es szam atol f ugg oen. Az OpenGL alkalmaz asok porta-
bilitasa erdekeben ezzel nem kell torodnie a programozonak, ugyanis az alkalmazas
eredmenyet megjelent o szerver gep megfelelo programja vizsgalja meg, hogy az adott
funkciot tamogatja-e a grakus kartya hardver szinten, es ennek megfeleloen hajtja vegre
azt. Ezt a felhasznal o csak a sebesseg alapjan erzekeli, ugyanis a hardver altal nem
tamogatott funkciokat szoftverrel kell megval ostani, ami termeszetesen idoigenyesebb.
Az OpenGL platformt ol es alkalmaz astol f uggetlen rendszer, a felhasznal as szeles
skal ajat tamogatja, a pixelm uveleteket igenyl o kepfeldolgoz astol a bonyolultabb fel ule-
tek igenyes megjelenteset (lathat osag, megvilagt as, text ura) is megkovetelo CAD alkal-
mazasokon at a gyors kepvalt asokra ep ulo valos idej u animacioig. A rendszer alkot oi a
tokeletes hardverf uggetlensegre torekedtek, ezert a tobb mint 100 parancs koz ott nincs
olyan, amely a felhasznaloi grakus adatbevitelt, vagy az ablakkezelest tamogatna. (Ez
az anyag nem tartalmazza az osszes OpenGL parancs ler asat.) Ezen funkci ok meg-
2
valost asara az OpenGL implement aciokhoz kapcsolodo kiegeszt o f uggvenyk onyvtarak
biztostanak lehetoseget. Szamos ilyen konyvt ar van, kozt uk olyan is, amely lehetove
teszi az alkalmaz asok forrasnyelvi szint u portabilitas at munkaallom asok es PC-k koz ott.
Ez egy rendkv ul fontos eredmenynek tekinthet o a sokszn u, hihetetlen ul gyorsan valtoz o
hardver-szoftver kornyezetet gyelembe veve. Az OpenGL is folyamatos fejlesztes alatt
all, jelen leras az 1.2 verziot ismerteti.
Nagyon fontos azt is tudnunk, hogy mit ne varjunk az OpenGL-tol. Mindenekelott: az
OpenGL nem geometriai modellezorendszer, tehat nincsenek benne osszetett geometriai
objektumok megadas ara, manipulalas ara alkalmas parancsok. Az OpenGL nem inter-
aktv rajzolo- vagy grakus rendszer. Az OpenGL azonban rendkv ul alkalmas a geo-
metriai modellezorendszerek, CAD rendszerek, grakus rendszerek, de meg az interaktv
jatekprogramok grakai igenyeinek kielegtesere is. Ennek koszonhet oen szeles korben el-
terjedt. Az OpenGL-t hasznalo alkalmazasok tobb geptpuson, gy minden munkaallom as
kategori aj u gepen es a nalunk legnepszer ubb PC-ken is futtathatok, meg a programok
forrasnyelvi szint u portabilitasa is megoldhato. Valoszn uleg az ori asi jatekprogram-
piacnak koszonhet oen egyre tobb grakus kartya hardverbol tamogatja az OpenGL-t,
ami jelent osen megnoveli a sebesseget.
Az OpenGL szintaxisa
Lerasunkban az OpenGL C nyelvi felhasznaloi fel uletet hasznaljuk. Az egyes paran-
csokat a megfelelo f uggveny hv asaval aktivizalhatjuk. A f uggvenyek neve mindig gl-el
kezdodik, amit a vegrehajtando funkcio angol megnevezese kovet. A megnevezesben az
egyes szavak nagybet uvel kezdodnek, pl. glPolylineMode().
A leras soran alkalmazott szintaxis
1.1. tabl azat. A parameterek lehetseges tpusai
rovidtes adattpus a megfelelo C
nyelvi tpus
az OpenGL-ben denialt tpus
b 8 bites egesz signed char GLbyte
s 16 bites egesz short GLshort
i 32 bites egesz long GLint, GLsizei
f 32 bites lebegopontos oat GLoat, GLcampf
d 64 bites lebegopontos double GLdouble, GLclampd
ub 8 bites egesz unsigned char GLubyte, GLboolean
us 16 bites egesz unsigned short GLushort
ui 32 bites egesz unsigned long GLuint, GLenum,GLbiteld
A kapcsos zar ojelek koz ott felsorolt lehetosegek koz ul pontosan egyet kotelezo
valasztani, a szogletes zar ojelek [ ] koz ott felsoroltakbol pedig legfeljebb egyet lehet.
Ilyen helyzettel a f uggvenyek nevenek vegen talalkozunk, ahol is a funkci ot lero sza-
vak utan szam es bet u szerepelhet, melyek arra utalnak, hogy hany darab, milyen tpus u
vagy milyen modon adhato meg a f uggveny parametere, ugyanis egy-egy adategy uttest
tobbfelekeppen is megadhatunk. Peldaul
glVertex 234sifd[v]();
ami azt jelenti, hogy a cs ucspontot megadhatjuk 2,3 vagy 4 koordinat ajaval, ezek
3
tpusa lehet short, integer, oat vagy double; tov abba felsorolhatjuk a koordinat akat
egyenkent, vagy atadhatjuk a koordinat akat tartalmazo vektor cmet is. Teh at a
glVertex3f(1.,2.,3.);
es a
float p[] = 1.,2.,3.;
glVertex3fv(p);
programreszletek ugyanazt eredmenyezik.
Ha a leras soran pusztan a f uggveny nevere akarunk hivatkozni, es a parameterek
megadas anak modja a targyalt problema megoldasa szempontjab ol lenyegtelen, akkor a *
karakterrel helyettestj uk a megadasi modot ler o karaktereket. A glVertex*(); peld aul
az osszes lehetseges megadasi modot jeloli. A parameterek lehetseges tpusainak listajat
az 1.1. tablazat tartalmazza.
Az OpenGL-ben denialt konstansok neve GL-el kezd odik es a nevben szereplo szavak
nagybet uvel randok. Ha a megnevezes tobb szobol all, akkor a szavakat az alah uzas
karakterrel valasztjuk el, pl. GL TRIANGLE STRIP.

Allapotvaltoz ok
A rendszerben szamos globalis parameter, ugynevezett allapot- vagy globalis valtoz o
van, melyek kurrens erteke szerint hajtja vegre a rendszer a parancsokat. Ilyen pl. az
objektumok szne, ami azt eredmenyezi, hogy nem kell minden egyes rajzolasi parancs
elott a rajzolas sznet is bealltanunk, hanem a rendszer az allapotvaltoz oban tarolt erteket
hasznalja. Ez csokkenti a felhasznal oi program meretet, es noveli a program vegrehajtasi
sebesseget.
Tobb allapotvaltoz o valamilyen modra, lehetosegre utal. Ezeket a glEnable()
paranccsal lehet engedelyezni es a glDisable() paranccsal le lehet tiltani. Minden
allapotvaltoz onak van alapertelmezese, tov abba kurrens ertek uk mindig lekerdezheto a
lekerdezend o adat tpus atol f ugg oen a glGet*() f uggvenyek valamelyikevel. A glGet*()
f uggveny reszletes ler asa es az allapotvaltoz ok teljes listaja a 17. fejezetben talalhato.
A kurrens allapotvaltozok a glPushAttrib() paranccsal tarolhat ok az att-
rib utumveremben (stackben), majd a glPopAttrib() paranccsal ujra betolthet ok onnan.
Az attrib utumverem hasznalata sokkal hatekonyabb, mint egy sajat tarolasi rendszer ki-
alakt asa.
Az OpenGL nagyon hatekony, de csak egyszer u rajzolasi es azt segto parancsokat tar-
talmaz, ezert osszetett alakzatok abr azol asara, specialis grakai problem ak megoldas ara
sajat f uggvenyeket kell rnunk. Mindenkeppen sz ukseg unk van olyan f uggvenykonyvt arra,
amely az ablakkezelest, es a grakus adatbevitelt lehetove teszi. Ilyen cel u paran-
csok ugyanis nincsenek az OpenGL-ben, mivel ezek megvalostasa nagymertekben hard-
verf ugg o.
Minden OpenGL implementaci o reszet kepezi a GLU (OpenGL Utility) konyvtar,
mely a ternek skra valo lekepezeseben, valamint gorbek es fel uletek abrazol asaban ny ujt
segtseget. A masik, minden utt megtalalhato konyvt ar a GLX (az OpenGL kiterjesztese
az X Window rendszerre), mely az ablakkezelest es a grakus adatbevitelt teszi lehetove.
Annak ellenere, hogy a GLX minden OpenGL implementaci onak resze, a GLX helyett mi
a hasonlo cel u GLUT (OpenGL Utility Toolkit) f uggvenyk onyvt art preferaljuk, mivel ez
egy szabadon hasznalhat o szoftver ([11]), melynek meg a forrask odja is rendelkezesre all.
A GLUT hasznalata eseten programunk forrasnyelvi szinten portabilis lesz a k ul onboz o
platformok, pl. a UNIX es WINDOWS operacios rendszerek koz ott.
4
Ugyanez erheto el a Qt rendszerrel is ([10]), ennek egyetlen hatr anya, hogy nem szaba-
don hasznalhato.
5
2. fejezet
Rajzolas az OpenGL-ben
Az OpenGL-ben harom rajzolasi alapm uvelet van:
ablak torlese;
geometriai objektum rajzolasa;
raszteres objektum rajzolasa.
Ebben a fejezetben csak az ablak torlesevel foglalkozunk, a geometriai alapelemek
rajzolasaval a 3. fejezetben, a raszteres objektumok rajzolasaval pedig a 9. fejezetben.
Ketfele rajzolasi mod van: a kozvetlen (azonnali) rajzolasi mod (immediate mode), ez
az alapertelmezes; es lehetoseg van a rajzolasi parancsoknak display-listan valo tarol asara
a kesobbi, hatekony felhasznal as erdekeben.
2.1. Ablak torlese
Az ablak torlese az ablakot kepvisel o teglalapnak a hattersznnel val o kitolteset jelenti,
szovegszerkeszt o eseten pl. a papr sznet jelent o feher, vagy a szemet kevesbe irritalo
halvanysz urke a szokasos hatterszn.
Az ablak torlesehez a glClearColor() paranccsal allthatjuk be a hatter sznet, magat
a torlest pedig a glClear(GL COLOR BUFFER BIT) paranccsal hajthatjuk vegre. A
hattersznt egy allapotvaltoz oban tarolja a rendszer, vagyis nem kell minden torles elott
megadnunk.
void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
A torlesi szn kurrens erteket alltja be RGBA sznmegad asi mod eseten. A
sznmegad asi mod kivalaszt asa hardverf ugg o, ezert erre nincs OpenGL parancs. Erre a
GLX vagy GLUT konyvt arban talalunk f uggvenyt. A parametereket a rendszer a [0., 1.]
intervallumra levagja. A torlesi szn alapertelmezese (0., 0., 0., 0.), ami teljesen atlatsz o,
fekete hattersznt eredmenyez.
void glClearIndex (GLoat c);
A torlesi sznindex kurrens erteket alltja be sznindex-m od eseten.
6
Az OpenGL-ben a glClear() paranccsal lehet a puereket torolni.
void glClear (GLbiteld mask);
Torli a megadott puert (puereket) a megfelelo allapotvaltozo kurrens erteke szerint.
Tobb puer egyidej u torlese eseten a puerek azonostoj at a bitenkenti VAGY m uvelettel
(C nyelvben a [ operatorral) kell osszekapcsolni. A torolhet o puerek teljes listaja a 2.1.
tabl azatban talalhato.
2.1. tablazat. Az OpenGL puerei
puer azonost oja az OpenGL-ben
sznpuer GL COLOR BUFFER BIT
melysegpuer GL DEPTH BUFFER BIT
gy ujt opuer GL ACCUM BUFFER BIT
stencilpuer GL STENCIL BUFFER BIT
A torles idoigenyes feladat, mivel az ablak minden pixelere (ezek szama a milliot is
meghaladhatja) el kell vegezni a megfelelo m uveletet. Szamos grakus hardver eseten
hatekonyabb a puerek egyidej u torlese, mint az egyenkenti torles, es biztos, hogy az
egyidej u torles egyetlen hardver eseten sem lasstja a folyamatot.
2.2. A rajzolas befejezesenek kikenyszertese
A rajzolasi parancs kiadas atol az objektum megjeleneseig sok minden tortenik (transz-
formaci ok, vag as, sznezes, arnyalas, text uralekepezes) ezt megjelentesi lancnak (graphics
pipeline) nevezz uk. Ezeket a m uveleteket altalaban mas-mas, az adott celra kifejlesztett
specialis hardver hajtja vegre, es ilyenkor a CPU csak elk uldi a parancsot es nem var a
kovetkez o parancs kiadas aig arra, hogy az eloz o vegigmenjen a m uveleti soron. Halozati
kornyezetben, ha a kliens es a szerver k ulonboz o gepeken van, akkor az adatatvitel csoma-
gokban tortenik. Az adatatvitel hatekonys aga erdekeben a rendszer csak akkor k uldi el a
csomagot, ha az a szam ara fenntartott puer mar megtelt. Adott esetben hossz u ideig
varhatunk arra, hogy megteljen a csomag. A csomagok elk uldeset a glFlush() paranccsal
kenyszerthetj uk ki.
void glFlush (void);
Kikenyszerti a korabban kiadott OpenGL parancsok vegrehajtas anak megkezdeset,
es garant alja, hogy a vegrehajtas veges idon bel ul befejezodik.
Az animaciokor hasznalt puer-cserel o parancs (swap buer) automatikusan kiadja a
glFlush() parancsot.
Van olyan eset, amikor nem eleg pusztan kikenyszerteni a grakus parancsok
vegrehajtas anak megkezdeset, hanem arrol is meg kell gyozodni, hogy a grakus hard-
ver ezeket az utast asokat vegre is hajtotta, vagyis a vegrehajtas nyugt azas at varjuk (pl.
7
biztosak akarunk lenni abban, hogy a kep megjelent a keperny on, mielott felhasznal oi
interakciot engedelyeznenk). Ennek megoldas ara szolgal a glFinish() parancs.
void glFinish (void);
Kikenyszerti a korabban kiadott OpenGL parancsok vegrehajtasat, es nem adja vissza
a vezerlest a korabban kiadott parancsok teljes vegrehajtasanak befejezeseig.
Ezen parancs t ul gyakori hasznalata a grakus teljestmeny (rajzolasi sebesseg) jelentos
csokkeneset eredmenyezheti.
8
3. fejezet
Geometriai alapelemek rajzolasa
Ebben a fejezetben azt rjuk le, hogy az OpenGL-ben egy-egy osszetett geometriai alak-
zatot milyen egyszer u eptok ovekb ol - geometriai alapelemekbol - allthatunk elo. Szo lesz
meg ezen alapelemek megjeleneset meghatarozo tulajdonsagok megadas ar ol is.
3.1. Geometriai alapelemek megadasa
A geometriai alapelemeket cs ucspontok segtsegevel lehet lerni. A cs ucspontokat 2, 3 vagy
4 koordinataval lehet megadni, azaz megadhatjuk skbeli (x, y), terbeli (x, y, z) dereksz og u
Descartesfele koordinatakkal, vagy terbeli (x, y, z, w) homogen koordinat akkal. Az
OpenGL a haromdimenzi os projektv ter homogen koordinataival vegez minden belso
szamtast, ezert a megadott koordinatakat minden esetben terbeli projektv koordinat akka
egeszti ki az alabbiak szerint: (x, y) (x, y, 0., 1.) ; (x, y, z) (x, y, z, 1.).
Ne feledj uk, hogy amennyiben (x, y, z, w) homogen koordinat akkal adunk meg egy
pontot, w ,= 0 eseten (x/w, y/w, z/w) alakban allthatjuk elo a pont Descartesfele koor-
dinat ait! K ul onosen ugyelj unk erre a NURBS gorbek es fel uletek megadas anal (lasd a 14.
fejezetet)!
Cs ucspontokat a glVertex*() paranccsal adhatunk meg.
void glVertex234sifd (TYPE coords);
void glVertex234sifdv (const TYPE *coords);
Geometriai objektumok leras ahoz sz ukseges cs ucspont megadasara szolgal.
Valaszt astol f ugg oen megadhatjuk 2, 3 vagy 4 koordinataval, melyek tpusa short, in-
teger, oat vagy double lehet; tovabb a felsorolhatjuk a koordinatakat egyenkent, vagy
atadhatjuk a koordinat akat tartalmazo vektor cmet (a masodik forma). Ha a z koor-
dinat at nem adjuk meg, akkor annak erteke automatikusan 0. lesz, a meg nem adott w
erteke pedig 1. Ezt a parancsot csak akkor hajtja vegre a rendszer, ha a glBegin() es
glEnd() parancspar koz ott adtuk ki. A TYPE jeloles azt jelenti, hogy a kivalasztott
tpus u (eset unkben s, i, f vagy d) valtoz okat, konstansokat vagy cmet kell megadni.
A vektor hasznalata altal aban hatekonyabb, ugyanis gyorstja a parameterek atad as at.
A masik fontos denialo adat a normalvektor, vagy roviden normalis. A
normalvektorokra kitolt ott poligonok igenyes szemleltetese soran az arnyal asi, meg-
vilagtasi szamtasokn al van sz ukseg. Egy fel ulet valamely pontj aban vett normalis an azt
9
a vektort ertj uk, mely az adott pontban meroleges a fel uletre, azaz a fel ulet erint oskj ara.
Az s (u, v) parameteres formaban adott fel ulet (u
0
, v
0
) pontj aban vett normalisa a

u
s (u
0
, v
0
)

v
s (u
0
, v
0
)
vektor, az F (x, y, z) = 0 implicit formaban adotte pedig a
_

x
F,

y
F,

z
F
_
.
A fel uletek legelterjedtebb abr azolasi modja, hogy a fel uletet poligonokkal, tobb-
nyire haromsz ogekkel kozeltj uk, es a kozelto poligonokat jelentj uk meg valamilyen meg-
vilagtasi rendszer gyelembe vetelevel. Annak erdekeben, hogy a kepen kozelto polieder
elei ne latszanak, a cs ucsponthoz a pontban talalkoz o lapok normalisainak az atlag at
rendelj uk normaliskent. A normalisok iranytas anak konzisztensnek kell lenni, altalaban
a zart fel uletb ol kifele mutatnak. Az OpenGL-ben csak iranythato fel uletek kezelhet ok.
Ezeknek a fel uleteknek ket oldala k ul onboztethet o meg. A normalisok iranyt asat ezeknek
megfeleloen kell erteni, azaz a normalisok a fel uletnek ugyanazon oldalan legyenek. Nylt
fel ulet eseten a kifele es befele jelzoknek nincs sok ertelme, csak az egyseges targyal asmod
erdekeben hasznaljuk.
A rendszer minden ujonnan letrehozott cs ucsponthoz a kurrens (az utoljara megadott)
normalist rendeli hozza. Az OpenGL-ben minden cs ucsponthoz legfeljebb egy normalist
rendelhet unk, es tobb cs ucsponthoz is hozzarendelhetj uk ugyanazt a normalist. A kurrens
normalist a glNormal*() paranccsal adhatjuk meg.
void glNormal3bsifd (TYPE nx, TYPE ny, TYPE nz );
void glNormal3bsifdv (const TYPE *v);
A kurrens normalvektort alltja be a parameterekkel megadott ertekre. A b, s, i
valtozat eseten a rendszer a parametereket linearisan lekepezi a [1., 1.] intervallumra.
A normalisoknak csak az iranyara es iranyt asara van sz ukseg, a hosszuk koz omb os. A
megvilagtasi szamtasok soran azonban a rendszer azt feltetelezi, hogy a normalvektorok
hossza egysegnyi (ezek segtsegevel szamtja a szogeket), ezert celszer u egysegnyi
hossz us ag u ( un. normalizalt) normalvektorokat megadni. Mint latni fogjuk, (lasd az 5.
fejezetet) a geometriai alapelemek, vagyis az oket meghataroz o cs ucspontok es normalisok
k ul onboz o modelltranszformaciokon mennek at. Amennyiben a transzformaci ok valame-
lyike nem egybevag osag (pl. skal azas), a normalvektorok hossza megvaltozhat. Ezert ab-
ban az esetben, ha nem egysegnyi normalvektorokat adunk meg, vagy nem egybevagos agi
modelltranszformacionak vetj uk ala alakzatunkat, engedelyezn unk kell, hogy az OpenGL
automatikusan normalizalja a normalisokat. Ezt a glEnable(GL NORMALIZE) paran-
ccsal tehetj uk meg. Ha egysegnyi hossz us ag u normalisokat adunk meg, es a modellt csak
hasonlos agi transzformaci onak (x, y es z iranyban azonos mertek u skal azasnak) vetj uk
ala, akkor a glEnable(GL RESCALE NORMAL) paranccsal celszer u engedelyen unk
a normalisok ujrask al azas at, vagyis azt, hogy a rendszer a nezopont-modell transz-
formaci obol kiszamtott konstanssal megszorozza a normalisok transzformaltj at, hogy
azok ujra egysegnyi hossz uak legyenek. A rendszer alapertelmezeskent nem engedelyezi
10
sem az automatikus normalizal ast sem az ujrask alaz ast. Elkepzelheto, hogy nemely
OpenGL implementaci oban az automatikus normalizal as csokkenti a hatekonys agot, az
ujraskal azas viszont altal aban hatekonyabb, mint az altal anos normalizal as.
3.2. Geometriai alapelemek megjelentese
Az OpenGL-ben a cs ucspontok segtsegevel pont, szakasz es poligon geometriai alap-
elemek rajzolhatok. A teglalap, mint gyakran elofordul o alakzat, rajzolas ara k ulon
f uggvenyt hoztak letre, mellyel az (x, y) koordinataskban atloinak vegpontjaival adott,
koordinatatengelyekkel parhuzamos oldal u teglalap rajzolhato. Ez az egyetlen kivetel,
amikor geometriai alapelemet nem cs ucspontjaival (nem a glVertex*() paranccsal) ad-
hatunk meg.
void glRectsifd (TYPE x1, TYPE y1, TYPE x2, TYPE y2);
void glRectsifdv (TYPE *v1, TYPE *v2);
Az (x, y) koordinataskon az x es y tengelyekkel parhuzamos oldal u teglalapot rajzol,
mely egyik atl ojanak vegpontjai (x1,y1) es (x2,y2), illetve vektoros megadas eseten a v1
es v2 vektorok tartalmazzak a vegpontok koordinatait.
A pont es az egyenes szakasz alapelemek a geometriaban megszokottakat jelentik, azzal
a k ul onbseggel, hogy a megrajzolas soran termeszetesen mindkett onek van kiterjedese,
illetve vastags aga, amit beallthatunk. A szamtogepi grakaban a gorbeket tobbnyire
egyenes szakaszokkal kozeltj uk, azaz a gorbebe rt torottvonallal.
Az OpenGL poligonon zart torottvonal altal hatarolt ter uletet ert, amit tobbnyire a
ter ulet kifestesevel jelent meg, bar mas lehetosegek is vannak. Az OpenGL csak kon-
vex skbeli poligonokat tud helyesen megjelenteni, vagyis konk av, nem egyszeresen oss-
zef ugg o, vagy nem egyszer u poligonok megrajzolas aval gondok lehetnek meg akkor is, ha
azok skbeliek.
Egy sktartomany egyszeresen osszef ugg o, ha a benne fekvo barmely zart skg orbe egy
pontra h uzhat o ossze ugy, hogy kozben mindig a tartomanyban marad. Szemleletesen
azt mondhatjuk, hogy az egyszeresen osszef ugg o sktartomanyban nem lehetnek lyukak.
A 3.1. abran nem egyszeresen osszef ugg o alakzatot lathatunk.
Egy sokszoget egyszer unek nevez unk, ha valamennyi cs ucsa k ul onboz o, egyik cs ucs
sem belso pontja a sokszog valamely oldalanak, es az oldalak nem metszik egymast belso
pontban. A 3.2. abr an peld akat lathatunk nem egyszer u sokszogekre.
Ezekre a megszort asokra celszer u odagyelni, ugyanis barmilyen poligont megadha-
tunk cs ucspontjaik felsorolasaval, a rendszer nem vegez ervenyessegi vizsgalatokat, ezert
csak a nem vart eredmeny gyelmeztet benn unket arra, hogy a megadott poligont nem
tudja kezelni a rendszer. Ilyen nem vart eredmeny lehet egy konk av poligon eseten a
poligon konvex burkanak megjelenese.
Ponthalmaz konvex burkan a halmazt tartalmazo konvex ponthalmazok metszetet
ertj uk. Skbeli veges ponthalmaz konvex burka konvex poligon altal hatarolt sktartomany.
Ezt illusztralja a 3.3. abra.
Nagyon fontos megszort as, hogy csak skbeli (nem csak koordinataskbeli) poligont
tud a rendszer helyesen megjelenteni. Mar egy nem skbeli egyszer u negysz og eseten
11
3.1. abra. Poligonok altal hatarolt nem egyszeresen osszef ugg o sktartom any
3.2. abra. Nem egyszer u sokszogek
is elofordulhat, hogy a k ulonb oz o transzformaciok kovetkezteben a negyszog kepe nem
egyszer u negysz og lesz, pl. a szemkozti oldalak metszik egymast. A 3.4. abran ilyen
csokornyakkend o szer u alakzatot latunk eleivel abr azolva, illetve kitoltve. Az utobbin
jol erzekelheto a problema. Ez skbeli konvex, egyszeresen osszef uggo poligonnal nem
fordulhat elo. Ezert abban az esetben, ha gorb ult fel uleteket kozelt unk poligonokkal,
celszer u haromszogeket alkalmaznunk.
Az OpenGL-ben a geometriai alapelemeket a glBegin() es glEnd() parancsok koz ott
felsorolt cs ucspontokkal hozhatunk letre. A glBegin() parameterevel azt adjuk meg, hogy
a felsorolt cs ucspontokat milyen geometriai alapelemkent kell ertelmezni.
void glBegin (GLenum mode);
A mode tpus u geometriai alapelemet ler o cs ucspontok listaj anak kezdetet jeloli. A
mode parameter lehetseges ertekeit a 3.1. tabl azat tartalmazza.
void glEnd ();
Geometriai alapelemeket ler o cs ucspontok listajanak veget jeloli.
12
3.3. abra. Konvex burok
3.4. abra. Nem komplan aris cs ucspont u negysz og vet uletei; a bal oldali abr an az eleivel,
a jobb oldalin mindket oldalat kifestve abr azolva
Az alabbiakban a glBegin() parameterenek reszletes ler asa kovetkezik. A ler as soran
azt feltetelezz uk, hogy n cs ucspont adott, es ezekre a v
0
, v
1
, . . . , v
n1
jelolessel hivatko-
zunk. A geometriai alapelemeket szemlelteti a 3.5. abra.
GL POINTS A cs ucspontokba pontot rajzol.
GL LINES A v
0
, v
1
; v
2
, v
3
; . . . cs ucspontokat, vagyis az egymast kovet o paros es
paratlan index u cs ucspontokat, szakasszal koti ossze. Ha n paratlan, akkor az utolso
pontot gyelmen kv ul hagyja.
GL LINE STRIP A cs ucspontokat megadasuk sorrendjeben egyenes szakaszokkal koti
ossze a rendszer, azaz egy n 1 oldal u torottvonalat rajzol. n < 2 eseten nem tortenik
semmi.
GL LINE LOOP A cs ucspontokat megadasuk sorrendjeben egyenes szakaszokkal koti
ossze a rendszer, majd a vegpontot osszekoti a kezd oponttal, vagyis a v
n1
, v
0
szakaszt
is megrajzolja. Ez utobbi az egyetlen elteres a GL LINE STRIP opcio hatasat ol. Tehat
egy n oldal u zart torottvonalat rajzol, n < 2 eseten nem tortenik semmi.
GL POLYGON A cs ucspontok altal meghatarozott poligont rajzolja meg. n < 3
eseten nem rajzol semmit. Ha a poligon nem egyszer u vagy nem konvex, az eredmeny
meghatarozatlan.
GL TRIANGLES Egymashoz nem kapcsolod o haromsz ogeket rajzol a
v
0
, v
1
, v
2
; v
3
, v
4
, v
5
; . . . cs ucspontok alapjan. Ha n nem harom tobbsz orose, akkor
a fennmarado egy, vagy ket cs ucspontot gyelmen kv ul hagyja a rendszer.
13
3.5. abra. Az OpenGL geometriai kepelemei
14
3.1. tablazat. Az OpenGL geometriai alapelemei
ertek jelentese
GL POINTS egyedi pontok
GL LINES az egymast kovet o cs ucspontp arokat egyedi sza-
kaszkent ertelmezi a rendszer
GL POLYGON egyszer u, konvex poligon hatara
GL TRIANGLES az egymast kovet o cs ucsponth armasokat
haromsz ogkent ertelmezi a rendszer
GL QUADS az egymast kovet o cs ucspontnegyeseket
negysz ogkent ertelmezi a rendszer
GL LINE STRIP tor ottvonal
GL LINE LOOP zart torottvonal, azaz az utolso cs ucspontot az
elsovel osszek oti
GL TRIANGLE STRIP egymashoz kapcsolodo haromsz ogekb ol allo szalag
GL TRIANGLE FAN legyezoszer uen egymashoz kapcsolodo
haromsz ogek
GL QUAD STRIP egymashoz kapcsolod o negysz ogekbol allo szalag
GL TRIANGLE STRIP Egymashoz kapcsolod o haromszogeket (haromsz ogekbol all o
szalagot) rajzol a rendszer a v
0
, v
1
, v
2
; v
2
, v
1
, v
3
; v
2
, v
3
, v
4
; . . . (lasd a 3.5. abrat)
cs ucspontok felhasznal as aval. A cs ucspontok sorrendje biztostja, hogy a haromsz ogek
iranytasa megegyezo legyen, vagyis az gy letrehozott szalag egy fel uletdarab korrekt
ler asat adja. Ha n < 3 nem rajzol semmit.
GL QUADS Egymashoz nem kapcsolodo negyszogeket rajzol a rendszer a
v
0
, v
1
, v
2
, v
3
; v
4
, v
5
, v
6
, v
7
; . . . cs ucspontok alapjan. Ha n nem tobbsz orose negynek, akkor
a fennmarado cs ucspontokat gyelmen kv ul hagyja a rendszer.
GL QUAD STRIP Egymashoz kapcsolod o negyszogeket (negyszogekb ol allo szalagot)
rajzol a rendszer a v
0
, v
1
, v
3
, v
2
; v
2
, v
3
, v
5
, v
4
; . . . (lasd a 3.5. abr at) cs ucspontok fel-
hasznal asaval. A cs ucspontok sorrendje biztostja, hogy a negysz ogek iranytasa meg-
egyezo legyen, vagyis az gy letrehozott szalag egy fel uletdarab korrekt leras at adja. Ha
n < 4 nem rajzol semmit, ha pedig n paratlan, akkor az utolso pontot gyelmen kv ul
hagyja.
GL TRIANGLE FAN A GL TRIANGLE STRIP opciohoz hasonlo, az egyetlen elteres
a cs ucspontok gyelembe vetelenek sorrendjeben van, most a v
0
, v
1
, v
2
; v
0
, v
2
, v
3
; . . . (lasd
a 3.5. abrat) a sorrend.
A glBegin() es glEnd() zarojelp ar koz ott a cs ucspontok megadas an kv ul mas
OpenGL parancsok is kiadhatok, mint pl. szn, normalis vagy text ura megadasa. A
kiadhato parancsok teljes listaj at a 3.2. tablazat tartalmazza.
Ezeken kv ul barmely mas OpenGL parancs kiadasa hibat eredmenyez. Ez a megs-
zort as csak az OpenGL parancsokra vonatkozik, nem koti meg a kez unket a programozasi
nyelv vezerlesi szerkezeteinek, utast asainak tekinteteben, vagyis tetszoleges vezerlesi szer-
kezetek (ciklusok, felteteles kifejezesek) vagy f uggvenyhv asok szerepelhetnek, felteve,
hogy a hvott f uggvenyek is csak megengedett OpenGL parancsokat tartalmaznak.
15
3.2. tablazat. A glBegin() es glEnd() koz ott kiadhato OpenGL parancsok
parancs hatasa
glVertex*() cs ucspont-koordinatak megadasa
glColor*() a kurrens szn megadasa
glIndex*() a kurrens sznindex megadasa
glNormal*() normalvektor-koordinat ak megadasa
glEvalCoord*() koordinat ak letrehoz asa
glCallList(), glCallLists() display-lista(ak) vegrehajtasa
glTexCoord*() text ura-koordinatak megadasa
glEdgeFlag*() a hatarolo elek megjelolese
glMaterial*() anyagtulajdonsag megadasa
A glVertex*() parancsnak csak akkor van hatasa, ha glBegin(), glEnd() zarojelp ar
koz ott jelenik meg. Ez vonatkozik a display-list an tarolt glVertex*() parancsokra is,
tehat akkor lehet barmilyen hatasuk, ha a listat egy glBegin(), glEnd() zar ojelp ar koz ott
hajtjuk vegre.
A glVertex*() parancs meghvas aval letrehozott cs ucsponthoz a rendszer hozzarendeli
a cs ucsponthoz kapcsolt attrib utumok kurrens erteket, gy a kurrens sznt, normalist es
text urakoordinatat.
3.3. A geometriai alapelemek megjeleneset be-
folyasolo tenyez ok
Ha maskent nem rendelkez unk, akkor a pont kepe egyetlen pixel lesz a keperny on, a
szakasz egy folytonos, egy pixel szelesseg u pixelsor, a poligon pedig kitolt ott (kifestett)
lesz. A geometriai alapelemek megjelenesenek modja termeszetesen befolyasolhato a fel-
hasznal o altal.
3.3.1. Pont
void glPointSize (GLoat size);
Ezzel a paranccsal a pontot reprezental o pixeltomb meretet lehet megadni a size pa-
rameterrel. A megadott meretnek 0.-nal nagyobbnak kell lennie, az alapertelmezes 1.
Ha az antialiasing (kisimt as) nem engedelyezett ami az alapertelmezes , a rend-
szer a megadott oat erteket egeszre kerekti es ennek megfelelo (size x size) meret u
pixeltombbel abr azolja a pontot. Ha az antialiasing engedelyezett, a rendszer nem ke-
rekti a megadott erteket, es egy size atmeroj u kor alak u pixelcsoporttal szemlelteti a
pontot. Ezt szemlelteti a 3.6. abra.
A GL POINT SIZE RANGE parameterrel kiadott glGetFloatv() paranccsal
lekerdezhetj uk, hogy az OpenGL altalunk hasznalt implement acioj aban mekkora lehet
16
3.6. abra. Pontok szemleltetese; a bal oldali kepen a simt as nem engedelyezett, a jobb
oldali engedelyezett
a pont maximalis merete. A pont szne a pont helyet meghataroz o glVertex*() parancs
kiadasakor ervenyben lev o szn lesz.
3.3.2. Szakasz
Szakasz eseten lehetoseg unk van a szakasz sznenek, vonalvastagsag anak es vonaltpusanak
eloras ara. A szakasz sznet ket tenyezo befolyasolja: az ervenyben levo arnyalasi modell
es a szakasz vegpontjainak megadasakor kurrens szn. Ezt bovebben a szn megadasaval
foglalkozo 4. fejezet tartalmazza.
A vonalvastagsag megadasa
void glLineWidth (GLoat width);
A vonal vastags ag anak pixelekben mert erteket alltja be, width 0., alapertelmezes 1.
A tenyleges vonalvastagsag f ugg meg attol is, hogy az antialiasing engedelyezett vagy sem.
Ha az antialiasing nem engedelyezett, akkor a rendszer a width erteket egeszre kerekti,
vagyis a vastags ag 1, 2, . . . pixel lehet. Ilyen esetben a keperny on a vonalvastags agot azon-
ban nem a szakaszra merolegesen merj uk, hanem az x, illetve y tengelyek irany aban, attol
f ugg oen, hogy az egyenes iranytangense (az x tengellyel bezart szogenek tangense) 1-nel
nagyobb vagy kisebb. Ha az alakzatok hatar anak kisimt asa (antialiasing) engedelyezett,
a rendszer nem kerekti a vonalvastagsagot, hanem kitolt ott teglalapkent jelenti meg a
szakaszt. A GL LINE WIDTH RANGE parameterrel kiadott glGetFloatv() paranccsal
lekerdezhetj uk az OpenGL implement acionkban hasznalhato maximalis vonalvastags agot.
Ne feledj uk, hogy az altalunk latott szakasz tenyleges vastags aga a keperny o pixelenek
zikai meretetol is f ugg! Meg nagyobb lehet az elteres, ha ugyanazt a vonalvastags agot
(pl. 1 pixel) hasznaljuk grakus display-n es nagyfelbontas u tintasugaras plotteren vagy
17
lezernyomtaton. Az utobbiakon az 1 pixelnek megfelelo 1 dot szelesseg u szakasz alig lesz
lathat o.
A vonaltpus megadasa
A vonaltpus valtoztat as ahoz elobb engedelyezn unk kell a vonaltpus valtoztatast (a vonal
mintaz asat) a glEnable(GL LINE STIPPLE) paranccsal, majd a glLineStipple*() pa-
ranccsal meg kell adni a vonaltpus mintaj at, amit a rendszer egy allapotvaltoz oban tarol.
A vonaltpus valtoztat as at a glDisable(GL LINE STIPPLE) paranccsal tilthatjuk le,
ennek kiadasa utan a vonaltpus az alapertelmezes, azaz folytonos lesz.
void glLineStipple (GLint factor,GLushort pattern);
A vonaltpus mintaj anak megadasara szolgal. A pattern parameterrel azt a mint at
rhatjuk le 16 biten, amit a rendszer ismetel a szakaszok rajzolasakor. A mint aval pixelsort
runk le, 1 a rajzolnak, 0 a nem rajzolnak felel meg. A factor parameterrel a minta
nagyt asat (az intervallumok ny ujt as at) rhatjuk elo. A factor erteket a rendszer az [1, 255]
intervallumra levagja.
3.7. abra. A vonalminta ismetlese
Ha egymashoz kapcsolodo szakaszokat, azaz torottvonalat (GL LINE STRIP,
GL LINE LOOP) rajzolunk, akkor a cs ucspontokn al a mar megkezdett mintaelem fo-
lytatodik, mg egyedi szakaszok rajzolasan al (GL LINES) minden cs ucspontn al az elso
mintaelemmel kezdodik a rajzolas (lasd a 3.7. abr at).
3.3.3. Poligon
A poligon alapelem megjelenhet egy kitolt ott skidomkent, a hatar at reprezent alo zart
tor ottvonalkent vagy a cs ucspontjait jelol o pontsorozatkent is. A rendszer minden poli-
gonnak megk ul onboztet el ulso es hats o oldalat. A k ulonboz o oldalak k ul onboz o modon
jelenthet ok meg. Alaphelyzetben a rendszer mindket oldalt azonos modon jelenti meg.
A fenti parametereket a glPolygonMode() paranccsal allthatjuk be.
18
void glPolygonMode (GLenum face, GLenum mode);
A poligonok el uls o es hats o oldalanak megjelentesi modj at alltja be. A face parameter
erteke GL FRONT AND BACK, GL FRONT vagy GL BACK lehet. A mode erteke
pedig GL POINT, GL LINE vagy GL FILL, mely azt jelzi, hogy a poligonnak csak a
cs ucspontjait kell megrajzolni, a hatarat kell megrajzolni vagy a belsejet ki kell tolteni.
Ha maskent nem rendelkez unk, akkor mindket oldalt kitoltve jelenti meg a rendszer.
Az el uls o es hats o oldal ertelmezesevel reszletesebben kell foglalkoznunk. Minden
iranythato fel ulet (a gyakorlatban hasznalt fel uletek t ulnyom o tobbsege pl. gomb, k up,
henger, torusz ilyen, de pl. a Kleinfele palack vagy a Mobius szalag nem) kozeltheto
konzisztens iranyt as u poligonokkal (poligonhal oval). Tehat a kozelto poligonok min-
degyike vagy pozitv (az oramutato jar as aval ellentetes) vagy negatv (az oramutat o
jar asaval egyezo) kor ulj ar asi irany u a fel uletnek ugyanarrol az oldalarol nezve. A
glFrontFace() parancs segtsegevel beallthatjuk, hogy a pozitv vagy negatv iranyt ast
kell el ulso felenk nez o oldalnak tekinteni.
void glFrontFace (GLenum mode);
A mode parameter GL CCW erteke eseten a poligon akkor tekintend o felenk nezonek,
ha vet uletenek kor ulj arasi iranya pozitv, GL CW eseten pedig, ha negatv. Az
alapertelmezes GL CCW. Azt, hogy a kepskon (keperny on) egy poligonnak az el ulso
vagy hatso oldala latszik a fenti bealltas es a poligon kepenek kor uljar asi iranya hatarozza
meg. A poligon vet uletenek kor uljar asi irany at a rendszer a poligon elojeles ter uletevel
hatarozza meg. A kepskra illeszked o p
0
, p
1
, . . . , p
n
cs ucspont u poligon elojeles ter ulete
T =
1
2
n

i=0
p
i
p
i+1
,
ahol p
i
= (x
i
, y
i
), p
i
p
i+1
= x
i
y
i+1
x
i+1
y
i
(a p
i
es p
i+1
vektorok vektori alis szorzatanak
harmadik komponense) es p
n+1
= p
0
, vagyis az osszeg tagjai az origo es a poligon oldalai
altal meghatarozott haromszogek elojeles ter uletei. Ezek alapjan a 3.3. tabl azat szerint
donthetj uk el, hogy melyik oldalat latjuk a poligonnak.
3.3. tabl azat. A poligonok lathat o oldalanak meghataroz asa
T > 0 T < 0
GL CCW el uls o hats o
GL CW hats o el uls o
Ennek a problem anak van sokkal szemleletesebb, terbeli megkozeltese is. Mint a
normalisok megadas anal mar szoltunk rola, a fel uleteket ler o poligonok cs ucspontjaiban
a normalisokat konzisztens modon kell megadni: a normalisok a fel ulet ugyanazon oldalan
legyenek. A poligonok es normalisok iranytas at ossze kell hangolni. Pozitv iranytas u po-
ligonok normalisa kifele mutat, a negatve befele. Ezeket a poligonokat a ter egy pontj ab ol
nezz uk, es vizsgaljuk, hogy a poligonok mely oldalat latjuk (feltetelezz uk, hogy az egyes
19
poligonok skbeliek). Egy poligon tetszoleges pontjab ol a nez opontba mutat o vektor es
a poligon normalisa altal bezart szog alapjan eldontheto, hogy a poligon mely oldalat
latjuk. Ha < /2, akkor azt az oldalat amerre a normalis mutat ekkor azt mondjuk,
hogy a poligon felenk nez , = /2 eseten a poligon elben latszik (a kepe szakasz lesz),
ha pedig > /2, akkor a normalis altal megjelolttel ellentetes oldalat latjuk, es azt
mondjuk, hogy a poligon hatso oldala latszik. Nem kell termeszetesen magat a szoget
meghatarozni, ugyanis n-el jelolve a normalvektort, s-el a nez opontba mutato vektort
cos =
n s
[n[ [s[
,
tehat csak ennek az elojelet kell vizsgalni. A 3.8. abr an egy hasabon szemleltetj uk ezt a
vizsgalatot. Az abra szerinti n
1
s
1
> 0, vagyis a lap felenk nezo; n
2
s
2
< 0, vagyis a lap
hats o oldalat latjuk; n
3
s
3
= 0, vagyis a lap elben latszik.
3.8. abra. Felenk nezo es hatso poligonok ertelmezese
3.3.4. Poligonok elhagyasa
Konzisztens iranytas u poligonokkal lert zart fel uletek (pl. egy gomb ot kozelt o polieder)
eseten a nem felenk nezo poligonokat nem lathatjuk. Ezert a feldolgozas gyorst asa
erdekeben az ilyen poligonokat celszer u elhagyni meg a kepskra vettes elott, mivel ezek
kepe nem lesz resze a vegs o kepnek, hiszen mas poligonok eltakarjak. Ennek erdekeben
engedelyezni kell a poligonok elhagyas at a glEnable(GL CULL FACE) paranccsal, es
meg kell mondanunk, hogy milyen helyzet u poligonokat akarunk elhagyni. Ez utobbit a
glCullFace() paranccsal tehetj uk meg.
void glCullFace (GLenum mode);
Segtsegevel beallthatjuk, hogy milyen helyzet u poligonok hagyhatok el meg a
keperny o-koordinat akra valo transzformalas elott, feltetelezve, hogy a poligonok elhagyasa
20
engedelyezett. A mode parameter GL BACK erteke eseten azokat, amelyeknek a hats o
oldalat latjuk; GL FRONT eseten a felenk nez o oldal uakat; GL FRONT AND BACK
eseten pedig minden poligont.
Nylt fel ulet eseten a poligonok elhagyasa helytelen eredmenyre vezethet, miutan ilyen-
kor a fel ulet mindket oldalat lathatjuk nemely poligonnak az el uls o oldalat, masoknak a
hats o oldalat , ezert a hats o oldalukat mutat o poligonok elhagyasa eseten a fel ulet kepen
lyukak keletkezhetnek. Teh at nylt fel uletek eseten ne hasznaljuk ezt a funkciot!
Zart fel ulet eseten is csak akkor eredmenyez korrekt, lathatos ag szerinti kepet, ha
egyetlen konvex poliedert abr azolunk. Tobb, egymast legalabb reszben takaro polieder,
vagy akar csak egyetlen konkav polieder eseten az algoritmus alkalmaz asa utan is ma-
radhatnak nem lathato, felenk nez o lapok. Ilyen a 3.8. abr an az n
4
normalis u lap. Zart
fel ulet eseten azonban celszer u ezt a funkci ot aktivizalni, ugyanis ez a vizsgalat gyors,
ezert jo elosz ur oje a lapoknak lathatos agi vizsgalatokhoz, ami az OpenGL eseten a z-
puer algoritmus.
3.3.5. Kitoltes mintaval
Ha maskepp nem rendelkez unk, a rendszer a poligonok belsejet az ervenyben levo arnyalasi
modellnek (lasd a 4.2. szakaszt) megfeleloen kisznezi. Lehetoseg van azonban arra is,
hogy a poligonokat az ablak koordinata-rendszerehez kapcsolt 32 32-es bittombbel me-
gadott mintaval tolts uk ki. (Ez nem tevesztend o ossze a text uraval, ezt a mint at ugyanis
a vet uletre teszi a rendszer, nem pedig a terbeli modellre!) Ehhez engedelyezni kell a po-
ligon mint aval val o kitolteset a glEnable(GL POLIGON STIPPLE) paranccsal es meg
kell adni a mintat.
void glPolygonStipple (const GLubyte *mask);
Poligonkit oltesi mintat lehet vele megadni. A mask parameter a kitoltesi mint at pi-
xelenkent ler o 32 32-es bittomb cme. A tombben az 1 a rajzolast, a 0 a nem raj-
zolast jelenti. Ezen parancs vegrehajtas ara a glPixelStore*(GL UNPACK*) paranccsal
bealltott mod is hatassal van. A poligonok k ulonb oz o megjelenesi modjait szemlelteti
a 3.9. abra.
3.3.6. Poligon hatarol o eleinek megjelolese
Az OpenGL csak konvex poligonokat tud helyesen megrajzolni, a gyakorlatban viszont
nem szamt kuriozumnak a konkav poligon. Ezeket ugy tudjuk a siker remenyeben
abr azolni, hogy uj oldalak hozzaad asaval konvex poligonokra, tobbnyire haromszogekre,
bontjuk. Ha az gy felbontott poligont GL LINE modban abrazoljuk, a felbontashoz be-
vezetett uj elek is megjelennek, holott mi csak a poligon hatar at szeretnenk latni. Ezen
problema kik uszob olese erdekeben az OpenGL a poligonok cs ucspontjaihoz egy bitben
tarolja, hogy a cs ucspontot koveto el hatarol o el vagy sem. Ezt a jelzot a glBegin() es
glEnd() parancsok kozott, a cs ucspontokat ler o glVertex*() parancs kiadasa elott lehet
bealltani a glEdgeFlag() paranccsal.
21
3.9. abra. Poligon k ulonb oz o megjelentese
22
void glEdgeFlag (GLboolean ag);
void glEdgeFlagv (const GLboolean *ag);
Segtsegevel beallthatjuk, hogy a kovetkezo cs ucspont egy hatarol o el kezd opontja,
vagy sem. A ag parameter GL TRUE ertekevel azt jelezz uk, hogy hatarolo el lesz, a
GL FALSE ertekkel pedig azt, hogy nem. Az alapertelmezes GL TRUE. Ezt a bealltast
nem kell minden cs ucspont letrehozasa elott elvegezn unk, mert a rendszer mindig a jelzo
kurrens erteket rendeli az ujonnan letrehozott cs ucsponthoz.
Ennek a parancsnak csak egyedi poligon, haromsz og es negyszog (GL POLYGON,
GL TRIANGLES, GL QUADS) rajzolasa eseten van hatasa, haromszog- es negysz ogsor
(GL TRIANGLE STRIP, GL QUAD STRIP, GL TRIANGLE FAN) eseten nincs.
23
4. fejezet
Szn, arnyalas
A szneket legcelszer ubb egy haromdimenzi os ter pontjaikent felfogni. A ter egy bazis anak
(koordinata-rendszerenek) rogztese utan minden sznt egy szamh armas segtsegevel lehet
azonostani. A szamtogepi grakaban ket sznmegad asi (sznkeveresi) mod, ketfele bazis
terjedt el. Az egyik a sznes grakus display-nel hasznalt additv (hozzaad o) sznkeveres,
a masik a sznes nyomtatokn al hasznat szubtraktv (kivon o).
Additv sznkeveres eseten azt rjuk elo, hogy mennyi vor os (Red), zold (Green) es
kek (Blue) sznkomponenst adjunk a fekete sznhez, a fekete keperny ohoz. A sznteret az
egysegkock aval szemleltetj uk, mivel a sznkomponensek erteke altalaban a [0., 1.] interval-
lumon valtoztathato a k ulonb oz o grakus rendszerekben, beleertve az OpenGL-t is. Ezt a
sznel oalltasi modot RGB sznrendszernek szokas nevezni. A (0., 0., 0.) szamh armas a fe-
kete, az (1., 1., 1.) a feher sznnek, a legosszetettebb sznnek, felel meg (lasd a 4.1. abr at).
A sznes raszteres grakus display-k m uk odese ezzel osszhangban van, hiszen a keperny o
minden egyes pixele k ul onboz o intenzit as u voros, zold es kek sznt tud kibocsatani. Az
RGB sznmegad as az emberi szem m ukodesevel is osszhangban van. Az emberi szem
retinaj aban a vilagossagl atast lehetove tevo erzekel o sejtek, az un. palcik ak, tov abba a
sznl atast lehetove tevo erzekel o sejtek, az un. csapok talalhat ok. A csapok harom fajtaja
k ul onboztethet o meg aszerint, hogy milyen hullamhossz u feny ingerli oket leginkabb. Ez
a harom hull amhossz eppen a voros, zold es kek szne, vagyis leegyszer ustve azt mond-
hatjuk, hogy az emberi szemben RGB erzekel ok vannak, es a k ul onb ozo aranyban erzekelt
sznkomponensek osszegzese utj an all elo az altalunk latott szn.
Szubtraktv sznkeveres eseten azt rjuk elo, hogy mennyi t urkiz (Cyan), bbor
(Magenta) es sarga (Yellow) sznt kell kivonnunk a legosszetettebb sznb ol, a feherb ol
(a papr szne) a kv ant szn eloalltasa erdekeben (lasd a 4.2. abrat). Ezt roviden CMY
sznrendszernek nevezz uk.
A grakai hardver altal hasznalt sznkeveresen kv ul mas modok is lehetsegesek, mas
bazis is felvehet o a sznterben. Ilyen pl. a kepz om uveszek altal hasznalt szn arnyalat,
fenyesseg es teltettseg (HLS) sznmeghat arozas. Errol, es a sznnel kapcsolatos egyeb
problem akrol a [4], [1], [2] konyvekben reszletesebben olvashatunk.
A szamtogepek grakus alaprendszereiben a sznek megadasa altal aban ketfelekeppen
tortenhet. Az egyik sznmegadasi mod eseten kozvetlen ul megadjuk a kv ant szn
RGB komponenseit, a masik eseten csupan egy indexszel hivatkozunk egy sznt abl azat
(sznpaletta) valamely elemere. Termeszetesen a paletta sznei a felhasznal o altal
megvaltoztathat ok, vagyis ugyanahhoz a sznindexhez mas sznt rendelhet unk hozza.
24
4.1. abra. A sznkocka az RGB koordinata-rendszerben
Az OpenGL-ben az RGB komponensek mellett egy negyedik, un. alfa (A) komponenst
is megadhatunk, ezert itt RGBA modr ol beszel unk. Az alfa komponens termeszetesen
nem a szn denial as ahoz kell, ahhoz pontosan harom komponens sz ukseges, vele az
atl atszos agot adhatjuk meg, vagyis azt kontroll alhatjuk, hogy az adott sznnel kifestendo
pixelen csak az uj szn latsszon, vagy a pixel regi es uj szneb ol egy uttesen alljon elo a
pixel vegso szne. Alfa 1. erteke eseten a szn nem atl atsz o, 0. eseten teljesen atl atszo, a
kozb ulso ertekek eseten pedig a pixel regi es uj sznet keveri a rendszer az elort aranyban.
A sznes grakus hardver egyreszt felbont asban a keperny o pixeleinek szam aban ,
masreszt a pixeleken megjelentheto sznek szam aban k ul onb ozik. E kett ot a monitor es a
grakus kartya minosege, es azok osszhangja hatarozza meg. Jo minoseg u, val oszer u kepek
elo allt asahoz nem elegendo a felbont ast novelni, ugyanis viszonylag alacsony felbont as
mellett nagyszam u szn eseten szinte tokeletes kepet hozhatunk letre. Gondoljunk pl.
a TV kesz ulekekre, melyek felbont asa eleg kicsi (a PAL rendszer u kesz ulekek 625 soron
jelentik meg a kepet) a mai monitorok felbont asahoz kepest, de a megjelenthet o sznek
szama ezt szokas sznmelysegnek is nevezni gyakorlatilag korlatlan.
A szamt ogepekben, pontosabban azok grakus karty ajan, a kepernyo minden pi-
xelehez ugyanannyi memoria tartozik, melyben a pixelek sznet tarolja a gep. A pixelek
sznenek tarol asara hasznalt memoriat sznpuernek nevezz uk. A puer meretet azzal
jellemezz uk, hogy pixelenkent hany bit all rendelkezesre a sznek tarol asara. 8 bit/pixel
25
4.2. abra. A sznkocka a CMY koordinata-rendszerben
eseten a megjelenthet o sznek szama 2
8
= 256. A manapsag hasznalatos grakus kartyak
sokkal tobb sznt tudnak megjelenteni, a 24 bit/pixel kezd standardda valni, mar a 16
bit/pixel is kihaloban van. A legjobbnak mondhato kartyak eseten 32 bit/pixel (az RGBA
osszetev ok mindegyikere 8, vagyis 16.77 millio szn plusz az atl atszos ag, az ilyen grakus
karty akat szokas true colornak is nevezni) es akkora a memoria, hogy ilyen sznpuerb ol
ket darabot tud hasznalni (erre pl. animaci o eseten van sz ukseg unk), tehat ezt felfoghat-
juk 64 bit/pixelkent is.
A pixelenkenti biteket a rendszerek altal aban egyenletesen osztjak el a
sznkomponensek koz ott, bar vannak kivetelek. Azt, hogy az altalunk hasznalt
rendszerben hany bit all rendelkezes unkre az egyes sznkomponensek, illetve az alfa
ertek tarol asara, tov abba, hogy az egyes sznindexekhez milyen RGB ertekek tartoz-
nak a glGetIntegerv() parancs GL RED BITS, GL GREEN BITS, GL BLUE BITS,
GL ALPHA BITS, illetve GL INDEX BITS parameterrel val o meghv as aval kapjuk meg.
Az RGBA es sznindex modok kozotti valasztasra nincs OpenGL parancs, mivel ez
hardverf ugg o parameter. Erre szolgal o f uggvenyt az OpenGL-hez kapcsolt, ablakoz ast
es felhasznaloi interakciokat lekezelo f uggvenyk onyvt arakban talalhatunk, pl. a minden
OpenGL implement acio reszet kepezo GLX-ben, vagy az altalunk preferalt GLUT-ben.
Sznindex mod eseten elofordulhat, hogy sajat sznpalett at akarunk megadni.
Termeszetesen erre sincs OpenGL parancs, erre is a fent emltett kiegeszto konyvtarakban
talalhatunk f uggvenyeket. Sznpaletta denial asa eseten ugyeln unk kell arra, hogy az em-
26
ber altal egyenletesen valtozonak erzekelt intenzit asvaltoz as nem ugy erhet o el, hogy az
RGB ertekeket linearisan valtoztatjuk. Peld aul a csak kek komponens u sznt a [0., 1.]
intervallumon tekintve, a 0.1-rol a 0.11-re valtast sokkal jelentosebbnek erzekelj uk, mint
a 0.5-rol a 0.51-re valtast. A 0.55 ertekkel sokkal jobb hatast er unk el. Hasonlok a
tapasztalatok a fenyer o erzekelese kapcsan is, 50 W es 100 W kozott marmint ilyen tel-
jestmeny u villanyegok koz ott nagyobb ugrast eszlel unk, mint 100 W es 150 W koz ott.
A linearis skala helyett sokkal jobb a logaritmikus skala, bar ez a problema erosen hard-
verf ugg o. Monitorok eseten ennek a problem anak a megoldas at gamma-korrekci onak ne-
vezik (tovabbi informaci ok [4]-ban talalhatok).
A felhasznaloi programban donten unk kell a sznmegad as modjar ol, es ez a
tovabbiakban nem valtoztathato meg, tehat egy alkalmazasban vagy vegig RGBA
modban, vagy sznindex modban kell dolgoznunk. A rajzolas sznenek kivalasztasa nem
jelenti feltetlen ul azt, hogy az adott objektum a kivalasztott sznnel fog megjelenni a
keperny on, ugyanis sok mas hatast is gyelembe vesz a rendszer, pl. megvilagtast,
arnyal ast vagy text ur at. A pixelek vegso szne egy hossz u m uveletsor eredmenyekent
all elo.
A rendszer a sznt a cs ucspontokban szamolja ki. A cs ucsponthoz rendeli a kurrens ra-
jzolasi sznt. Ha a megvilagtas engedelyezett, akkor a fenyforr as(ok) szne, es az arnyal asi
modelltol f uggoen (lasd a 4.2. szakaszt) a transzformalt cs ucspontbeli normalis, tovabb a
az anyagtulajdonsagok (lasd a 6.3. szakaszt) is befolyasolj ak a vegs o sznt. Ilyen esetben
a rajzolasi szn hatastalan. A rendszer a megjelento transzformacios lanc vegen az ob-
jektumot a kepmez okoordinata-rendszerbe transzformalja, majd raszterekke konvert alja,
vagyis meghatarozza, hogy mely pixelek esnek az alakzat kepere. Ezekhez a raszterekhez
hozzarendeli az alakzat megfelelo reszenek sznet, melyseget ( z koordinata) es text ura
koordinat ait. A raszter es a hozzarendelt ertekek egy utteset fragmentumnak nevezz uk az
OpenGL-ben. Miutan a fragmentumokat letrehozta a rendszer, ezekre alkalmazza a kod,
text ura, simtasi eektusokat, ha azok hasznalata engedelyezett. Veg ul az gy modostott
fragmentumra es a kepernyo pixeleire vegrehajtja az elort alfa sznkeverest, ditheringet
es a bitenkenti logikai m uveleteket ha ezek engedelyezettek, illetve elortak , es az gy
kapott sznnel fel ulrja a megfelelo pixel sznet.
Ha a bit/pixel szam alacsony, pl. csak 4 vagy 8, akkor tobb sznt ugy erzekeltethet unk,
hogy negyzetes pixeltomb ok pixeleit k ul onb ozo elrendezesben festj uk ki a rendelkezesre
all o sznekkel. Ezaltal uj sznhat as u pixeltomb ok jonnek letre. Termeszetesen csak akkor
jo a hatas, ha a pixelek eleg kicsik, illetve eleg messzirol nezz uk a kepet. Ezt a tech-
nikat ditheringnek nevezz uk. Ezzel gyakorlatilag a felbontas csokkentese reven novelj uk
a sznek szam at. Hasznalata a nyomtat okn al szeles korben elterjedt, de sz ukseg lehet ra
gyengebb grakus karty ak (pl. 24 bit/pixel) eseten is, ha animalunk, azaz mozgo kepet
hozunk letre. Ilyenkor ugyanis ket azonos meret u sznpuferre van sz ukseg, tehat az ere-
deti 24 bit/pixelbol csak 12 bit/pixel lesz, ami mar nem alkalmas un. true color kepek
elo allt asara.
Sznindex mod eseten a rendszer csak a sznpalett aba mutato indexet tarolja pixe-
lenkent, nem pedig magat a sznt. A paletta a sznek RGB komponenseit tartalmazza.
A paletta szneinek a szama 2 hatvanya, altalaban 2
8
= 256-tol 2
12
= 4036-ig szokott
terjedni. RGBA modban a pixelek szne teljesen f uggetlen egymast ol, vagyis, ha egy pi-
xel sznet megvaltoztatjuk, annak nincs hatasa a tobbi pixel sznere. Sznindex modban
viszont a paletta valamely sznenek megvaltoztat asa eseten a ra mutato index u pixelek
27
mindegyikenek megvaltozik a szne. Ezt hasznaljuk ki az un. sznanim acio soran.
Felmer ul a kerdes, hogy mikor hasznaljunk RGBA es mikor sznindex modot. Ezt
alapvetoen a rendelkezesre all o hardver, es a megoldando feladat hatarozza meg. Legtobb
rendszerben RGBA modban tobb szn jelenthet o meg a kepernyon, mint sznindex
modban. Szamos specialis eektus, mint pl. az arnyalas, megvilagt as, text ura-lekepezes,
atmoszferikus hatasok, antialiasing es atlatsz osag RGBA modban sokkal eredmenyesebben
valosthat o meg.
A sznindex modnak is vannak azonban elonyei. Celszer u sznindex modot
valasztanunk,
ha egy olyan programot kell atrnunk OpenGL-be, amely mar ezt a modot hasznalta;
ha kevesebb sznt akarunk hasznalni, mint a sznpuer altal kn alt maximum;
ha a bit/pixel ertek alacsony, azaz keves szn jelenthet o meg, ugyanis RGBA
modban az arnyalas durvabb lehet;
ha olyan specialis tr ukk oket akarunk megval ostani, mint a sznanim acio, vagy a
retegekbe rajzolas;
ha pixelenkenti logikai m uveleteket akarunk a szneken vegrehajtani.
4.1. Szn megadasa
RGBA modban a kurrens sznt a glColor*() paranccsal adhatjuk meg.
void glColor3bsifdubusui (TYPE r,TYPE g,TYPE b);
void glColor4bsifdubusui (TYPE r,TYPE g,TYPE b,TYPE a);
void glColor34bsifdubusuiv (const TYPE *v);
A kurrens sznt az RGB(A) komponensekkel denialja. A v-vel vegz odo nev u paran-
csok eseten a parametereket tartalmazo vektor cmet adja at. Ha alfa erteket nem adjuk
meg, a rendszer automatikusan 1.-nek veszi. Lebegopontos parameterek f es d opciok
eseten a rendszer a megadott erteket a [0., 1.] intervallumra levagja, az elojel nelk uli
egesz parametereket ub, us, ui opciok linearisan lekepezi a [0., 1.] intervallumra (lasd
a 4.1. tabl azatot), az elojeles egeszeket pedig ugyancsak linearisan kepezi le a [1., 1.]
intervallumra. A rendszer csak a szninterpolal as es a sznpuerbe valo ber as elott vegzi
el a levag ast.
Sznindex modban a glIndex*() paranccsal valaszthatjuk ki a kurrens sznindexet.
void glIndexsifd (TYPE c);
void glIndexsifdv (TYPE c);
A kurrens sznindexet a valasztott opcionak megfelelo modon megadott ertekre alltja
be.
28
4.1. tablazat. A sznkomponensek lekepezese
jel adattpus megadhato ertekek intervalluma amire lekepezi
b 8 bites egesz [128, 127] [1., 1.]
s 16 bites egesz [32768, 32767] [1., 1.]
i 32 bites egesz [2147483648, 2147483647] [1., 1.]
ub elojel nelk uli 8 bites egesz [0, 255] [0., 1.]
us elojel nelk uli 16 bites egesz [0, 65535] [0., 1.]
ui elojel nelk uli 32 bites egesz [0, 4294967295] [0., 1.]
4.2.

Arnyalasi modell megadasa
A szakasz es poligon alapelemeket megrajzolhatjuk egyetlen sznnel, vagy sok
k ul onboz ovel. Az elso esetet konstans arnyal asnak (at shading), a masodikat pedig foly-
tonos vagy sima arnyal asnak (smooth shading) nevezz uk. A glShadeModel() paranccsal
valaszthatunk a ket arnyal asi technika koz ott.
void glShadeModel (GLenum mode);
Az arnyal asi modell kivalasztas ara szolgal. A mode parameter erteke GL SMOOTH
vagy GL FLAT lehet, alapertelmezes a GL SMOOTH.
Konstans arnyalas eseten a rendszer egyetlen cs ucspont sznevel sznezi ki az egesz
objektumot. Tor ottvonal eseten ez a vegpont szne, poligon eseten pedig a 4.2. tablazat
szerinti. A tabl azat azt mutatja, hogy az i-edik poligont mely cs ucspont sznevel rajzoljuk
meg, feltetelezve, hogy a cs ucspontok es poligonok szamoz asa 1-el kezd odik. Ezeket a
szabalyokat kovetkezetesen betartja a rendszer, de a legbiztosabb, ha konstans arnyal asnal
csak egy sznt adunk meg az alapelem letrehoz asakor.
4.2. tablazat. A poligon sznenek meghatarozasa
poligon fajta az i-edik poligon melyik
cs ucspont szerint lesz kisznezve
GL POLYGON 1
GL TRIANGLE STRIP i + 2
GL TRIANGLE FAN i + 2
GL TRIANGLES 3i
GL QUAD STRIP 2i + 2
GL QUADS 4i
Folytonos arnyalas eseten a cs ucspontok sznet pontosabban RGBA modban a sznt
komponensenkent, sznindex modban az indexeket linearisan interpolalja a rendszer a
szakaszok belso pontjai sznenek kiszamtas ahoz. Poligon hataranak megrajzolasakor is ez
az eljaras, a poligon belsejenek kisznezesekor pedig kett os linearis interpolaciot hajt vegre.
29
A 4.3. abra szerinti a pontot a c
1
es c
3
cs ucspontok, a b pontot a c
2
es c
3
cs ucspontok
alapjan, majd a p belso pont sznet az a es b pontok sznenek linearis interpolacioj aval
hatarozza meg. Ezt az arnyalast Gouroudfele arnyal asnak is nevezz uk.
4.3. abra. Gouroud-fele arnyal as
Folytonos arnyal as alkalmazas aval el tudjuk t untetni a keprol a gorb ult fel uleteket
kozelto poligonhal o eleit. Ezt illusztralja a 4.4. abra, ahol egy gombot lathatunk konstans
(felso kep) es folytonos (also kep) arnyal assal.
Sznindex mod eseten meglepetesek erhetnek benn unket, ha a szomszedos
sznindexekhez tartozo sznek nagyon elter oek. Ezert ha sznindex modban folytonosan
akarunk arnyalni, akkor elobb celszer u a megfelelo sznpalett at letrehoznunk.
30
4.4. abra. Gomb konstans es folytonos arnyalassal
31
5. fejezet
Koordinata-rendszerek es
transzformaciok
A geometriai alapelemek tobb transzformacion mennek kereszt ul mire veg ul megjelen-
nek a keperny on (ha egyaltalan). Nagymertek u analogia mutathato ki a m utermi
fenykepkesztes, beleertve a paprra vitelt is, es az OpenGL-el val o kepalkot as koz ott.
Ez az analogia a kovetkez o fo lepesekre ep ul (zar ojelben az OpenGL megfelelo transz-
formaci oja szerepel):
A fenykepezogep elhelyezese, rairanyt asa a lefenykepezendo terreszre (nez opontba
transzformal as).
A lefenykepezendo objektumok elhelyezese a kv ant pozci oba (modelltransz-
formaci o).
A megfelelo lencse kivalasztasa, zoom beallt asa (vettesi transzformaci o).
Az elkesz ult negatvr ol megfelelo meret u paprkep kesztese (kepmez o-
transzformaci o).
Ahhoz, hogy az OpenGL-el kepet hozzunk letre, a fenti transzformaciokat kell meg-
adnunk. Az alabbiakban ezen transzformaciok megadasar ol, az egyes transzformaci ok
hatas arol, m uk odes uk leras arol, a transzformaci okat ler o matrixokr ol es azok tarolas arol
lesz szo.
Az OpenGL koordinata-rendszerei dereksz og u Descartesfele koordinata-rendszerek,
de a belso szamt asokat homogen koordinat akban hajtja vegre a rendszer, es a koordinata-
rendszerek kozti transzformaci okat 4 4-es valos elem u matrixszal rja le es tarolja. Az
egyes transzformaci ok megadas ara OpenGL parancsok allnak rendelkezes unkre, de arra
is lehetoseg van, hogy a felhasznalo magat a transzformaciot lero matrixot adja meg
kozvetlen ul. Az utobbi esetben k ul on os gyelmet kell fordtani arra, hogy a megadott
matrixok illeszkedjenek az OpenGL transzformaci os lancaba.
A transzformaci okat p/ = Mp alakban rhatjuk fel, ahol p a transzformaland o pont,
p/ a transzformalt pont homogen koordinatait, M pedig a transzformaciot ler o 4 4-
es matrixot jeloli. Ha a p pontra elobb az M
1
, majd az M
2
matrix u transzformaci ot
alkalmazzuk, akkor p/ = M
1
p, p// = M
2
p = M
2
(M
1
p) = (M
2
M
1
) p miatt az eredo
32
transzformaci o az M = M
2
M
1
matrixszal rhat o le. A sorrend nem koz omb os, mivel a
matrixok szorzasa nem kommutatv (nem felcserelhet o) m uvelet!
Az OpenGL tarolja a kurrens transzformaci os matrixot es ezt megszorozza a meg-
felelo OpenGL paranccsal letrehozott uj transzformacio matrix aval, de nem balrol, ha-
nem jobbrol. Ezert az OpenGL szam ara sajnos eppen fordtott sorrendben kell megadni
a transzformaci okat! Tehat az elozo pelda vegeredmenyehez elobb az M
2
, majd az M
1
transzformaci ot kell megadni. Ez nem t ul szerencses, de nem tudunk rajta valtoztatni,
alkalmazkodnunk kell hozza.
5.1. Nez opont, nezesi irany kivalasztasa es modell-
transzformaciok
Az abrazoland o alakzatot elmozgathatjuk a koordinata-rendszerhez kepest, vagy akar
alakjukat es meretar anyaikat is megvaltoztathatjuk. Ezeket a transzformaci okat az
OpenGL terminologi aja szerint modelltranszformacionak nevezz uk.
A nez opont es a nezesi irany kivalasztas aval azt hatarozzuk meg, hogy az alakza-
tot honnan es milyen iranybol nezz uk, vagyis azt, hogy az alakzat mely reszet latjuk.
Alapertelmezes szerint ha nem adunk meg k ulon nez opontot es nezesi iranyt az origobol
nez unk a negatv z tengely irany aba. A nez opont, nezesi irany es tov abbi feltetelek
segtsegevel egy uj koordinata-rendszert, az un. nezopontkoordinata-rendszert hozzuk
letre. Ennek alapertelmezese tehat az objektumkoordinata-rendszer.
Nyilvanval o, hogy a nezopont es nezesi irany bealltasa elerhet o a modell megfelelo
transzformaci ojaval is. Egy targyat kor ulj arva ugyanazt latjuk, mintha egy helyben ma-
radva a targyat forgatnank korbe. Mg a valos agban a targyak nem mindig forgathatok
korbe pl. meret uk miatt , szamtogepi modell eseten ez nem jelent gondot. E ket
transzformaci o szoros kapcsolata es helyettesthetosege miatt az OpenGL egyetlen koz os
matrixban tarolja a nez opont- es modelltranszformaciot. Ez a kozos matrix tehat a ket
komponenstranszformaci o matrixainak szorzata. Miutan az OpenGL mindig jobbrol szo-
rozza meg a kurrens matrixot az ujjal, elobb a nez opontba transzformal ast kell megadni,
majd a modelltraszformacio(ka)t, ha azt akarjuk, hogy elobb a modelltranszformaciokat
hajtsa vegre a rendszer.
A nez opont- es modelltranszformaci ok megadasa elott a glMatrix-
Mode(GL MODELVIEW) parancsot ki kell adni, amivel jelezz uk, hogy ezt a
matrixot fogjuk modostani (lasd az 5.4. pontot). Az alabbiakban a nezopont- es
modelltranszformaciok megadasat segt o OpenGL parancsokat ismertetj uk.
5.1.1. Modelltranszformaciok megadasat segto parancsok
Az OpenGL szam ara a felhasznal o kozvetlen ul megadhatja a transzformaci o 4 4-es
matrix at es a glLoadMatrix() parancsot hasznalva ezzel fel ulrhatja, a glMultMatrix()
parancs segtsegevel megszorozhatja a kurrens transzformaci os matrixot. Az OpenGL
transzformaci ok megadas at segt o parancsai elobb kiszamtjak a transzformaci o 4 4-es
matrix at, majd ezzel megszorozzak a kurrens matrixot.
33
Eltolas
void glTranslatefd (TYPE x, TYPE y,TYPE z );
Eloalltja az [x, y, z, 1.]
T
vektorral valo eltolas matrix at, es megszorozza vele a kurrens
matrixot.
Elforgatas
void glRotatefd (TYPE angle, TYPE x,TYPE y, TYPE z );
Eloalltja a ter pontjait az origon athalado, [x, y, z]
T
iranyvektor u egyenes kor ul angle
szoggel elforgato matrixot, es megszorozza vele a kurrens matrixot. A szog elojeles, es
fokban kell megadni.
Skalazas es t ukrozes
void glScalefd (TYPE , TYPE , TYPE );
Eloalltja annak a transzformacionak a matrix at, amely az x tengely menten , az
y tengely menten , a z tengely menten pedig mertek u kicsinytest vagy nagyt ast,
valamint az elojeltol f ugg oen esetleg koordinatask(ok)ra vonatkoz o t ukr ozest hajt vegre,
es megszorozza vele a kurrens matrixot. Ez tehat egy specialis an transzformaci o, mely
az alakzatok meretet, meretaranyait (pl. szelesseg / magassag) es iranyt asat is meg tudja
valtoztatni. Az 1.-nel nagyobb abszol ut ertek u tenyezo az adott tengely menti nagytast,
az 1.-nel kisebb abszol ut ertek u kicsinytest, a negatv tenyez o pedig az eloz oek mellett
az adott tengelyre meroleges koordinataskra vonatkozo t ukr ozest is eredmenyez.
5.1.2. Nez opont es nezesi irany bealltasa
Alapertelmezes szerint a nez opont a modellkoordinata-rendszer origoja, a nezesi irany pe-
dig a negatv z tengely. Egy uj nez opont es nezesi irany bealltas aval egyenertek u, ha
az objektumot mozgatjuk el ellentetes iranyban. Ezt az elozoekben ismertetett glTrans-
late*() es glRotate*() parancsokkal tehetj uk meg. Ez azonban nem mindig kenyelmes,
a felhasznal o gondolkodasahoz nem feltetlen ul illeszked o eljaras. Ha az uj nez opontot es
nezesi iranyt, ezaltal uj nezopontkoordinata-rendszert explicite akarunk megadni, akkor
a GLU f uggvenyk onyvtar gluLookAt() f uggvenyet hasznaljuk!
void gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez,GLdouble centerx,
GLdouble centery, GLdouble centerz,GLdouble upx, GLdouble upy, GLdouble
upz );
Egy uj nezopontot es nezesi iranyt megado matrixot hoz letre, es ezzel megszorozza a
kurrens matrixot. Az (eyex, eyey, eyez ) szamh armas az uj nez opontot az uj origot ,
34
a (centerx, centery, centerz ) szamh armas az uj nezesi iranyt az uj z tengely iranyat ,
az (upx, upy, upz ) szamh armas pedig a felfele iranyt az uj y tengely irany at rja elo
(lasd az 5.1. abrat).
5.1. abra. Az uj nezopont es nezesi irany megadasa a modellkoordinata-rendszerben a
gluLookAt( ) f uggvennyel
Ezzel a f uggvennyel tehat azt adjuk meg, hogy honnan (eyex, eyey, eyez ) hova (cen-
terx, centery, centerz ) nez unk, es a kepen mely terbeli irany (upx, upy, upz ) kepe legyen
f ugg oleges.
5.2. Vettesi transzformaciok
Az OpenGL 3D-s grakus rendszer, vagyis terbeli alakzatok abrazol as ara is alkalmas.
Ezert sz ukseg van olyan transzformaci okra, melyek a teret skra a keperny o is skbeli
tartomanynak tekintendo kepezik le. A rendszer erre ket lehetoseget knal: a centr alis
es a meroleges vettest. A vettes modjanak kivalasztas ahoz a nez opontkoordinata-
rendszerben meg kell adnunk azt a terreszt, amit abr azolni szeretnenk. Ez centralis vettes
eseten csonka g ula, meroleges vettesnel teglatest. A kepen csak azok az alakzatok, il-
letve az alakzatok azon reszei jelennek meg, melyek az eloz o testeken bel ul vannak, ami
azt jelenti, hogy az ebbol kilog o reszeket a rendszer eltavoltja, vagyis a vett o polieder
lapjaival levagja. Ez a vag as a vettesi transzformaci o utan, az un. vag o koordinat akban
tortenik. A vettesi transzformaci o nem skbeli kepet eredmenyez ezt varhatnank el ,
hanem a vettendo terreszt (csonka g ul at, teglatestet) egy kock ara kepezi le.
A vettes modjanak kivalaszt asat es az abr azolando terresz kijeloleset egyetlen pa-
ranccsal hajthatjuk vegre. Centr alis vettesnel a glFrustum() vagy gluPerspective(),
meroleges vettesnel pedig a glOrtho() vagy gluOrtho2D() parancsokkal. Centralis
(perspektv) vettest akkor alkalmazunk, ha valoszer u kepet szeretnenk letrehozni (az
emberi lat as is gy m uk odik), meroleges vettest pedig meret- vagy meretarany-helyes
kepek letrehoz asakor. Ezen parancsok elott ne felejts uk el kiadni a glMatrix-
Mode(GL PROJECTION); es glLoadIdentity(); parancsokat! Az elsovel megadjuk,
hogy a vettesi matrixot akarjuk modostani (azt tessz uk kurrensse), a masodikkal
betoltj uk az egysegmatrixot. A rendszer ugyanis az ujonnan letrehozott vettesi
matrixokkal megszorozza a kurrens matrixot.
35
void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far);
Az 5.2. abra szerinti csonka g ul aval meghatarozott centr alis vettes matrixat alltja
elo, es megszorozza vele a kurrens matrixot. A near es far ertekek a kozeli es tavoli
vag osknak a nezopontt ol (a nez opont koordinata-rendszerenek origoj atol) mert tavolsag at
jelentik, mindig pozitvak. A csonka g ula fedolapjan az egyik atl o vegpontj anak koor-
dinat ai (left, bottom, near) es (right, top, near).
5.2. abra. A glFrustum( ) f uggveny parametereinek jelentese
Az gy megadott csonka g ulanak nem kell feltetlen ul egyenes g ul abol szarmaznia
a z
s
tengely es a fedolap metszespontja nem feltetlen ul esik egybe a fedolap atl oinak
metszespontj aval , vagy maskent megkozeltve: az (z
s
, s
s
) es (y
s
, z
s
) koordinataskok
nem feltetlen ul szimmetriaskjai a csonka g ul anak.
A gluPerspective() f uggvennyel szimmetrikus csonka g ulat (abr azolando terreszt)
adhatunk meg a lat oszog (a felso es also vagoskok szoge), a kep szelessegenek es ma-
gassag anak aranyaval, valamint a kozeli es tavoli vagoskoknak a nezopontt ol mert
tavols agaval.
void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble
far);
Az 5.3. abra szerinti szimmetrikus csonka g ul aval meghatarozott centralis vettes
matrix at alltja elo, es megszorozza vele a kurrens matrixot. Az fovy [0., 180.] lat oszog
az (y, z) skban merend o. Az optimalis latosz oget a szem unknek a kepernyot ol val o
tavols agab ol es annak az ablaknak a mereteb ol kapjuk meg, melyen megjelentj uk a kepet.
Pontosabban, azt a szoget kell meghatarozni, amely alatt az ablakot latjuk. A near es far
ertekek a kozeli es tavoli vag osknak a nezopontt ol (a nez opont koordinata-rendszerenek
origoj atol) mert tavolsag at jelentik, mindig pozitvak.
Meroleges vettes megadas ara is ket lehetoseg unk van. Ilyen esetben termeszetesen a
nez opont helye gyakorlatilag kozomb os, csak a nezesi irany szamt.
36
5.3. abra. A gluPerspective( ) f uggveny parametereinek jelentese
void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far);
Az 5.4. abra szerinti teglatesttel meghatarozott meroleges vettes matrixat alltja elo,
es megszorozza vele a kurrens matrixot. A near es far parameterek negatvok is lehetnek.
5.4. abra. A glOrtho( ) f uggveny parametereinek jelentese
Az (x, y) koordinataskra illeszked o alakzatok abr azolas at konnyti meg a kovetkezo
f uggveny.
void gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
Ennek hatasa csak abban k ul onbozik a glOrtho() parancset ol, hogy nem kell a kozeli
es tavoli vagoskokat megadni, a rendszer automatikusan a z [1., 1.] koordinat aj u
pontokat veszi csak gyelembe, vagyis ezek lesznek a kozeli es tavoli vag oskok.
37
A fenti parancsokkal megadott poliederek oldallapjaival a rendszer levagja az alak-
zatokat, tehat csak a poliederen (csonka g ulan, illetve teglatesten) bel uli reszt kepezi le.
Ezt a vag ast a vettesi transzformaci o utan hajtja vegre a rendszer, vagyis a csonka g ula
vagy teglatest lapjai helyett a nekik megfelelo kocka lapjaival. Ezen vag oskok mellett
legalabb tov abbi hat vag osk adhato meg barmely OpenGL implement acioban, melyek
segtsegevel tov abb sz ukthetj uk az abrazoland o terreszt. Ez a lehetoseg felhasznalhat o
pl. csonkolt alakzatok abr azol asara is. A GL MAX CLIP PLANES parameterrel kiadott
glGetIntegerv() parancs megadja, hogy az altalunk hasznalt implementaci oban hany
vag osk adhato meg.
void glClipPlane (GLenum plane, const GLdouble *equation);
Ezzel a paranccsal egy vag oskot adhatunk meg. A plane parameter erteke
GL CLIP PLANEi lehet (i = 0, . . . , vagoskok szama1), ami az uj vagosk azonost oja.
Az *equation parameter a sk Ax + By + Cz + D = 0 implicit alakjanak egy utthatoit
tartalmazo vektor cme. A rendszer az uj vagoskot a kurrens nezopont-modell transzfor-
maci onak veti ala. A vagast a nez opontkoordinata-rendszerben hajtja vegre, ugy, hogy a
transzformalt sk pozitv oldalan levo pontokat hagyja meg, vagyis azokat az (x
s
, y
s
, z
s
, w
s
)
koordinat aj u pontokat, amelyekre A
s
x
s
+ B
s
y
s
+ C
s
z
s
+ D
s
w
s
0, ahol (A
s
, B
s
, C
s
, D
s
)
a nezopontba transzformalt vagosk egy utthat oit jeloli.
Az i-edik vag oskra torteno vag ast a glEnable(GL CLIP PLANEi); paranccsal en-
gedelyezhetj uk, es a glDisable(GL CLIP PLANEi); paranccsal tilthatjuk le.
5.3. Kepmez o-transzformacio
A vettesi transzformaci o utan a csonka g ulab ol es a teglatestb ol egyarant kocka lesz.
Ha a homogen koordinat akrol atter unk Descartesfele koordinat akra (x, y, z, w)
(x/w, y/w, z/w), ha w ,= 0 a kocka pontjaira x
n
[1., 1.], y
n
[1., 1.], z
n
[1., 1.]
teljes ul. Ezeket normalizalt koordinat aknak nevezz uk az OpenGL-ben.
A kepmezo a keperny o ablakanak az a teglalap alak u pixeltombje, amire rajzolunk. A
kepmez o oldalai az ablak oldalaival parhuzamosak. A kepmez o-transzformaci o az elobb
denialt kock at kepezi le arra a teglatestre, melynek egyik lapja a kepmez o. A kepmezot
a glViewport() paranccsal adhatjuk meg.
void glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
A keperny o ablakaban azt az ablak oldalaival parhuzamos teglalapot adja meg, mely-
ben a vegso kep megjelenik. Az (x, y) koordinatap arral a kepmez o bal also sarkat, a width
parameterrel a szelesseget, a height parameterrel pedig a magassag at kell megadnunk pi-
xelekben. A parameterek alapertelmezese (0, 0, winWidth, winHeight), ahol winWidth es
winHeigh az ablak szelesseget es magassag at jeloli.
A normalizalt koordinata-rendszerbeli kock at egy skal az assal arra a teglatestre kepezi
le a rendszer, melynek egy lapja a kepmezo, a ra meroleges el hossza pedig 1. Az gy
kapott koordinat akat ablakkoordinat aknak nevezz uk. Az ablakkoordinatak is terbeliek, a
rendszer ebben vegzi el a lathat osagi vizsgalatokat. Az ablakkoordinat ak z
a
komponense
38
alapertelmezes szerint a [0., 1.] intervallumon valtozik. Ezt az intervallumot a glDep-
thRange() paranccsal sz ukthetj uk.
void glDepthRange (GLclamped near, GLclamped far);
Az ablakkoordinat ak z
a
komponensenek minimalis es maximalis erteket rhatjuk
elo. A megadott ertekeket a rendszer a [0., 1.] intervallumra levagja, ami egyben az
alapertelmezes is.
A kepmezo-transzform acio matrixat nem lehet explicite megadni, es nincs szam ara
verem fenntartva.
5.4. A transzformaci os matrixok kezelese
A transzformaci os matrixok letrehoz asa, manipulal asa elott a glMatrixMode() paranc-
csal meg kell adnunk, hogy a m uveletek melyik transzformaci ora vonatkozzanak. Az gy
kivalasztott matrixot kurrensnek nevezz uk.
void glMatrixMode (GLenum mode);
Segtsegevel beallthatjuk, hogy melyik transzformaci ot akarjuk modostani. A mode
parameter lehetseges ertekei: GL MODELVIEW, GL PROJECTION, GL TEXTURE,
alapertelmezese GL MODELVIEW. A kurrens matrix alaperteke mindharom modban az
egysegm atrix.
void glLoadIdentity (void);
A kurrens matrixot az egysegm atrixszal fel ulrja. Ez a parancs azert fontos, mert a
transzformaci os matrixokat eloallto OpenGL parancsok mindig megszorozzak a kurrens
matrixot, tehat uj transzformacio megadas anal celszer u elobb az egysegmatrixot betolteni.
A felhasznalonak lehetosege van sajat matrixok megadas ara a nez opontba transz-
formal ashoz, a modelltranszformaci ohoz es a vettesi transzformaci ohoz, vagyis nem kell
feltetlen ul az ilyen cel u OpenGL parancsokat hasznalni. A felhasznal o altal letrehozott
4 4-es matrixokat egy 16 elem u vektorban kell atadni, tehat a matrixot vektorr a kell
konvert alni, megpedig a C nyelv konvenci ojaval ellentetben oszlopfolytonosan.
_

_
m
0
m
4
m
8
m
12
m
1
m
5
m
9
m
13
m
2
m
6
m
10
m
14
m
3
m
7
m
11
m
15
_

_
A konvert alt matrixokat a glLoadMatrix() es glMultMatrix() parancsokkal tudjuk
beilleszteni az OpenGL transzformacios lancaba. A 4 4-es val os elem u matrixokkal
tetszoleges terbeli projektv transzformaciok lerhat ok, nemcsak az OpenGL parancsok
altal felkn alt legfeljebb an modelltranszformaci ok.
void glLoadMatrixfd (const TYPE *m);
Az m vektorban tarolt matrixszal fel ulrja a kurrens matrixot.
39
void glMultMatrixfd (const TYPE *m);
Az m vektorban tarolt matrixszal jobbrol megszorozza a kurrens matrixot.
Az OpenGL ket vermet (stack) tart karban a transzformacios matrixokkal kapcsolatos
manipulaci ok megkonnytesere. Egyet az egyestett nez opont-modell transzformaci ok, egy
masikat a vettesi transzformaciok szam ara. A nezopont-modell transzformaciok verme
legalabb 32 db 44-es matrix tarolas ara alkalmas, az implement aci obeli pontos szamot a
glGetIntegerv() parancs GL MAX MODELVIEW STACK DEPTH parameterrel valo
meghv asaval kapjuk meg. A vettesi matrixok verme legalabb 2 db 4 4-es matrix
tarol asara alkalmas, pontos meretet a GL MAX PROJECTION STACK DEPTH pa-
rameterrel kiadott glGetIntegerv() paranccsal kapjuk meg.
A glMatrixMode(GL MODELVIEW) parancs a nez opont-modell transzformaci os
verem legfelso elemet teszi kurrensse, a glMatrixMode(GL PROJECTION) pedig a
vettesi matrixok vermenek legfelso elemet.
Minden matrixm uveletet a kurrens matrixszal hajt vegre a rendszer, tehat a glLoadI-
dentity() es glLoadMatrix() ezt rja fel ul; a glMultMatrix() es a transzformaci okat
beallt o OpenGL parancsok (pl. glRotate*(), glFrustum()) ezt szorozza meg (jobbrol!).
A vermek hasznalat at ket parancs teszi lehetove: a glPushMatrix() es a glPopMa-
trix(). Ezek mindig a glMatrixMode() paranccsal bealltott vermet manipulalj ak.
void glPushMatrix (void);
A glMatrixMode() paranccsal bealltott kurrens verem minden elemet egy szinttel
lentebb tolja. A legfelso (a kurrens) matrix a masodik matrix masolata lesz, vagyis a
legfelso ket matrix elemei megegyeznek. A megengedettnel tobb matrix eseten a glMa-
trixMode() parancs kiadasa hibat eredmenyez.
void glPopMatrix (void);
A glMatrixMode() paranccsal bealltott kurrens verem legfelso elemet eldobja, es
minden tov abbi elemet egy szinttel fentebb tol. A legfelso (a kurrens) matrix a korabban
a masodik szinten lev o matrix lesz. Ha a verem csak egy matrixot tartalmaz, akkor a
glPopMatrix() parancs kiadasa hibat eredmenyez.
40
6. fejezet
Megvilagtas
A megvilagtas modellezesenek fontos szerepe van a valoszer u kepek eloalltas aban,
segtsegevel jobban erzekeltetheto a melyseg es a terbeliseg. A szamt ogepi grakaban
hasznalt megvilagt asi szamt asok altal aban nem valamely zikai folyamat ler asai, ha-
nem tapasztalati uton eloalltott kepletek, melyekr ol az idok soran bebizonyosodott, hogy
eleg val oszer u latv anyt biztostanak.
Az OpenGL csak a cs ucspontokban szamtja ki a sznt, a cs ucspontok altal denialt
alakzatok (pl. szakasz, poligon) tobbi pontjaban az arnyalasi modelltol f uggoen (lasd a 4.2.
szakaszt) vagy a cs ucspontokban kiszamtott ertekek linearis interpolacioj aval hatarozza
meg, vagy valamely cs ucspont sznet hasznalja. Egy cs ucspont szne nem mas, mint a
pontb ol a nezopontba (a szembe) eljuto feny szne, amit a cs ucspontot tartalmazo objek-
tum anyaganak tulajdonsagai, az abr azolt terreszben uralkodo fenyviszonyok, tov abba az
abr azolt alakzatok optikai kolcs onhatasai hataroznak meg. Az OpenGL viszonylag egy-
szer u modellt alkalmaz, de meg gy is eleg sok lehetoseg unk van igenyes, valoszer u kepek
letrehoz asara.
Az abrazoland o terreszben uralkodo fenyviszonyok leras ara tobb feny osszetevot vesz
gyelembe a rendszer.
Az abr azolando objektumok altal kibocsatott feny, melyre nincsenek hatassal a
fenyforrasok.
A kornyezeti feny (ambient light) az abr azoland o terreszben minden utt jelen levo,
alland o intenzit as u feny, melynek forrasa, iranya nem ismert (gondoljunk olyan nap-
pali fenyre, amikor a nap a felhok mogott van). A terreszben jelen levo kornye-
zeti feny ket reszbol tevodik ossze. Egyreszt a terben a fenyforr asoktol f uggetlen ul
(azokra vissza nem vezethet o) jelen lev o kornyezeti fenyb ol ezt globalis kornye-
zeti fenynek is nevezik , masreszt a fenyforrasokb ol szarmazo (pl. tobbsz oros
t ukr ozodesek utjan keletkezo) kornyezeti fenyb ol, amit a fenyforr asok kornyezeti
fenykomponensenek nevez unk.
A szort fenynek (diuse light) van iranya, mindig valamelyik fenyforrasb ol jon.
Fo jellemzoje, hogy az objektumokkal utkozve minden iranyba azonos modon es
mertekben ver odik vissza, tehat teljesen mindegy, hogy milyen iranyb ol nezz uk
az objektumokat, a hatas csak a fenyforr astol, az anyagtulajdonsagokt ol es a
cs ucspontbeli normalist ol f ugg.
41
A t ukr ozott fenynek (specular light) is van iranya es forrasa, es hatasa nemcsak az
anyagtulajdonsagokt ol es a cs ucspontbeli normalist ol, hanem a nez oponttol is f ugg.
Gondoljunk egy sima fel ulet u femgombre, amit eros, koncentr alt fennyel vilagtunk
meg. Megfelelo szogb ol nezve egy fenyes (tobbnyire feher) foltot latunk, melynek
merete es helye a nezopontt ol f ugg, fej unket mozgatva a folt is mozog, mgnem
elt unik.
Az objektumok anyag anak optikai tulajdonsagainal megadhatjuk az objektum altal ki-
bocsatott fenyt, tovabb a azt, hogy az anyag milyen mertekben veri vissza a kornyezeti, a
szort es a t ukroz ott fenyt. Az utobbi harom, az anyagra jellemzo konstansok, az un. viss-
zaverodesi egy utthatok. A megvilagtasnak es az objektumok optikai tulajdonsagainak
a terbeliseg erzekelteteseben jatszott szerepet illusztralja a 6.1. abra.
6.1. abra. Gomb kepei k ul onboz o feny osszetevok gyelembe vetelevel: a) megvilagt as
nelk ul; b) kornyezeti fennyel es szort visszaverodessel; c) kornyezeti fennyel es t ukr oz o
visszaverodessel
Nincs lehetoseg a fenytores, az alakzatok optikai kolcs onhatas anak (arnyekol as, objek-
tumok t ukroz odese egymason) es fel uleti erdesseg modellezesere.
Az OpenGL-ben a k ul onboz o tpus u fenyeket, a fenyvisszaver o kepesseget jellemzo
konstansokat RGBA komponenseikkel kell megadni, vagyis vektorkent kezelendok (lasd
a 4. fejezetet). Ezen sznvektorokon a szokasos osszead as es skal arral val o szorzas
m uveleten kv ul egy specialis szorzast is ertelmez unk, amit *-gal jelol unk. A * m uvelet
az I = (I
R
, I
G
, I
B
, I
A
) es J = (J
R
, J
G
, J
B
, J
A
) vektorokhoz az I J = (I
R
J
R
, I
G
J
G
, I
B

J
B
, I
A
J
A
) vektort rendeli.
Az OpenGL-ben a megvilagtas befolyasol asara harom lehetoseg van:
fenyforrasok (fenyek) megadasa;
az anyagok optikai tulajdonsagainak elor asa;
megvilagtasi modell denial asa.
A tov abbiakban azt feltetelezz uk, hogy a szn megadasi modja RGBA, a sznindex
modra a fejezet vegen ter unk ki roviden.
42
6.1. Megvilagtasi modell
Az OpenGL megvilagtasi modelljenek harom osszetevoje van:
globalis kornyezeti feny,
a nez opont helye (vegesben vagy vegtelen tavolban van),
a poligonok felenk nezo es hats o oldalai egyforman, vagy k ul onb ozokeppen keze-
lendok.
A megvilagt asi modellt a glLightModel*() paranccsal adhatjuk meg.
void glLightModelif (GLenum pname, TYPE param);
pname erteke GL LIGHT MODEL LOCAL VIEWER es
GL LIGHT MODEL TWO SIDE lehet.
void glLightModelifv (GLenum pname, const TYPE *param);
pname erteke GL LIGHT MODEL AMBIENT, GL LIGHT MODEL LOCAL-
VIEWER es GL LIGHT MODEL TWO SIDE lehet.
A GL LIGHT MODEL AMBIENT parameterrel a globalis (fenyforr asoktol f uggetlen)
kornyezeti fenyt adhatjuk meg. Alapertelmezese (0.2, 0.2, 0.2, 1.), ami azt biztostja, hogy
lassunk valamit meg akkor is, ha nem adunk meg egyetlen fenyforr ast sem.
A GL LIGHT MODEL LOCAL VIEWER parameter a t ukr ozod o feny hatasara ke-
letkezo fenyes folt(ok) szamt asat befolyasolja. Ezen folt kiszamt as ahoz a cs ucspontbeli
normalis, a cs ucspontb ol a fenyforr asba, valamint a nezopontba mutato vektorok
sz uksegesek. Ha a nezopont vegtelen tavoli, vagyis a teret parhuzamosan vettj uk a
kepskra, akkor a cs ucspontokbol a nezopontba mutat o iranyok megegyeznek, ami lee-
gyszer usti a szamt asokat. A vegesben levo (val odi) nez opont hasznalataval valoszer ubb
eredmenyt kapunk, de a szamt asi igeny megno, mivel minden egyes cs ucspontra
ki kell szamtani a nezopontba mutato iranyt. A nez opont helyenek ilyen ertelm u
megvaltoztat asa nem jelenti a nez opont helyenek tenyleges megvaltoztat asat, ez
pusztan a megvilagt asi szamtasokra van hatassal.
A GL LIGHT MODEL LOCAL VIEWER parameter alapertelmezese GL FALSE,
mely esetben a rendszer a nez opontkoordinata-rendszer z tengelyenek (0., 0., 1., 0.) pontj at
hasznalja nezopontkent a t ukroz od o visszaver odes szamt as anal. A parameter GL TRUE
erteke eseten a nez opont a nezopontkoordinata-rendszer origoja lesz.
Mint azt a 3.3.3. pontban lattuk, az OpenGL a poligonok oldalait megk ul onb ozteti,
gy beszelhet unk felenk nezo es hatso poligonokrol (amelyek hatoldalat latjuk). Nylt
fel uletek (ezeket kozelto poligonhalo) eseten a nem felenk nezo poligonokat az eloz o
terminologia szerint a hats o lapokat is lathatjuk, de az ezekkel kapcsolatos megvilagt asi
szamtasok nem a valos agot t ukr ozo eredmenyre vezetnenek. Ezert lehetoseg van arra,
hogy a poligonokat ketoldal unak tekintve, mindket oldalt a megvilagt asnak megfeleloen
abr azoljunk. Ezt ugy erhetj uk el, hogy a GL LIGHT MODEL TWO SIDE parameternek
a GL TRUE erteket adjuk. Ekkor a rendszer a hats o lapok normalisait megfordtja (1.-
el megszorozza) es gy vegzi el a szamtasokat, ami mar helyes eredmenyre vezet. Ez
43
a lehetoseg a GL LIGHT MODEL TWO SIDE parameternek adott GL FALSE ertekkel
sz untethet o meg, ami egyben az alapertelmezes is.
Ahhoz, hogy az OpenGL megvilagtasi szamt asokat vegezzen, engedelyezni kell a
megvilagtast a glEnable(GL LIGHTING); paranccsal. A megvilagt ast a glDisa-
ble(GL LIGHTING); paranccsal tilthatjuk le. Alapertelmezes szerint a megvilagt as
nem engedelyezett, ilyen esetben a cs ucspont sznet a megadasakor kurrens rajzolasi szn
hatarozza meg.
6.2. Fenyforras megadasa
Az OpenGL-ben legalabb nyolc fenyforr ast adhatunk meg. Egy-egy fenyforrasnak sok
jellemzoje van, mint pl. szne, helye, iranya, es egyenkent lehet oket ki- es bekapcsolni.
void glLightif (GLenum light, GLenum pname, TYPE param);
void glLightifv (GLenum light, GLenum pname, const TYPE *param);
A light azonost oj u fenyforrast hozza letre. Minden OpenGL implement acioban le-
galabb 8 fenyforr ast lehet megadni, a pontos felso korl atot a GL MAX LIGHTS pa-
rameterrel meghvott glGetIntegerv() paranccsal kaphatjuk meg. A light parameter
erteke GL LIGHTi 0 i < GL MAX LIGHTS lehet. A f uggveny meghv asaval a light
fenyforr asnak a pname parameter erteket lehet megadni. A f uggveny elso alakjaval (a
skalar valtozattal) csak az egyetlen skal arral megadhato parameterek allthat ok be. A
a 6.1. tabl azat pname lehetseges ertekeit es azok alapertelmezeset tartalmazza. Ha az
alapertelmezes a GL LIGHT0 es a GL LIGHTi, (i > 0) fenyforr asokra k ulonb ozik, akkor
azokat k ul on felt untetj uk.
Az i-edik fenyforr ast a glEnable(GL LIGHTi); paranccsal lehet bekapcsolni, a glDi-
sable(GL LIGHTi); paranccsal pedig ki lehet kapcsolni.
6.2.1. A feny szne
A fenyforr as altal kibocsatott feny harom osszetev ob ol all: a kornyezeti feny (ambient
light, GL AMBIENT), a szort feny (diuse light, GL DIFFUSE) es a t ukr ozott feny (spe-
cular light, GL SPECULAR). Mindharom sznet az RGBA komponenseivel kell megadni.
A kornyezeti feny osszetevo azt adja meg, hogy az adott fenyforr as milyen mertekben
jarul hozza a terresz kornyezeti fenyehez. A fenyforras szort fenyenek a szne fejezi ki
leginkabb azt, amit mi a feny sznenek latunk. A t ukr oz ott fenyosszetev o befolyasolja
az objektumok kepen megjeleno fenyes folt sznet. A sima fel ulet u targyakon (pl. uveg)
tapasztalhatunk ilyen jelenseget, es a fenyes folt leggyakrabban feher szn unek latszik. A
valoszer u hatas erdekeben a GL DIFFUSE es GL SPECULAR parametereknek celszer u
ugyanazt az erteket adni.
6.2.2. A fenyforrasok helye
A GL POSITION parameterrel a fenyforr as helyet adhatjuk meg. Ez lehet vegesben lev o,
vagy vegtelen tavoli (w = 0) pont is. A vegtelen tavolban levo fenyforr asb ol kibocsatott
44
sugarak parhuzamosak ilyennek tekinthetok a valos agban a napsugarak , es a fenyforras
pozcioja ezek irany aval adhato meg. (Vigyazzunk, itt nem val odi homogen koordinat akkal
kell megadnunk a fenyforr as helyet, ugyanis a 1-gyel valo szorzas mas eredmenyt ad!)
A vegesben levo fenyforrasok sok rendszerben ezeket pontszer u fenyforr asnak is neve-
zik azonos intenzit as u fenyt bocsatanak ki minden iranyba. A rendszer a fenyforr as
helyet (akar vegesben, akar vegtelen tavolban van) a kurrens nezopont-modell tran-
szformaci oval a nez opontkoordinata-rendszerbe transzformalja, mivel a megvilagtassal
kapcsolatos szamt asokat itt vegzi el.
Vegesben lev o fenyforras eseten megadhato, hogy a fenyforrast ol tavolodva milyen
mertekben csokken a feny erossege, azaz hogyan tompul a feny (attenuation). A feny
tompulas at a
T = min
_
1
c
0
+ c
1
d + c
2
d
2
, 1
_
(6.1)
kifejezessel rja le a rendszer, ahol d a cs ucspontnak a fenyforrast ol mert
tavols aga, c
0
a tavols agtol f uggetlen (GL CONSTANT ATTENUATION), c
1
a
tavols aggal aranyos (GL LINEAR ATTENUATION), c
2
pedig a tavols ag negyzetevel
aranyos (GL QUADRATIC ATTENUATION ) egy utthatoja a feny tompulas anak.
Alapertelmezes szerint c
0
= 1., c
1
= c
2
= 0., azaz T = 1., vagyis a feny nem tompul.
Ezt az erteket hasznalja a rendszer vegtelen tavoli fenyforr as eseten is. A fenytompulas
a fenyforrasb ol kibocsatott feny mindharom osszetevojere (kornyezeti, szort, t ukr oz ott)
hat, de a globalis kornyezeti fenyre es az abr azolt objektumok altal kibocsatott fenyre
nem.
6.2.3. Reektor
Vegesben levo fenyforrasb ol reektort is letrehozhatunk. Ennek erdekeben a kibocsatott
fenysugarakat forgask up alak u erny ovel lehataroljuk. Reektor letrehoz as ahoz meg kell
adnunk a fenyk up tengelyenek iranyat (GL SPOT DIRECTION) es fel nylassz oget
(GL SPOT CUTOFF), tovabb a azt, hogy a feny intenzit asa hogyan csokken a k up ten-
gelyet ol a palast fele haladva. Reektor fenyforr asb ol csak akkor jut el feny a cs ucspontba,
ha a cs ucspontot es a fenyforrast osszekot o egyenes es a fenyk up tengelyenek szoge ki-
sebb, mint a k up fel nyl asszoge (lasd a 6.2. abrat), vagyis ha < , azaz cos > cos ,
mivel [0., 90.]. A szamtasok soran a
cos =
a l
[a[ [l[
kifejezest celszer u hasznalni, ahol a es l ertelmezese a 6.2. abra szerinti. Az I
l
fenyt
kibocsato reektornak f uggvenyeben bekovetkez o intenzitascs okkeneset az I
l
cos
r
kife-
jezessel rjuk le, ahol r (GL SPOT EXPONENT) nemnegatv szam. Tehat r = 0. eseten
a feny intenzitasa nem valtozik a k upon bel ul.
A GL SPOT CUTOFF parameterrel a fenyk up fel nyl asszoget adhatjuk meg fok-
ban. Az ertek vagy 180., vagy egy [0., 90.] intervallumbeli szam. Alapertelmezese 180.,
ami azt jelenti, hogy a fenyforras nem reektor, mivel minden iranyba bocsat ki fenyt.
A GL SPOT DIRECTION parameterrel a fenyk up a forgastengelyenek irany at ad-
hatjuk meg. Alapertelmezese (0., 0., 1.). A rendszer ezt az iranyt is transzformalja a
kurrens nezopont-modell transzformaci oval.
45
6.2. abra. Reektor fenyforr as
A GL SPOT EXPONENT parameterrel azt szabalyozzuk, hogy a feny mennyire kon-
centralt, vagyis milyen mertekben csokken az erossege a fenyk up tengelyetol a palast fele
haladva. Minel nagyobb ez az ertek, annal koncentr altabb a feny. Az alapertelmezes 0.,
ami azt jelenti, hogy a feny erossege nem csokken a palast fele haladva.
Az i-edik fenyforras reektor hatas at kifejezo skal ar
R
i
=
_

_
1, ha GL SPOT CUTOFF=180

, vagyis nem reektor;


0, ha > , vagyis a cs ucspont a fenyk upon kv ul van;
_
max
_
a l
[a[ [l[
, 0
__
r
egyebkent;
(6.2)
ahol a es l a 6.2. abra szerinti vektorok, r pedig az i-edik fenyforras
GL SPOT EXPONENT parametere.
6.3. Anyagtulajdonsagok
Az OpenGL az abr azolando objektumok anyaganak a kovetkez o optikai tulajdonsagait
veszi gyelembe:
az objektum altal kibocsatott fenyt;
az anyag milyen mertekben veri vissza a kornyezeti, a szort es a t ukroz ott fenyt;
a ragyogast.
Ezeket a tulajdonsagokat nagyreszt a glMaterial*() paranccsal adhatjuk meg. Az
anyagnak a k ul onboz o fenyeket visszaver o kepesseget kifejezo konstansokat RGBA kom-
ponenseikkel adhatjuk meg, vagyis pontosan ugy, mint magat a fenyt.
Fontos tudni, hogy amennyiben a megvilagt as engedelyezett, az alakzatok sznere a
rajzolasi sznnek nincs hatasa! Ilyen esetben az alakzatok sznet a fenyviszonyok es az
alakzatok optikai anyagtulajdonsagai hatarozzak meg.
void glMaterialif (GLenum face, GLenum pname, TYPE param);
void glMaterialifv (GLenum face, GLenum pname, const TYPE *param);
A megvilagt asi szamt asoknal hasznalt anyagtulajdonsagokat adhatjuk
meg segtsegevel. A face parameter erteke GL FRONT, GL BACK es
46
GL FRONT AND BACK lehet, alapertelmezese GL FRONT AND BACK. Ezzel
azt alltjuk be, hogy a pname parameterhez rendelt ertekek a poligonok felenk nez o
oldalara, hats o oldalukra, vagy mindkettore vonatkozzanak. Ez a parameter lehetove
teszi, hogy a poligonok k ul onboz o oldalai k ul onb ozo optikai tulajdonsag uak legyenek.
pname lehetseges ertekeit es a hozzajuk rendelheto ertekek alapertelmezeset a 6.2.
tabl azat tartalmazza. A f uggveny elso (skal ar) formaja csak a GL SHININESS parameter
megadasakor hasznalhat o.
A GL AMBIENT parameterrel azt adjuk meg, hogy az anyag milyen mertekben veri
vissza a kornyezeti fenyt. A visszavert kornyezeti feny I
a
k
a
, ahol I
a
az abr azolt terreszben
jelenlev o osszes kornyezeti feny, k
a
pedig az anyag kornyezeti feny visszaverodesi egy utt-
hatoja.
A GL DIFFUSE parameterrel azt szabalyozzuk, hogy a fel ulet milyen mertekben veri
vissza a cs ucspontba eljuto szort fenyt. A visszaveres merteke ezen fel uleti konstanson
kv ul a cs ucspontbeli normalisnak es a cs ucspontbol a fenyforrasba mutato iranynak a
szogetol is f ugg. Minel kisebb ez a szog, annal nagyobb a visszaverodes. A pontos oss-
zef ugges
D = max
_
l n
[l[ [n[
, 0
_
I
d
k
d
(6.3)
ahol l a cs ucspontbol a fenyforr asba (GL POSITION) mutato vektor, n a cs ucspontbeli
normalis (cos = l n/ ([l[ [n[)), I
d
a cs ucspontba eljuto szort feny, k
d
pedig az anyag
szort visszaver odesi egy utthat oja. l, n es ertelmezese a 6.3. abra szerinti.
6.3. abra. Szort visszaverodes
Minden fenykomponensnel es visszaver odesi egy utthat onal megadunk alfa (A) erteket
is, a rendszer azonban csak az anyagtulajdonsag GL DIFFUSE parameterenel mega-
dott alfa erteket rendeli a cs ucsponthoz, az osszes tobbit gyelmen kv ul hagyja. A
GL DIFFUSE parameternel megadott fenyvisszaveresi konstans jatssza a legnagyobb sze-
repet a fel ulet sznenek kialakt asaban.
Mg a szort visszaver odes merteke f ugg a fenyforr as es a fel ulet kolcs onos helyzetet ol,
a visszavert kornyezeti feny ettol f uggetlen.
A val os agban az anyagok kornyezeti es szort visszaver odesi egy utthatoja altalaban
megegyezik, ezert az OpenGL lehetoseget biztost ezek egyidej u megadas ara. Erre szolgal
a GL AMBIENT AND DIFFUSE parameter.
A kornyezeti es szort fenyek visszaverodesevel ellentetben a szembe eljuto t ukr ozott
visszaverodes f ugg attol is, hogy honnan nezz uk az objektumokat. Ezen kv ul szerepet
47
jatszik meg a cs ucspontbeli normalis, a fenyforr as pozci oja, az anyag t ukroz ott vissza-
verodesi egy utthat oja es az anyag ragyog asi tenyez oje.
6.4. abra. T ukr ozott visszaver odes
A 6.4. abra jeloleseit hasznalva, a szembe eljuto t ukr ozott feny
S =
_
_
_
0, ha l n 0
max
__
s n
[s[ [n[
_
s
, 0
_
I
s
k
s
, egyebkent
(6.4)
ahol s = l/ [l[ + v/ [v[, I
s
a cs ucspontba eljuto t ukroz ott feny, k
s
az anyag t ukroz o
visszaverodesi egy utthatoja (GL SPECULAR), s pedig az anyag ragyog asi kitevoje
(GL SHININESS).
Az anyag t ukroz ott visszaverodesi egy utthatoj at a GL SPECULAR parameterrel, a
ragyogasi kitevot pedig a GL SHININESS-el adhatjuk meg. Az utobbi a [0., 128.] inter-
vallumon valtozhat. Minel nagyobb ez a kitevo, a fenyes ter ulet annal kisebb es ragyog obb
(jobban fokuszalt a feny).
A GL EMISSION parameterrel az objektum altal kibocsatott fenyt adhatjuk meg.
Ezt a lehetoseget altal aban lamp ak, vagy mas fenyforrasok modellezesehez hasznaljuk.
Ilyenkor celszer u meg az adott objektumban egy fenyforr ast is letrehoznunk a vilagt otest
hatas elerese erdekeben.
6.4. Az anyagtulajdonsagok valtoztatasa
Egy-egy anyagtulajdonsag mindaddig ervenyben van, mg meg nem valtoztatjuk. A
valtoztat as tulajdonsagonkent tortenik. Ezt megtehetj uk az elozoekben ismertetett gl-
Material*() paranccsal, de arra is lehetoseg van, hogy valamely anyagtulajdonsagot a
rajzolasi sznhez kapcsoljunk, amivel azt erj uk el, hogy az adott anyagtulajdonsag a raj-
zolasi sznnek (glColor*()) megfeleloen fog valtozni. Ezzel a programunk hatekonys agat
novelhetj uk.
void glColorMaterial (GLenum face, GLenum mode);
A poligonok face parameterrel megadott oldalanak a mode parameterrel ki-
jelolt tulajdonsag at a kurrens rajzolasi sznhez kapcsolja. A kurrens rajzolasi szn
48
megvaltoztat asa (glColor*()) a mode anyagtulajdonsag automatikus valtoztatas at
eredmenyezi. A face erteke GL FRONT, GL BACK es GL FRONT AND BACK le-
het, alapertelmezes GL FRONT AND BACK. A mode parameter a GL AMBIENT,
GL DIFFUSE, GL AMBIENT AND DIFFUSE, GL SPECULAR es GL EMISSION
ertekeket veheti fel, alapertelmezes a GL AMBIENT AND DIFFUSE.
A glColorMaterial() parancs kiadasa utan engedelyezn unk kell a hozzakapcsolast
a glEnable(GL COLOR MATERIAL) paranccsal, es ha mar nem akarjuk hasznalni az
osszekapcsolast, akkor a glDisable(GL COLOR MATERIAL) paranccsal le kell tilta-
nunk. A glColorMaterial() parancsot akkor hasznaljuk, ha egyetlen anyagtulajdonsagot
kell gyakran sok cs ucspontban valtoztatnunk, egyebkent a glMaterial*() parancs
hasznalata elony osebb.
6.5. A cs ucspontok sznenek meghatarozasa meg-
vilagtas eseten
n fenyforrast feltetelezve a cs ucspontokba eljuto V feny
V = I
e
+I
g
k
a
+
n1

i=0
T
i
R
i
(A
i
+D
i
+S
i
) (6.5)
alakban rhato fel, ahol
I
e
az objektum altal kibocsatott feny;
I
g
a globalis kornyezeti feny;
T
i
az i-edik fenyforras tompulasa a (6.1) osszef ugges szerint;
R
i
az i-edik fenyforr as reektor egy utthat oja a (6.2) osszef ugges szerint;
A
i
= I
ai
k
a
az i-edik fenyforr as kornyezeti fenykomponensenek es az anyag kornyezeti
feny visszaver odesi egy utthatoj anak a szorzata;
D
i
az i-edik fenyforr asbol a szembe eljuto szort feny a (6.3) osszef ugges szerint;
S
i
az i-edik fenyforrasb ol a szembe eljuto t ukroz ott feny a (6.4) osszef ugges szerint.
Ezen szamtasok utan a rendszer a kapott RGBA ertekeket a [0., 1.] intervallumra levagja.
Ahhoz tehat, hogy az objektumok megvilagtas szerint legyenek abrazolva denialni
kell egy megvilagtasi modellt (glLightModel()); engedelyezni kell a megvilagtast
(glEnable(GL LIGHTING)); fenyforr ast kell letrehozni (glLight*()) es azt be kell kap-
csolni (glEnable(GL LIGHTi)); anyagtulajdonsagokat kell megadni (glMaterial*()).
6.6. Megvilagtas sznindex modban
Sznindex modban az RGBA komponensekkel megadott megvilagt asi parametereknek
vagy nincs hatasuk, vagy specialisan ertelmezettek. Ha csak lehet, ker ulj uk el a meg-
vilagtas hasznalatat sznindex modban. Az RGBA formaban megadott fenyforrassal kap-
csolatos parameterek koz ul csak a GL DIFFUSE es GL SPECULAR ertekeket hasznalja a
rendszer. Az i-edik fenyforras szort, illetve t ukr ozott fenykomponenset sznindex modban
a
d
ci
= 0.3R(d
l
) + 0.59G(d
l
) + 0.11B(d
l
)
s
ci
= 0.3R(s
l
) + 0.59G(s
l
) + 0.11B(s
l
)
49
osszef uggesekkel szamtja ki a rendszer, ahol R(n), G(n), B(n) a sznpaletta n-edik
sznenek RGB komponenseit jeloli. A 0.3, 0.59, 0.11 egy utthat ok az emberi szem
sznerzekel o kepessegenek felelnek meg, vagyis a szem a zold sznre a legerzekenyebb es a
kekre a legkevesbe. A
void glMaterialifv (GLenum face, GL COLOR INDEXES, const TYPE *param);
paranccsal az anyag sznenek kornyezeti, szort es t ukroz ott osszetev ojet, pontosab-
ban azok sznindexeit adhatjuk meg. Alapertelmezes szerint a kornyezeti komponens
sznindexe 0., a szort es a t ukr oz ott komponense 1. A glColorMaterial() parancsnak
nincs hatasa sznindex modban.
Mint az varhat o, a cs ucspontbol a szembe eljuto feny sznenek kiszamtasa is maskepp
tortenik, mint RGBA modban. A (6.5) kifejezesben a kibocsatott es a globalis kornyezeti
feny (I
e
es I
g
) 0, a fenytompul ast es a fenyszor o hatast (T
i
, R
i
) ugyan ugy szamtja ki
a rendszer, mint RGBA modban. A fenyforrasoknak nincs kornyezeti feny komponense
(A
i
= 0); a D
i
kiszamt asara hasznalt (6.3) kifejezesben I
d
k
d
-t helyettests uk d
ci
-vel,
az S
i
szamtas ahoz hasznalt (6.4) kifejezesben I
s
k
s
-t s
ci
-vel. Az gy modostott szort es
t ukr ozott osszetev ok osszeget jelolj uk d-vel illetve s-el.
s
0
= min s, 1
c
0
= a
m
+ d (1 s
0
) (d
m
a
m
) + s
0
(s
m
a
m
)
ahol a
m
, d
m
, s
m
az anyagnak a GL COLOR INDEXES parameterrel megadott kornyezeti,
szort es t ukr oz ott feny sznenek indexe. A cs ucspont vegso szne
c = min c
0
, s
m

Az gy kapott erteket a rendszer egesz szamma konvert alja, majd bitenkenti es (AND)
m uveletbe hozza a 2
n
1 ertekkel, ahol n a sznindex-puerben az egy szn szam ara
fenntartott bitek szama.
50
6.1. tabl azat. A fenyforrast meghatarozo parameterek
pname alapertelmezese jelentese
GL AMBIENT (0., 0., 0., 1.) a feny kornyezeti
osszetev ojenek RGBA
komponensei
GL DIFFUSE GL LIGHT0
eseten (1., 1., 1., 1.)
egyebkent
(0., 0., 0., 1.)
a feny szort ossze-
tevojenek RGBA
komponensei
GL SPECULAR GL LIGHT0
eseten (1., 1., 1., 1.)
egyebkent
(0., 0., 0., 1.)
a feny t ukroz o oss-
zetevojenek RGBA
komponensei
GL POSITION (0., 0., 1., 0.) a fenyforr as helye
(x, y, z, w)
GL SPOT DIRECTION (0., 0., 1.) a reektor (x, y, z)
iranya
GL SPOT EXPONENT 0. a reektor
fenyerejenek
csokkenese
GL SPOT CUTOFF 180. a reektor
forgask upjanak fel
nyl asszoge
GL CONSTANT ATTENUATION 1. a feny tompulas anak
konstans tagja
GL LINEAR ATTENUATION 0. a fenytompulas
linearis tagjanak
egy utthat oja
GL QUADRATIC ATTENUATION 0. a fenytompulas
masodfok u tagjanak
egy utthat oja
51
6.2. tablazat. Az anyagtulajdonsag parameterei
pname alapertelmezes jelentes
GL AMBIENT (0.2, 0.2, 0.2, 1.) kornyezeti feny vissza-
verodesi egy utthat o
GL DIFFUSE (0.8, 0.8, 0.8, 1.) szort feny visszaverodesi
egy utthat o
GL AMBIENT AND DIFFUSE (0.8, 0.8, 0.8, 1.) kornyezeti es szort feny viss-
zaverodesi egy utthat o
GL SPECULAR (0., 0., 0., 1.) t ukr ozo feny visszaverodesi
egy utthat o
GL SHININESS 0. ragyogas
GL EMISSION (0., 0., 0., 1.) kibocsatott feny
GL COLOR INDEXES (0, 1, 1) kornyezeti, szort es t ukr ozo
visszaverodes sznindexe
52
7. fejezet
Display-lista
A display-lista OpenGL parancsok csoportja, melyet kes obbi vegrehajtas celj abol
tarolunk. A display-lista meghv asakor a benne tarolt parancsokat abban a sorrendben
hajtja vegre a rendszer, ahogy korabban a listara ker ultek. Nehany a kes obbiekben felso-
rolt kivetelt ol eltekintve, az OpenGL parancsok akar listaban tarolhat ok, akar azonnal
vegrehajthatok. Ez a ket lehetoseg tetszolegesen kombinalhat o egy programon bel ul.
A display-lista lehetoseget elsosorban a halozati kornyezetben futtatott programok
optimalis m ukodese erdekeben hoztak letre. Az optimalizalas modja es merteke imple-
mentaci of ugg o, az azonban garant alt, hogy a display-list ak hasznalata sohasem csokken-
theti a teljestmenyt, meg akkor sem, ha egyetlen gepen dolgozunk a kliens es a szerver
gep megegyezik , ugyanis a rendszer, ha csak lehetseges, a grakus hardver igenyeinek
megfeleloen tarolja a lista parancsait. A display-lista parancs cache, nem pedig dinamikus
adatbazis, ennek kovetkezteben tartalma utolag nem modosthato es a felhasznal o nem
fer hozza a listan tarolt adatokhoz.
Arra nincsen garancia, hogy minden OpenGL implementaci o optimalizalja a display-
lista m ukodeset, de az biztos, hogy egyetlen implementaci oban sem kevesbe hatekony
a display-list an tarolt parancsok vegrehajtasa, mint ugyanazok kozvetlen modban valo
vegrehajtasa. Azt azonban gyelembe kell venn unk, hogy a display-listak hasznalata
nemi adminisztracioval jar, ezert t ul rovid listak hasznalata eseten a lista vegrehajtasab ol
szarmaz o elony elhanyagolhat ova valhat az adminisztracio okozta plusz munk ahoz kepest.
Az alabbiakban az alkalmaz asok neh any optimalizalasi lehetoseget soroljuk fel, vagyis
azt, hogy milyen esetekben celszer u display-listakat hasznalni.
Matrixm uveletek (lasd az 5. fejezet). Mivel a matrixok kiszamt asa idoigenyes lehet,
tov abba altal aban a matrixok inverzere is sz ukseg van.
Raszteres bitterkepek es kepek (lasd a 9. fejezet). Az a forma, ahogyan megad-
juk a raszteres adatokat, altal aban nem egyezik meg a grakus hardver szam ara
sz ukseges formatummal. A display-lista lefordtasa soran az OpenGL val oszn uleg
a hardver szamara optimalis formatumban tarolja, ezert a lista vegrehajtasa sokkal
hatekonyabb lehet, mint a parancsok kozvetlen kiadasa.
Fenyforrasok, anyagtulajdonsagok, megvilagt asi modell (lasd a 6. fejezetet).
Text ur ak (lasd a 13. fejezetet).
53
Poligonok kitoltese mintaval.
Kod, atmoszferikus hatasok (lasd a 8.3. szakaszt).
Opcionalis vag oskok hasznalata (lasd az 5.2. szakaszt).
7.1. Display-lista letrehozasa, vegrehajtasa
Display-listat a glNewList() es glEndList() parancsok kozott kiadott OpenGL paran-
csokkal lehet letrehozni. Egyszerre csak egy lista hozhato letre. A glEndList() parancs
kiadasa OpenGL hibat eredmenyez, ha nem elozi meg lezaratlan glNewList() parancs.
void glNewList (GLenum list, GLenum mode);
Display-lista kezdetet jeloli meg. Az ezt kovet o OpenGL parancsok a kes obbiekben
felsorolando kivetelekt ol eltekintve a listara ker ulnek mindaddig, amg a glEndList()
parancsot ki nem adjuk. A glNewList() es glEndList() zar ojelp ar koz ott kiadott listan
nem tarolhato parancsokat kozvetlen ul vegrehajtja a rendszer a lista letrehoz asa soran.
A list parameter pozitv egesz szam lehet, mely a lista globalis azonost oja lesz. Ha
mar letezik ilyen azonost oj u lista, akkor azt a rendszer barmifele gyelmeztetes nelk ul
fel ulrja. A mode parameter erteke GL COMPILE vagy GL COMPILE AND EXECUTE
lehet. GL COMPILE eseten a parancsok nem ker ulnek vegrehajtasra mikozben a listara
ker ulnek, tehat csak a display-list anak megfelelo formatumra konvert alja a rendszer a
parancsokat, es tarolja oket. GL COMPILE AND EXECUTE eseten a konvert alas es
tarol as mellet a rendszer vegre is hajtja a parancsokat ugy, mintha kozvetlen vegrehajtasi
modban adtuk volna ki azokat.
void glEndList (void);
A display-lista veget jeloli meg, kiadas at egy lezaratlan glNewList() parancsnak kell
megeloznie.
7.2. A display-lista tartalma
A listan a kifejezesek, parameterek erteke ker ul tarol asra, nem pedig a parametereket
tartalmazo vektor cme, vagy a pl. transzformaci os matrixok eseten maga a matrix,
es nem a kiszamtas ahoz sz ukseges adatok. A lefordtott display-listat a szerver gepen
(amin a kep megjelenik) tarolja a rendszer, ezert azok a parancsok, amelyek eredmenye
a kliens (a parancsot kiado gep) allapotat ol f ugg, nem tarolhatok display-listan. A lista
vegrehajtasakor ugyanis a szervernek nem allnak rendelkezesere a sz ukseges adatok. A
listan nem tarolhato parancsok altal aban vagy valamilyen erteket adnak vissza (glGet*(),
glIs*()), vagy a klienssel kapcsolatos informaciot ol f uggnek (pl. glFlush(), glFinish()),
vagy a kliens altal kezelt allapotvaltoz o erteket valtoztatj ak meg. A kovetkez o parancsok
nem tarolhatok display-list an:
54
glDeleteLists() glGenLists() glPixelStore()
glFeedbackBuer() glGet*() glReadPixels()
glFinish() glIsEnable() glRenderMode()
glFlush() glIsList() glSelectBuer()
A display-list ak tetszolegesen sokszor vegrehajthatok, tovabb a display-list ak
vegrehajtasa es kozvetlen hatas u parancsok kiadasa tetszes szerint kombin alhat o.
void glCallList (GLuint list);
A list azonost oj u display-listat hajtja vegre. A lista parancsai a listara ker ules sor-
rendjeben hajtodnak vegre. Ha nem letezik list azonost oj u display-lista, akkor nem
tortenik semmi.
A display-list ak tartalmazhatnak olyan parancsokat, melyek megvaltoztatjak a rend-
szer globalis valtoz oinak ertekeit (pl. attrib utumok, transzformaci os matrixok). Ezek a
valtoztat asok termeszetesen a lista vegrehajtasa utan is ervenyben maradnak, ha nem
tesz unk semmilyen ovintezkedest. Ha azt akarjuk, hogy az ilyen jelleg u valtoz asok csak
a display-lista vegrehajtas anak idejere korl atozodjanak, akkor az attrib utumokat, illetve
a transzformaci os matrixokat a megfelelo verem hasznalat aval a lista vegrehajtasa elott
ments uk el (glPushAttrib(), glPushMatrix()), majd a lista vegrehajtas utan alltsuk
vissza (glPopAttrib(), glPopMatrix()).
A display-list akat programunkban barhol hasznalhatjuk, mivel index uk (azonost ojuk)
globalis es egyedi. Nincs lehetoseg azonban a listak tartalmanak adatfajlba mentesere, gy
termeszetesen beolvasas ara sem. A display-lista hasznalata tehat a program futasanak
idejere korlatozott.
7.3. Hierarchikus diplay-listak
A display-listak tartalmazhatnak display-lista hvasokat, amivel listak hierarchikus rends-
zere hozhato letre. Ez hasznos lehet pl. ismetl odo reszeket tartalmazo objektumok
abr azolasakor. Az ilyen jelleg u hv asi lancnak van korl atja, ez barmely implementaci oban
legalabb 64, a pontos szamot a GL MAX LIST NESTING parameterrel kiadott glGe-
tIntegerv() paranccsal kaphatjuk meg. Nem sz ukseges, hogy egy lista a meghv asakor
mar letezzen. Egy nem letezo lista meghv asanak semmilyen kovetkezmenye sincs. A
hierarchikus display-listak segtsegevel kozvetve modosthato egy lista tartalma, miutan a
meghvott listat barmikor fel ulrhatjuk, azaz ugyanazzal az azonost oval uj tartalm u listat
hozhatunk letre, ami altal a hvo lista tartalma (hatasa) is megvaltozik. Ez a modszer
semmikepp sem biztost optimalis memoria-felhaszn alast es maximalis hatekonysagot, de
adott esetben elfogadhato, hasznos megoldas lehet.
7.4. Display-listak es indexek kezelese
A display-list ak indexe tetszoleges pozitv egesz szam lehet. A veletlen fel ulr as elker ulese
erdekeben a glGetLists() paranccsal kerhet unk a rendszertol egymast kovet o, meg nem
hasznalt azonost okat, vagy a glIsList() paranccsal lekerdezhetj uk, hogy egy adott azo-
nost o hasznalatban van-e.
55
GLuint glGenLists (GLsizei range);
range darab egymast kovet o, hasznalaton kv uli display-lista indexet allokal. A viss-
zaadott ertek nulla, ha nem tudja a rendszer a megfelelo szam u indexet allokalni vagy
range = 0; egyebkent pedig a lefoglalt indextomb elso eleme. A lefoglalt indexekhez a
rendszer egy-egy ures display-list at hoz letre.
GLboolean glIsList (GLuint list);
Ez a parancs GL TRUE erteket ad vissza, ha list index u display-lista mar letezik (az
azonost o mar foglalt), egyebkent pedig a GL FALSE erteket.
A glDeleteLists() paranccsal egymast kovet o index u display-list akat tor olhet unk,
ami altal index uket felszabadtjuk.
void glDeleteLists (GLuint list, GLsizei range);
A list indextol kezdve range darab egymast kovet o index u display-listat tor ol. Nem
letez o listak torlesenek nincs semmilyen kovetkezmenye.
7.5. Tobb lista vegrehajtasa
Az OpenGL-ben hatekony mechanizmus van tobb display-lista egymas utani
vegrehajtas ara. Ehhez a display-lista indexeket egy tombbe kell tenni es a glCallLists()
parancsot kell kiadni. Kezenfekvo ezen lehetoseg hasznalata, ha az indexeknek valami-
lyen jelentes uk van, mint pl. karakterek eseten az ASCII kodoknak. Tobb karakterkeszlet
hasznalata eseten mindegyik display-list anak egy k ulon bazisindexet kell letrehozni. Ezt
a celt szolgalja a glListBase() parancs.
void glListBase (GLuint base);
Azt az eltolast (osetet) hozza letre, amit a rendszer a glCallLists() paranccsal
vegrehajtott display-lista indexeihez hozzaad a tenyleges index kiszamt asahoz. A display-
lista bazisanak kezdeti erteke 0. A baziserteknek nincs hatasa a glCallList() es glNew-
List() parancsok eredmenyere.
void glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
n darab display-list at hajt vegre. A vegrehajtando listak indexeit ugy szamtja ki,
hogy a list cmen kezdod o elojeles egesz ertekekhez hozzaadja a glListBase() paranccsal
letrehozott kurrens baziserteket.
A type parameterrel a list cmen kezdod o indexek adattpus at (meretet) kell megadni.
Ez a tpus altalaban az alabbi ertekek valamelyike: GL BYTE, GL UNSIGNED BYTE,
GL SHORT, GL UNSIGNED SHORT, GL INT, GL UNSIGNED INT, GL FLOAT. A
GL 2 BYTES, GL 3 BYTES, GL 4 BYTES ertekek is adhatok a tpusnak. Ebben az
esetben ket, harom vagy negy egymast koveto byte-ot tol el es ad ossze a rendszer a
display-lista oset kiszamt asahoz, az alabbi algoritmus szerint:
56
/* b= 2, 3, 4; a byte-ok 0, 1, 2, 3-al vannak szamozva a tombben */
offset = 0;
for(i = 0; i < b; i++)

offset = offset << 8;


offset += byte[i];

index = offset + listbase;


57
8. fejezet
Specialis optikai hatasok
Az itt targyaland o harom technik aval a kepek minosege javthat o, valoszer useg uk novel-
heto.
8.1.

Atlatszosag
Az RGBA sznkomponensek koz ul az alfa (A [0., 1.]) ertek az atl atsz osag model-
lezesere hasznalhato. Ezzel ugyanis azt rhatjuk elo, hogy az uj fragmentum szne milyen
mertekben vegy ulj on a pixel jelenlegi sznevel. Ha A = 1., akkor az uj szn teljesen el-
fedi (fel ulrja) a regit, tehat az uj szn tokeletesen fed; A = 0. eseten pedig egyaltalan
nem fed, azaz a pixel regi szne minden valtoztatas nelk ul megmarad. Minden kozb ulso
ertek azt eredmenyezi, hogy a pixel uj szne az uj fragmentum sznenek es a pixel regi
sznenek valamilyen kombin acioja lesz. Az alfa erteket tehat a legegyszer ubb a szn fedesi
kepessegenek felfogni.
Ha a sznvegytes engedelyezett, akkor a m uvelet a raszterizal as es fragmental as utan
zajlik le, tehat kozvetlen ul a pixelbe valo ras elott.
Az alfa ertekek az un. alfa tesztre is hasznalhatok, vagyis arra, hogy az alfa erteketol
f ugg oen egy uj fragmentumot elfogadjon vagy gyelmen kv ul hagyjon a megjelent o rend-
szer, lasd a 11.2. pontot.
Miutan sznindex modban nem adunk meg alfa ertekeket, az atl atszos agot csak RGBA
modban tudjuk modellezni.
Az OpenGL-ben az uj fragmentumot forrasnak (source), a neki megfelelo pixelt amire
lekepezi a rendszer pedig celnak nevezz uk. A forras es a cel sznenek vegytese erdekeben
engedelyezn unk kell ezt a lehetoseget a glEnable(GL BLEND) parancs kiadas aval, es
meg kell adnunk, hogy a rendszer a forras es cel szn osszetevoinek kombin alo tenyezoit
milyen modon szamtsa ki. Az egy utthat okat is RGBA komponenseikkel kell megadni
csak ugy, mint a fenyvisszaver o kepessegeket ler o konstansokat. A rendszer a vegytett
szn komponenseit az
s S +d D
osszef uggessel szamtja ki, ahol S = (S
R
, S
G
, S
B
, S
A
) az uj fragmentum (a forras) szne,
s = (s
R
, s
G
, s
B
, s
A
) annak kombinal o tenyez oje; D = (D
R
, D
G
, D
B
, D
A
) a pixel (a cel)
jelenlegi szne, d = (d
R
, d
G
, d
B
, d
A
) pedig annak kombinal o tenyez oje. A * karakter a 6.
fejezetben bevezetett vektorm uveletet jeloli.
58
A forras es cel kombin alo tenyez ojenek kiszamt asi modjat a glBlendFunc() paranc-
csal adhatjuk meg.
void glBlendFunc (GLenum sfactor, GLenum dfactor);
Az sfactor parameterrel az uj fragmentum (a forras) egy utthat ojanak, a dfactor pa-
rameterrel pedig az uj fragmentumnak megfelelo pixel sznkombin alashoz hasznalt egy utt-
hato kiszamt asi modjat rhatjuk elo. Az sfactor alapertelmezese GL ONE, a dfactore
pedig GL ZERO. Az sfactor es dfactor parameterek lehetseges ertekeit a a 8.1. tabl azat
tartalmazza.
8.1. tabl azat. Az atl atszos aghoz haznalhat o szimbolikus konstansok
konstans sf df a kiszamtott egy utthat o
GL ZERO + + (0, 0, 0, 0)
GL ONE + + (1, 1, 1, 1)
GL DST COLOR + (D
R
, D
G
, D
B
, D
A
)
GL SRC COLOR + (S
R
, S
G
, S
B
, S
A
)
GL ONE MINUS DST COLOR + (1 D
R
, 1 D
G
, 1 D
B
, 1 D
A
)
GL ONE MINUS SRC COLOR + (1 S
R
, 1 S
G
, 1 S
B
, 1 S
A
)
GL SRC ALPHA + + (S
A
, S
A
, S
A
, S
A
)
GL ONE MINUS SRC ALPHA + + (1 S
A
, 1 S
A
, 1 S
A
, 1 S
A
)
GL DST ALPHA + + (D
A
, D
A
, D
A
, D
A
)
GL ONE MINUS DST ALPHA + + (1 D
A
, 1 D
A
, 1 D
A
, 1 D
A
)
GL SRC ALPHA SATURATE + (m, m, m, 1); m = min(S
A,
1 D
A
)
A 8.1. tabl azatban szereplo forras es cel kombin alo tenyezok nem minden
parostas anak van ertelme, a felhasznal oi programok tobbnyire csak nehany parostast
hasznalnak. Az alabbiakban felsorolunk nehany jellemzo parostast. Felhvjuk a gyel-
met arra, hogy ezek koz ul neh any csak a forras alfa erteket hasznalja, vagyis abban az
esetben is alkalmazhat o, ha a kep pixeleihez az alfa erteket nem tarolja a grakus hardver.
Vegy uk gyelembe azt is, hogy ugyanaz a hatas tobbfelekeppen is elerheto.
Ket kep egyenl o mertek u vegyteset (felig az egyik, felig a masik) elerhetj uk pl.
ugy, hogy az sfactor parametert GL ONE-ra alltjuk, megrajzoljuk az elso kepet;
ezutan mind az sfactor, mind a dfactor parametereket GL SRC ALPHA-ra alltjuk
es A = 0.5 alfaval megrajzoljuk a masodik kepet. Ha az elso es masodik kepet
0.75 : 0.25 aranyban akarjuk vegyteni, akkor rajzoljuk meg az elso kepet ugy
mint az elobb, majd a masodik kepet sfactor = GL SRC ALPHA, dfactor =
GL ONE MINUS SRC ALPHA parameterekkel A = 0.25 ertek mellett. Ez a tpus u
vegytes a leggyakrabban hasznalt.
Harom k ul onboz o kep egyenl o arany u vegytesehez dfactor = GL ONE, sfactor
= GL SRC ALPHA parameterek mellett A = 0.33333 ertekkel rajzoljuk meg
mindharom kepet.
59
Ecsettel val o festes soran az ecsetvonasokkal fokozatosan tudjuk elfedni a hatter
sznet. Ennek modellezese erdekeben az sfactor = GL SRC ALPHA, dfactor =
GL ONE MINUS SRC ALPHA parameterekkel az ecsetvonas fedesenek megfelelo
(pl. 10%-os) alfa ertekkel rajzoljuk meg az ecset kepet. A valoszer useg fokozasa
erdekeben az ecset k ulonb oz o reszein valtoztathatjuk a fedest, az ecset kozepen
nagyobb, a szelein kisebb. Hasonlo technikaval tudunk radrt modellezni, ekkor a
rajzolas sznenek a hatter sznevel kell megegyeznie.
Az a sznkombin alasi szamtas, amikor az sfactor parameternek a GL DST COLOR
vagy GL ONE MINUS DST COLOR erteket adjuk, a dfactor parameternek pedig
a GL SRC COLOR vagy GL ONE MINUS SRC COLOR erteket, lehetove teszi a
sznkomponensenkenti szabalyoz ast. Ezt a hatast egyszer u sz ur o hasznalat aval is
elerhetj uk, ugyanis pl. a vor os komponenst 0.6-al, a zoldet 0.8-al a keket 0.4-el
megszorozva ugyanazt a hatast erj uk el, mintha a voros fenyt 40 %-al, a zoldet 20
%-al a keket 60 %-al csokkento sz ur ot alkalmazn ank.
Tegy uk fel, hogy egy atl atszatlan hatter elott harom k ul onb ozo mertekben atl atsz o,
egymast reszben eltakaro objektumot akarunk megrajzolni. Feltetelezz uk tov abba,
hogy a legtavolabbi objektum a mog otte levo szn 80 %-at, a kozeps o 40 %-at, a
legkozelebbi pedig 90 %-at engedi at. Ennek modellezese erdekeben a hatteret raj-
zoljuk meg az sfactor es dfactor parameterek alapertelmezese szerint, majd az sfac-
tor = GL SRC ALPHA, dfactor = GL ONE MINUS SRC ALPHA parameterek
mellett rajzoljuk meg a legtavolabbi objektumot A = 0.2, a kozeps ot A = 0.6 es a
legkozelebbit A = 0.1 alfa ertekkel.
Nem negysz og alak u raszterkepek hatasa erheto el azaltal, hogy a kep k ulonboz o
fragmentumaihoz k ul onb ozo alfa erteket rendel unk, pl. 0-at minden nem lathat o es
1-et minden lathatohoz. Ezt az eljarast billboardingnak is szoktak nevezni. Egy
terbeli fa kepenek ill uzioj at kelthetj uk azaltal, hogy pl. ket egymasra meroleges
skbeli negyszogre, az elozo modon megadott fakorona mintazat u text ur at (egy
foli at, melyre lombkorona mint at raktunk) tesz unk. Ez sokkal gyorsabb, mintha
terbeli poligonnal kozeltenenk a lombkoronat es azt text ur aznank.
Az atl atsz osag (fedes) modellezesi modja alapjan lathat o, hogy mas lesz az eredmeny
ha egymas kepet atfed o poligonokat a nez oponthoz kepesti tavols aguk szerint hatulr ol
elore, vagy elolr ol hatulra haladva jelent unk meg. Neh any poligon eseten a megje-
lentes sorrendjet konnyen meghatarozhatjuk, azonban sok poligonbol all o, vagy hely uket
valtoztat o objektumok, vagy a nez opontot valtoztato megjelentesek eseten a helyes
sorrend megallapt asa gyakorlatilag kivitelezhetetlen. Ezt a problem at az OpenGL
melysegpuerenek (z-puer) specialis hasznalataval oldhatjuk meg. Ha a lathat osag
szerinti abr azolas engedelyezett (glEnable(GL DEPTH TEST)), a rendszer fel ulrja a
melysegpuerban a pixel melyseget, ha az uj fragmentum kozelebb van a nez oponthoz,
mint a pixelen tarolt. Ez mindaddig helyes eredmenyt ad, mg nincsenek atl atsz o objektu-
mok.

Atlatsz o objektum eseten ugyanis, ha a rendszer a nezoponthoz kozelebbi fragmen-
tum melysegevel fel ulrja a z-puer megfelelo elemet, akkor egy kesobb megjelentendo
objektum, mely az atlatsz o objektum mog ott van nem fog latszani, mivel a nez oponttol
tavolabb van, mint a kor abban megjelentett atl atszo objektum. Ezt a problem at ugy
60
tudjuk megoldani, hogy az atlatsz o objektum rajzolasa elott a melysegpuert a glDepth-
Mask(GL FALSE) paranccsal csak olvashat ov a tessz uk, ami altal az atlatsz o objek-
tum megrajzolasa soran a tavols agokat ossze tudja hasonltani a rendszer, de nem tudja
fel ulrni a puert. A kovetkez o, nem atl atsz o objektum rajzolasa elott ujra rhat ov a kell
tenni a melysegpuert a glDepthMask(GL TRUE) paranccsal. (

Atlatsz o objektumok
rajzolasa elott ne felejts uk el letiltani a hatso lapok eltavoltas at!)
8.2. Simtas (antialiasing)
Raszteres grakus display-n szakaszt rajzolva azt tapasztaljuk, hogy a nem f uggoleges
vagy vzszintes szakaszok kepenek hatara toredezett, lepcsos lesz. Kivaltkepp gy van ez
a majdnem vzszintes es majdnem f uggoleges szakaszok eseten. Ezt a jelenseget angolul
aliasingnak, a jelenseg csokkentesere, a kep hatar anak kisimtas ara iranyul o technik akat
antialiasingnak nevezik.
Az OpenGL-ben hasznalt simtasi technika a pixelek fedettsegenek szamt as an alapul.
A szakaszok kepe minden esetben teglalap lesz. A rendszer kiszamtja ezen teglalapot
metszo pixelekre, hogy hanyad resz uk esik a teglalap kepere. Ezt a szamot nevezz uk
fedettsegi erteknek.
RGBA sznmegad asi mod eseten a rendszer a pixeleknek megfelelo fragmentumok alfa
erteket megszorozza a megfelelo fedettsegi ertekkel. Azgy kapott alfa erteket felhasznalva
a pixel sznevel vegythetj uk a fragmentum sznet a hatas elerese erdekeben.
Sznindex modban a rendszer a fragmentum fedettsegenek megfeleloen alltja be a
sznindex 4 legkisebb helyiertek u bitjet (0000 ha nincs fedes, 1111 ha teljes a fedettseg).
Az, hogy ez a bealltas hogyan es milyen mertekben befolyasolja a kepet, a felhasznalo
altal hasznalt sznpalett an m ulik.
A kep hatar anak kisimtasa tehat azt jelenti, hogy az alaphelyzethez kepest tobb pixelt
fest ki a rendszer, de ezeket mar nem a szakasz sznevel, hanem a fedettsegtol f ugg oen a
szakasz es a hatter sznenek kombin acioj aval. Vagyis a szakasz es a hatter koz ott fokozatos
atmenet lesz, nem pedig ugrasszer u. A 8.1. abr an egy szakasz simtas nelk uli (bal oldali
kep) es simtott (jobb oldali kep) megjelenteset lathatjuk. Mindket esetben jelentosen
felnagytottuk a kepernyor ol levett kepet.
8.1. abra. Szakasz kepe kisimt as nelk ul (bal oldali kep) es kisimt assal (jobb oldali kep)
A fedettsegi ertek szamtasa implementaci of ugg o, de mindenkeppen idoigenyes. A
glHint() paranccsal befolyasolhatjuk a sebesseget, illetve a kep minoseget, azonban ennek
gyelembe vetele is implement aciof ugg o.
61
void glHint (GLenum target, GLenum hint);
Az OpenGL nehany tulajdonsagat befolyasolhatjuk segtsegevel. A target pa-
rameterrel azt adjuk meg, hogy mire vonatkozzon a minosegi elor as. A lehetseges
ertekek listaj at a 8.2. tabl azat tartalmazza. A hint parameter lehetseges ertekei:
GL FASTEST, GL NICEST es GL DONT CARE. A GL FASTEST ertek a leg-
hatekonyabb, a GL NICEST a legjobb minoseget ado modszer hasznalat ara utastja a
rendszert, a GL DONT CARE ertekkel pedig azt jelezz uk, hogy nincs preferenciank. Ezen
utast asok gyelembe vetele teljes mertekben implementaci of ugg o, lehet, hogy teljesen
gyelmen kv ul hagyja a rendszer.
8.2. tablazat. A target parameter ertekei
target jelentese
GL POINT SMOOTH HINT
GL LINE SMOOTH HINT
GL POLYGON SMOOTH HINT
A pont, szakasz, poligon kephatarok
simt as anak minoseget adja meg.
GL FOG HINT Segtsegevel beallthatjuk, hogy a
kod eektus szamt asait pixelenkent
(GL NICEST), vagy cs ucspontonkent
(GL FASTEST) szamtsa ki a rendszer.
GL PERSPECTIVE CORRECTION HINT A szn es text ura-koordinat ak inter-
polaci ojanak minoseget adja meg.
A GL PERSPECTIVE CORRECTION HINT parameter eseten azt adhatjuk meg,
hogy a szneket es a text urakoordinat akat a rendszer a kevesebb szamt assal jar o linearis
interpolaci oval szamtsa ki, vagy a tobb szamt ast igenylo, de a val osagnak jobban meg-
felelo perspektv hatast is gyelembe vevo modon szamtsa ki a cs ucspontbeli ertekekbol
kiindulva. A rendszerek altal aban a linearis interpolaciot hasznaljak a sznek eseten,
miutan ez vizualisan elfogadhato eredmenyt biztost, jollehet matematikailag nem pon-
tos. Text ura eseten azonban a perspektv hatast is gyelembe vev o interpolaci ot kell
hasznalni a vizualisan elfogadhato eredmeny erdekeben.
8.2.1. Pont es szakasz simtasa
Pont simtas at a glEnable(GL POINT SMOOTH), a szakaszet a
glEnable(GL LINE SMOOTH) paranccsal engedelyezni kell. A glHint() parancc-
sal a minosegre vonatkozo ohajunkat adhatjuk meg.
RGBA sznmegadasi mod eseten engedelyezn unk kell a sznvegytest
(glEnable(GL BLEND)). A kombin alasi egy utthat okat altalaban vagy sfactor
= GL SRC ALPHA, dfactor = GL ONE MINUS SRC ALPHA, vagy sfactor =
GL SRC ALPHA, dfactor = GL ONE ertekre alltjuk. (Az utobbi megoldas a szakaszok
metszespontj at jobban kiemeli.) Az ezek utan rajzolt szakaszokat, illetve pontokat
62
kisimtva jelenti meg a rendszer. Ezen lehetoseg hasznalatahoz tehat a sznvegytes
(atl atszos ag, fedettseg) ismerete es megertese sz ukseges.
Sznindex mod eseten minden a sznpalett an m ulik, vagyis azon, hogy siker ul-e 16 olyan
sznt talalnunk, melyek a hatter es a rajzolasi szn koz ott folytonos atmenetet biztostanak.
Bonyoltja a helyzetet, ha tobb alakzat atfedi egymast, hiszen ekkor elvileg az ezek koz otti
folytonos atmenetet kellene biztostani. Teh at mindenkeppen meggondolando sznindex
modban a kisimtast hasznalni.

Atfedo alakzatok eseten RGBA modban sokkal jobb eredmenyt kaphatunk, mivel a
rendszer az osszes egymasra ker ul o sznt tudja kombinalni felteve, hogy a melysegpuert
nem hasznaljuk, pontosabban csak olvashat ov a tessz uk a simtand o pontok, szakaszok
rajzolasanak idejere ugy, mint a 8.1. szakaszban lattuk.
8.2.2. Poligonok simtasa
Ha a poligonok megjelentesi modja pont vagy szakasz (a glPolygonMode() parancsot
GL POINT vagy GL LINE parameterrel adtuk ki), akkor a poligon simtott megjelentese
az elozoek szerint tortenik. A tov abbiakban kitolt ott poligonok (GL FILL) simtas ar ol
lesz szo.
Kitoltott poligonok simtasa abban az esetben a legkritikusabb, ha k ul onb ozo szn u,
koz os ellel rendelkezo poligonokat rajzolunk. A legjobb eredmenyt a gy ujt o puer
hasznalat aval erhetj uk el, amivel az egesz kep kisimthat o (lasd a 10.4. szakaszt), de
ez nagyon szamt asigenyes, gy lassabb. A kovetkez okben lert eljar assal is megold-
hato a problema, ez viszont eleg kor ulmenyes, nagy kor ultekintest igenyel. Elvileg mind
RGBA, mind sznindex modban kisimthatjuk a kitoltott poligonok hatar at, azonban
tobb, egymast atfed o poligon kisimtott rajzolasa nem celszer u sznindex modban.
Poligonok kisimtott rajzolasat a glEnable(GL POLYGON SMOOTH) paranccsal
engedelyezni kell. Ennek hatasara a poligonok hatarolo eleihez tartozo fragmentumok alfa
ertekeit megszorozza a rendszer a fedettsegi index ukkel ugy, mint szakaszok simt asan al.
A megjelentes minoseget a target = GL POLYGON SMOOTH HINT parameterrel kia-
dott glHint() paranccsal befolyasolhatjuk. Ezutan csak olvashatov a kell tenni a z-puert
(glDepthMask(GL FALSE)), majd az alfa szerinti sznvegytest engedelyezni kell sfactor
= GL SRC ALPHA SATURATE, dfactor = GL ONE egy utthatokkal. Veg ul a poligo-
nokat melyseg szerint rendezni kell es hatulr ol elore haladva meg kell rajzolni.
8.3. Kod (atmoszferikus hatasok)
A szamtogeppel kesz ult kepekkel szemben gyakori es jogos kritika, hogy altalaban femesen
csillogo, eles kont ur u az objektumok kepe f uggetlen ul attol, hogy milyen kozel vannak a
nez oponthoz. Az elozo szakaszban ismertetett kephat ar-simt as mellett az OpenGL-ben
tovabbi lehetoseg a val oszer useg fokoz as ara a kod modellezese, aminek hatas ara az objek-
tumok a nez oponttol tavolodva fokozatosan elhomalyosodnak, elt unnek, beleolvadnak a
kod sznebe. A koddel para, homaly, f ust es szennyezett levego is modellezheto.
A kod eektust a rendszer a transzformaciok, megvilagtas es text ura-lekepezes utan
adja hozza a kephez. Komplex szimulaci os programok eseten a kod alkalmaz as aval novel-
hetj uk a sebesseget, mert a s ur u koddel bortott objektumok megrajzolas at elhagyhatjuk,
mivel ugysem lesznek lathatok.
63
A kodhatast engedelyezn unk kell a glEnable(GL FOG) paranccsal, majd a kod sznet
es s ur useget kell megadnunk a glFog*() paranccsal. A GL FOG HINT parameterrel kia-
dott glHint() paranccsal a minoseget, illetve a sebesseget befolyasolhatjuk (lasd a 8.2.
szakaszt). A kod sznet a rendszer a bejov o (forras) fragmentum sznevel vegyti, fel-
hasznalva a kod kombinal o tenyez ojet. Ezt az f kombinal o tenyezot az a 8.3. tabl azat
szerint adhatjuk meg.
8.3. tablazat. A kod kombin alo tenyez ojenek megadasa
f kiszamt asa param erteke a glFog*()-ban
f = e
densityz
GL EXP
f = e
(densityz)
2
GL EXP2
f =
endz
endstart
GL LINEAR
ahol z a fragmentum kozeppontj anak a nezopontt ol mert tavols aga a
nez opontkoordinata-rendszerben. A density, end, start ertekeket a glFog*() paranccsal
adhatjuk meg. Az gy kiszamtott f egy utthat ot a rendszer a [0., 1.] intervallumra
levagja.
void glFogif (GLenum pname, TYPE param);
void glFogifv (GLenum pname, const TYPE *param);
A kod eektus szamt asahoz sz ukseges ertekeket adhatjuk meg vele. pname
erteke GL FOG MODE, GL FOG DENSITY, GL FOG START, GL FOG END,
GL FOG COLOR vagy GL FOG INDEX lehet.
GL FOG MODE eseten az f egy utthat o kiszamtasi modjat adhatjuk meg, ekkor a
param erteke GL EXP, GL EXP2 vagy GL LINEAR lehet. Alapertelmezes a GL EXP.
Ha pname erteke GL FOG DENSITY, GL FOG START, GL FOG END, akkor a
param-al a megfelelo density, start, illetve end erteket adjuk meg az f szamtas ahoz.
Alapertelmezes szerint density = 1, start = 0 es end = 1.
RGBA modban a kod sznet pname = GL FOG COLOR ertek mellett a szn RGBA
komponenseivel adhatjuk meg. (Ekkor csak a vektoros hvasi forma megengedett.)
Sznindex modban pedig a pname = GL FOG INDEX ertek mellett a param-mal atadott
ertek a kod sznindexe.
RGBA modban a kod miatti sznvegytest a
C = fC
i
+ (1 f)C
k
osszef ugges szerint szamtja ki a rendszer, ahol C
i
az uj (forras) fragmentum, C
k
pedig a
kod szne. Sznindex modban pedig az
I = I
i
+ (1 f)I
k
kifejezes szerint, ahol I
i
a forrasfragmentum, I
k
pedig a kod sznindexe. Sznindex modban
ugyeln unk kell a megfelelo sznskala elo allt as ara is. A skala elso sznenek a kod nelk uli ob-
jektum sznevel kell megegyeznie, az utolsonak pedig a kodevel. Ez azt jelenti, hogy tobb
64
k ul onboz o szn u objektum eseten tobb, az eloz oeknek megfelelo sznskal at kell letrehozni,
ami meglehetosen nehezkesse, kisse remenytelenne teszi a kodhatas modellezeset sznindex
modban.
A 8.2. abra felso kepen teaskannak
1
megvilagtott, arnyalt kepet lathatjuk. Az also
kepen pedig ugyanaz a beallt as kodhat assal lathat o. A kod parametereinek beallt asai:
GL EXP, density = 0.25, start = 1 es end = 5, a kod szne pedig sz urke (0.6,0.6,0.6).
1
A szamtogepi grakaban a teaskannanak kit untetett szerepe van, gyakran hasznaljak grakai hatasok
demonstral asanal. Az un. Utah teapot tortenete az 1960-as evekre ny ulik vissza, amikor a University of
Utah-on egy teaskannat digitalizaltak (ez a kanna azota egy bostoni m uzeumban van) es 306 kontroll-
ponttal lert 32db, egymashoz siman kapcsolodo Bezier-fel ulettel modelleztek.
65
8.2. abra. Teaskannak kod nelk ul (felso kep) es koddel (also kep)
66
9. fejezet
Raszteres objektumok rajzolasa
Ketfele raszteres objektum rajzolhato: a bitterkep es a kep. Mindkett o pixelek egy
teglalap alak u tombje, a k ulonbseg csak az, hogy a bitterkep minden pixelhez egyetlen
bitben tarol informaciot, a kep pedig tobb bitben, de minden pixelhez ugyanannyiban (pl.
RGBA ertekeket). K ulonbseg meg, hogy a bitterkepet egy maszkkent teszi ra a rendszer
a kepre (pl. karakterek rasa), a keppel pedig fel ulrja vagy kombin alja a tarolt adatokat
(pl. az RGBA ertekeket).
9.1. Bitterkepek es karakterek
A bitterkep a 0 es 1 ertekek tombjenek tekinthet o, mely a kepmez o egy teglalap alak u
ter uletenek rajzolasi maszkjakent hasznalhat o. Ahol a terkepben 1 szerepel, a neki meg-
felelo pixelt a rendszer atrja a rajzolasi sznnel, vagy alfa szerint kombin alja a raj-
zolasi sznt a pixel sznevel attol f uggoen, hogy milyen pixelenkenti m uveletek vannak
elorva. A bitterkep 0 elemeinek megfelelo pixelek valtozatlanok maradnak. Bitterkepek
hasznalat anak tipikus peld aja a karakterek rasa.
Karakterek rajzolasahoz csak a legalacsonyabb szint u szolgaltatasokat biztostja az
OpenGL. Ezek a pozicional as es bitterkepek rajzolasa. Karakterkeszlet letrehozas at
es karaktersorozat rajzolas at segtik a display-listakn al megismert (lasd a 7. fejeze-
tet) parancsok. Karaktersorozat rajzolasat tamogat o minden tovabbi f uggvenyt a fel-
hasznal onak kell megrnia. A GLUT f uggvenyk onyvtar is tartalmaz karakterek r as at
segt o f uggvenyeket. A karaktereket lero bitterkepek bitekben mert szelessegenek es
hossz us aganak 8 tobbsz orosenek kell lenni, ami persze nem jelenti azt, hogy maguknak a
karaktereknek is.
9.2. Kurrens raszterpozcio
A rendszer a bitterkepeket es kepeket mindig a kurrens raszterpozci ot ol kezdod oen ra-
jzolja meg ugy, hogy a kurrens raszterpozci o lesz a bitterkep (kep) bal also sarka (ha
maskent nem rendelkez unk). A kurrens raszterpozciot a rendszer egy globalis valtozoban
tarolja.
67
void glRasterPos234sifd (TYPE x, TYPE y, TYPE z, TYPE w);
void glRasterPos234sifdv (conts TYPE *pos);
A kurrens raszterpozci ot alltja be. Az x, y, z, w parameterek az uj pozci o koor-
dinat ai. Ha ket koordinataval adjuk meg, akkor a rendszer automatikusan a z = 0, w = 1
ertekekkel egeszti ki, harom koordinata eseten pedig a w = 1 ertekkel. Az gy megadott
raszterpozciot pontosan ugy transzformalja a rendszer az ablakkoordinata-rendszerbe,
mint a glVertex*() paranccsal megadott cs ucspontokat. Ha a transzformaciok utan
a megadott pozcio a kepmez on kv ulre esik, akkor a kurrens raszterpozci o statusza
ervenytelen lesz.
A GL CURRENT RASTER POSITION parameterrel kiadott glGetFloatv() paran-
ccsal lekerdezhetj uk a kurrens raszterpozci o koordinatait, ugyanezzel a parameterrel
kiadott glGetBoolean() paranccsal pedig megtudhatjuk, hogy a kurrens raszterpozcio
ervenyes-e.
9.3. Bitterkep rajzolasa
void glBitmap (GLsizei width, GLsizei hight, GLoat xo, GLoat yo, GLoat xi,
GLoat yi, const GLubyte *bitmap);
A bitmap cmen kezd odo bitterkepet rajzolja meg a rendszer ugy, hogy a bitterkep
origoj at a kurrens raszterpozci ora helyezi. Az (x
o
, y
o
) koordinatap arral gyakorlatilag a
bitterkep bal also sarkanak (origojanak) eltolas at adhatjuk meg pixelekben. Az eltolas
komponensei lehetnek negatvok is. Ha a kurrens raszterpozci o ervenytelen, akkor nem
rajzol semmit es a kurrens raszterpozci o tov abbra is ervenytelen marad. A bitterkep
raszterizal asa utan az (x
c
, y
c
) kurrens raszterpozciot az (x
c
+ x
i
, y
c
+ y
i
) ertekre alltja
a rendszer. A width es hight parameterek a bitterkep pixelekben mert szelesseget es
hossz us agat jelolik. Ezeknek nem kell feltetlen ul 8 tobbsz orosenek lennie, bar a bitterkep
altal lefoglalt ter ulet mindket merete mindig 8 tobbszor ose.
Az all o latin bet uk eseten y
i
= 0 es x
i
> 0, de pl. heber karaktereknel a heberben
jobbrol balra rnak x
i
< 0. Lehetoseg van fel ulr ol lefele, vagy alulrol felfele val o rasra
is. Az (x
i
, y
i
) ertekeket ugy szoktuk bealltani, hogy a karaktert kovet o bet uk ozt is tar-
talmazza.
A glBitmap() paranccsal csak a kepmez o oldalaival parhuzamosan lehet rni, azaz
nem lehet a szoveget elforgatni.
9.4. Kepek
Az OpenGL-ben a kep nagymertekben hasonlt a bitterkephez. Alapvet o k ulonbseg azon-
ban, hogy a kep pixelenkent tobb bitnyi adatot tartalmaz, pl. az RGBA szamnegyest. A
kep eredetet illetoen lehet pl. egy lapleolvas oval raszterizalt fenykep, a grakus hardver vi-
deomemori ajab ol beolvasott kep vagy valamely program altal kiszamolt es a memori aban
68
tarolt kep is. A kepek amellett, hogy megjelenthetok a keperny on pl. text urakent is
hasznalhat ok.
Kep hallatan altalaban a sznpuerbe rt kepre asszocialunk, azonban teglalap alak u
pixeltomb ok adatait melyek nemcsak sznek lehetnek rhatjuk mas puerbe is, vagy
olvashatjuk mas puerbol is, pl. melysegpuer, stencilpuer, gy ujtopuer (lasd a 10.
fejezetet).
9.4.1. Pixeladatok olvasasa, rasa es masolasa
A kepek manipulalas ara az OpenGL harom alapvet o parancsot tartalmaz:
glReadPixels(), pixeltomb adatainak beolvasasa a keppuerbol (framebuer) a
processzor memoriaj aba;
glDrawPixels(), pixeltomb adatainak berasa a memori abol a keppuerba;
glCopyPixels(), pixeltomb masol asa a keppueren bel ul. Ez csak eredmenyet
tekintve ugyanaz, mintha beolvasn ank a keppuerbol, majd bern ank annak egy
masik reszere, ugyanis a masol asi parancs hasznalata eseten az adat nem ker ul a
processzor memoriaj aba.
Ezen parancsok rendkv ul egyszer u feladatokat hajtanak vegre. A vegrehajtas azon-
ban nem mindig egyszer u, mivel nagyon sokfele adat van a keppuerben, es ezeket
sokfelekeppen lehet tarolni, gy a fenti m uveletek soran altal aban tobbfele adatkonverzi ora
van sz ukseg.
void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type, const GLvoid *pixels);
A keppuer azon pixeltombjenek az adatait olvassa be, melynek bal also sarka (x, y),
szelessege width, magassaga height. Az adatokat a pixels cmen kezd odo memoriater uletre
teszi. A format parameterrel a pixelekrol beolvasand o adatelemeket adjuk meg (lasd a 9.1.
tabl azatot), a type parameterrel pedig az adattarol as tpus at (lasd a 9.2. tabl azatot).
void glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type,
const GLvoid *pixels);
A pixels cmen tarolt width szelesseg u, height magassag u pixeltombot rajzolja meg
ugy, hogy a pixeltomb bal also sarka a kurrens raszterpozci oba ker ul. Ha a kurrens rasz-
terpozcio ervenytelen, akkor nem rajzol semmit, es a kurrens raszterpozcio tov abbra is
ervenytelen marad. A format es type parameterek ertelmezese a glReadPixels() paran-
csnal rtakkal megegyezik.
Ha a pixeladat elemei folytonos adatot reprezentalnak, mint pl. az RGB ertekek,
akkor a rendszer az adattpusnak megfelelo intervallumra kepezi le az adatokat, tehat
adatvesztes is eloallhat. Ha az adatelem egy index, pl. szn- vagy stencilindex, es a tpus
nem GL FLOAT, akkor a rendszer az erteket az adott tpus bitjeivel maszkolja.
69
9.1. tabl azat. A pixelekrol beolvashato adatelemek
format a beolvasott adat
GL COLOR INDEX sznindex
GL RGB voros, zold es kek sznkomponensek
GL RGBA voros, zold, kek es alfa komponensek
GL RED voros sznkomponens
GL GREEN zold sznkomponens
GL BLUE kek sznkomponens
GL ALPHA alfa komponens
GL LUMINANCE vilagossag
GL LUMINANCE ALPHA vilagossag es alfa komponens
GL STENCIL INDEX stencilindex
GL DEPTH COMPONENT melyseg
9.2. tablazat. Az adattarol as tpusa
type az adattpus ler asa
GL UNSIGNED BYTE 8 bites elojel nelk uli egesz
GL BYTE 8 bites elojeles egesz
GL BITMAP 1 bit, 8 bites elojel nelk uli egeszekben
GL UNSIGNED SHORT 16 bites elojel nelk uli egesz
GL SHORT 16 bites elojeles egesz
GL UNSIGNED INT 32 bites elojel nelk uli egesz
GL INT 32 bites egesz
GL FLOAT egyszeres pontoss ag u lebegopontos
void glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
Egy pixeltomb adatait masolja ugyanazon a pueren bel ul a kurrens raszterpozci oba.
A masolando tomb bal also sarkanak koordinatai (x, y), szelessege width, magassaga
height. A type parameter erteke GL COLOR, GL STENCIL es GL DEPTH lehet. A
masol as soran a glPixelTransfer*(), glPixelMap*() es glPixelZoom() parancsokkal
bealltott manipulaci ok hatasa ervenyes ul. type = GL COLOR eseten a sznmegad asi
modt ol f uggoen vagy az RGBA komponensek, vagy a sznindexek ker ulnek masol asra;
type = GL DEPTH eseten a melysegertekek, type = GL STENCIL eseten pedig a sten-
cilindexek.
70
9.4.2. Kepek kicsinytese, nagytasa
void glPixelZoom (GLoat xfactor, GLoat yfactor);
Segtsegevel a pixeltomb ok rajzolasa es masol asa soran vegrehajtando skal az asi fakto-
rokat rhatjuk elo. xfactor es yfactor alapertelmezese 1. Raszterizalaskor a kep minden pi-
xelet egy-egy xfactor yfactor meret u teglalapkent kezeli a rendszer, es a keperny o min-
den olyan pixele szam ara letrehoz egy fragmentumot, mely kozeppontja ebbe a teglalapba,
vagy ennek a teglalapnak az also vagy bal oldalara esik. Negatv skal azasi ertekek a meg-
felelo tengelyre vonatkozo t ukr ozeseket is eredmenyeznek.
9.5. Pixelek tarolasa, transzformalasa, lekepezese
A memori aban tarolt kep pixelenkent1 4 adatelemet tartalmazhat. Pl. az adat allhat
pusztan a sznindexbol, a vilagoss agb ol (luminance, ami altalaban az RGB ertekek atlaga)
vagy magukbol az RGBA ertekekbol. A pixeladatok formatuma hatarozza meg a tarolt
adatok szamat es sorrendjet.
Nehany adatelem egesz szam (pl. a szn- vagy stencilindex), masok lebegopontos
ertekek (pl. az RGBA komponensek vagy a melyseg), melyek altal aban a [0., 1.] interval-
lumon valtoznak. A lebegopontos szamokat a megfelelo puerben a grakus hardvert ol
f ugg oen altalaban kisebb helyen sznkomponens eseten 8 biten tarolja a rendszer,
mint amennyi sz ukseges lenne (32 bit). Ezert pazarlas lenne pl. a sznpuerb ol beolva-
sott sznkomponenseket 32 biten tarolni, annal is inkabb, mivel egy kep pixeleinek szama
konnyen meghaladhatja az 1 milliot is.
Az adatok tobbfelekeppen tarolhat ok a memoriaban, 8 32 bit, egesz vagy le-
begopontos szam. Az OpenGL explicite denialja a k ul onb ozo formatumok kozotti kon-
verziokat.
9.6. A pixeladatok tarolasanak szabalyozasa
A tarolasi mod a glPixelStore() paranccsal szabalyozhato.
void glPixelStoreif (GLenum pname, TYPE param);
A glDrawPixels*(), glReadPixels*(), glBitmap(), glPolygonStipple(), glTexI-
mage1D(), glTexImage2D() es glGetTexImage() parancsok m uk odeset befolyasol o
pixeladat tarolasi modot alltja be. A a 9.3. tablazat a pname parameter lehetseges
ertekeit, azok adattpusat, kezdeti erteket es a megadhato ertekek intervallum at tar-
talmazza. GL UNPACK* parameter eseten azt szabalyozza, hogy a glDrawPixels*(),
glBitmap(), glPolygonStipple(), glTexImage1D(), glTexImage2D() parancsok ho-
gyan csomagoljak ki az adatokat a memoriab ol; GL PACK* eseten pedig azt, hogy a gl-
ReadPixels*() es glGetTexImage() parancsok hogyan tom ortik (csomagoljak ossze)
az adatokat a memori aba.
71
9.3. tablazat. A pixeladatok tarolas anak parameterei
pname adattpus kezdeti ertek felveheto ertekek
GL UNPACK SWAP BYTES
GL PACK SWAP BYTES
GLboolean GL FALSE
GL TRUE
GL FALSE
GL UNPACK LSB FIRST
GL PACK LSB FIRST
GLboolean GL FALSE
GL TRUE
GL FALSE
GL UNPACK ROW LENGTH
GL PACK ROW LENGTH
GLint 0 nemnegatv egesz
GL UNPACK SKIP ROWS
GL PACK SKIP ROWS
GLint 0 nemnegatv egesz
GL UNPACK SKIP PIXELS
GL PACK SKIP PIXELS
GLint 0 nemnegatv egesz
GL UNPACK ALIGNMENT
GL PACK ALIGNMENT
GLint 4
2 hatvanyai
(1, 2, 4, . . .)
9.7. M uveletek pixelek mozgatasa soran
A pixeleken m uveleteket hajthatunk vegre, mikozben a keppuerb ol (vagy a keppuerba)
mozgatjuk. Ezen m uveletek egyreszt a glPixelTransfer*(), masreszt a glPixelMap*()
paranccsal rhatok le.
void glPixelTransferif (GLenum pname, TYPE param);
AglDrawPixels*(), glReadPixels*(), glCopyPixels*(), glTexImage1D(), glTe-
xImage2D() es glGetTexImage() parancsok m uk odeset befolyasol o pixelatviteli modot
alltja be. A a 9.3. tabl azat a pname parameter lehetseges ertekei, azok adattpus at, kez-
deti erteket es a megadhato ertekek intervallum at tartalmazza.
9.8. Transzformalas tablazat segtsegevel
A keperny o memoriaj aba val o beras elott a sznkomponenseket, a szn- es stencilindexeket
egy tablazat segtsegevel is modosthatjuk.
void glPixelMapuiusfv (GLenum map, GLint mapsize, const TYPE *values);
Betolti a values cmen kezd odo, mapsize meret u map tpus u tablazatot. A a 9.5.
tabl azat tartalmazza a map parameter lehetseges ertekeit. A meret alapertelmezese 1, az
ertekeke pedig 0. A meretnek mindig 2 hatvany anak kell lennie.
72
9.4. tablazat. A glPixelTransfer() parancs parameterei
pname adattpus kezdeti ertek felveheto ertek
GL MAP COLOR
GL MAP STENCIL
GLboolean GL FALSE
GL TRUE
GL FALSE
GL INDEX SHIFT GLint 0 tetszoleges egesz
GL INDEX OFFSET GLint 0 tetszoleges egesz
GL RED SCALE GLoat 1. tetszoleges val os
GL GREEN SCALE GLoat 1. tetszoleges val os
GL BLUE SCALE GLoat 1. tetszoleges val os
GL ALPHA SCALE GLoat 1. tetszoleges val os
GL DEPTH SCALE GLoat 1. tetszoleges val os
GL RED BIAS GLoat 0. tetszoleges val os
GL GREEN BIAS GLoat 0. tetszoleges val os
GL BLUE BIAS GLoat 0. tetszoleges val os
GL ALPHA BIAS GLoat 0. tetszoleges val os
GL DEPTH BIAS GLoat 0. tetszoleges val os
9.5. tablazat. A glPixelMap() paranccsal betolthet o tabl azatok tpusa
map mire vonatkozik milyen erteket tartalmaz
GL PIXEL MAP I TO I sznindex sznindex
GL PIXEL MAP S TO S stencilindex stencilindex
GL PIXEL MAP I TO R sznindex R
GL PIXEL MAP I TO G sznindex G
GL PIXEL MAP I TO B sznindex B
GL PIXEL MAP I TO A sznindex A
GL PIXEL MAP R TO R R R
GL PIXEL MAP G TO G G G
GL PIXEL MAP B TO B B B
GL PIXEL MAP A TO A A A
73
10. fejezet
Puerek
Raszteres grakus display-n a kepet pixelekbol (keppontokbol), apro teglalap alak u
foltokbol rakjuk ossze. Ezen teglalapok oldalai az ablakkoordinata-rendszer tenge-
lyeivel parhuzamosak es a bal also sarok koordinataival azonostjuk oket. Egy-egy
kep elo allt asahoz es megjelentesehez a pixelekhez tarolni kell szn uket, a lathatos agi
vizsgalatokhoz a melyseg uket (az ablakkoordinata-rendszerbeli z koordinatat). Egyeb
hatasok elerese erdekeben tovabbi adatok pixelenkenti tarolasa is sz ukseges, pl. stencil-
index.
Azokat a tarter uleteket, melyekben minden pixelhez ugyanannyi adatot tarolunk puf-
fernek nevezz uk. Az OpenGL-ben tobb puer van, gy pl. a sznpuer, melysegpuer. Egy
puernek lehetnek alpuerei, mint pl. RGBA sznmegadasi mod eseten a sznpuernek R,
G, B, A vagy R, G, B alpuerei. Egy kephez tartozo osszes puert egy uttesen keppuernek
nevezz uk.
Az OpenGL a kovetkezo puereket hasznalja:
sznpuerek: bal elso, bal hatso, jobb elso, jobb hatso es tovabbi kiegeszto
sznpuerek;
melysegpuer;
stencilpuer;
gy ujt opuer.
A puerek szama es a bit/pixel merete implementaci of ugg o, azonban biztos, hogy
minden implement acioban van legalabb egy sznpuer RGBA sznmegadasi modhoz es
ehhez kapcsolodoan stencil-, melyseg- es gy ujtopuer; tovabb a egy sznpuer sznindex
modhoz stencil- es melysegpuerrel. A glGetIntegerv() paranccsal lekerdezhetj uk, hogy
implementaci onk az egyes puerekben pixelenkent hany biten tarolja az informaciot. A
lekerdezhet o puerek azonost oj at a a 10.1. tablazat tartalmazza.
10.1. Sznpuerek
A sznpuer az, amibe rajzolunk. Ezek vagy sznindexeket vagy RGB sznkomponenseket
es alfa ertekeket tartalmaznak. Azok az OpenGL implement aciok, melyek tamogatj ak a
74
10.1. tabl azat. A puerek azonostoi
azonost o jelentese
GL RED BITS
GL GREEN BITS
GL BLUE BITS
GL ALPHA BITS
a sznpuerben az R, G, B, A komponensek
tarol asara hasznalt bitek szama pixelenkent
GL DEPTH BITS a melysegpuer pixelenkenti merete
GL STENCIL BITS a stencilpuer pixelenkenti merete
GL ACCUM RED BITS
GL ACCUM GREEN BITS
GL ACCUM BLUE BITS
GL ACCUM ALPHA BITS
a gy ujt opuerben az R, G, B, A komponensek
tarol asara hasznalt bitek szama pixelenkent
sztereoszkopikus (bicentr alis) abrazol ast, bal es jobb oldali sznpuereket is tartalmaznak.
Ha egy implementaci o nem tamogatja a sztereoszkopikus abr azolast, akkor csak bal oldali
sznpuere van. Ha az animaciot tamogatja az implement acio, akkor van elso es hatso
sznpuere is, egyebkent csak elso. Minden OpenGL implementaci oban lenni kell egy bal
elso sznpuernek.
Az implementaci ok legfeljebb 4 tovabbi, kozvetlen ul meg nem jelenthet o sznpuert
tartalmazhatnak. Az OpenGL nem rendelkezik ezek hasznalatar ol, vagyis tetszes unk
szerint hasznosthatjuk oket, pl. ismetlod oen hasznalt kepek tarolas ara, gy ugyanis nem
kell mindig ujrarajzolni a kepet, eleg pusztan atm asolni egyik puerbol a masikba.
A glGetBoolean(GL STEREO) paranccsal lekerdezhetj uk, hogy implementaci onk
tamogatja-e a sztereoszkopikus abrazol ast (van-e jobb oldali sznpuere is); a glGet-
Boolean(GL DOUBLE BUFFER) paranccsal pedig azt, hogy az animaci ot tamogatja-e
(van-e hatso sznpuere). A GL AUX BUFFERS parameterrel kiadott glGetIntegerv()
paranccsal az opcionalis sznpuerek szam at kaphatjuk meg.
10.2. Melysegpuer
Az OpenGL a melysegpuer (z-puer) algoritmust hasznalja a lathat osag
megallaptas ahoz, ezert minden pixelhez melyseget (az ablakkoordinata-rendszerbeli z
erteket) is tarol. Ha maskent nem rendelkez unk, a rendszer fel ulrja a hozza tartozo
pixelt az uj fragmentummal, amennyiben annak az ablakkoordinata-rendszerbeli z erteke
kisebb, mivel ez a z ertek (a melyseg) a nezopontt ol mert tavolsagot fejezi ki.
10.3. Stencilpuer
A stencilpuert arra hasznaljuk, hogy a rajzolast a kepernyo bizonyos reszeire korlatozzuk.
Ahhoz hasonlt, mint amikor egy kartonlapba feliratot vagunk, es a lapot egy fel uletre
helyezve lefestj uk, aminek soran a fel uletre csak a felirat ker ul. A fenym asolok elterjedese
elott ezt a technik at hasznalt ak kis peld anyszam u sokszorostasra. Mas hasonlattal elve,
75
a stencilpuer hasznalat aval tetszoleges alak u ablakon at nezhetj uk a vilagot. Latni fo-
gjuk, hogy e mellett meg mas tr ukk okhoz, specialis hatasokhoz is jol hasznalhato a
stencilpuer.
10.4. Gy ujt opuer
A gy ujt opuer RGBA sznkomponenseket tartalmaz ugyan ugy, mint a sznpuer, ha a
sznmegad asi mod RGBA. Sznindex modban a gy ujtopuer tartalma denialatlan. A
gy ujt opuert altal aban arra hasznaljuk, hogy tobb kepet osszegezve alltsunk elo egy
vegs o kepet. Ezzel a modszerrel viheto vegbe pl. a teljes kep kisimtasa (antialiasing).
A gy ujt opuerbe nem tudunk kozvetlen ul rajzolni, az akkumulal as mindig teglalap alak u
pixeltomb okre vonatkozik es az adatforgalom kozte es a sznpuer kozott van.
A gy ujtopuer hasznalataval hasonlo hatas erhet o el, mint amikor a fenykepesz
ugyanarra a lmkockara tobbsz or exponal. Ekkor ugyanis a lefenykepezett terben eset-
legesen mozgo alakzat tobb peld anyban, elmosodottan fog megjelenni. Ezen kv ul mas
hatasok is elerhetok, gy pl. a teljes kep kisimt asa, a melysegelesseg szimul alasa is.
Az OpenGL parancsokkal nem lehet kozvetlen ul csak a gy ujt opuerbe rni. A
sznpuerek valamelyikebe kell rajzolni es kozben a gy ujt opuerben is tarolni kell a
kepet, majd az osszegy ujt ott a gy ujtopuerben megkomponalt kep visszamasolhat o a
sznpuerbe, hogy lathato legyen. A kerektesi hibak csokkentese erdekeben a gy ujt opuer
bit/pixel erteke altalaban nagyobb, mint a sznpuereke.
void glAccum (GLenum op, GLoat value);
A gy ujt opuer m uk odeset szabalyozza. Az op parameterrel a m uveletet valaszthatjuk
ki, a value parameterrel pedig a m uvelethez hasznalt erteket. Az op lehetseges ertekei es
hatasa:
GL ACCUM: a glReadBuer() paranccsal olvas asra kivalasztott puer pixeleinek
R, G, B, A ertekeit kiolvassa, megszorozza oket a value ertekkel es hozzaadja a
gy ujt opuerhez.
GL LOAD: a glReadBuer() paranccsal olvas asra kivalasztott puer pixeleinek
R, G, B, A ertekeit kiolvassa, megszorozza oket a value ertekkel es fel ulrja vel uk a
gy ujt opuer megfelelo elemeit.
GL RETURN: a gy ujt opuerbol kiolvasott ertekeket megszorozza a value ertekkel,
majd a kapott eredmenyt az rhat o sznpuerekbe berja.
GL ADD: a gy ujtopuerbeli ertekekhez hozzaadja a value erteket, majd az
eredmenyt visszarja a gy ujtopuerbe.
GL MULT: a gy ujt opuerbeli erteket megszorozza a value ertekkel, az eredmenyt a
[1., 1.] intervallumra levagja, majd visszarja a gy ujtopuerbe.
76
10.4.1. Teljes kep kisimtasa
A teljes kep kisimt as ahoz elobb tor olj uk a gy ujt opuert es engedelyezz uk az elso
sznpuer ras at es olvas as at. Ez utan rajzoljuk meg n-szer a kepet picit k ul onb ozo
pozciob ol (a vettesi lekepezest picit modostsuk), mintha csak a fenykepezogepet tarto
kez remegne. A kamera remegtetesenek olyan kicsinek kell lenni, hogy a kepmezon merve
az elmozdulas 1 pixelnel kisebb legyen. Amikor ugyanarr ol az objektumrol tobb kepet
kell ilyen modon letrehozni, fontos kerdes, hogy mikent valasszuk meg az elmozdulasokat.
Egyaltal an nem biztos, hogy az a jo, ha a pixelt egyenletesen felosztjuk mindket iranyban
es a racspontokba toljuk el. A helyes felosztas modja csak tapasztalati uton allapthato
meg.
A gy ujtopuerbe minden rajzolasn al a
glAccum(GL ACCUM,1./n);
beallt as mellett ker ulj on a kep, veg ul a
glAccum(GL RETURN,1.);
parancsot adjuk ki, amivel az osszegy ujt ott kep lathato lesz. Az elmozdulas, a kamera
remegese egy pixelnel kisebb legyen! Az eljar as egy kicsit gyorsabb, ha nem torolj uk a
gy ujt opuert, hanem az elso kep megrajzolasa elott a
glAccum(GL LOAD,1./n);
parancsot adjuk ki. Ha nem akarjuk, hogy az n darab kozb uls o fazis is lathat o
legyen, akkor abba a sznpuerbe rajzoljunk, amelyik nem lathat o ez dupla sznpuer
hasznalatakor lehetseges es csak a
glAccum(GL RETURN,1.);
parancs kiadasa elott valtsunk a lathato sznpuerre.
Masik lehetoseg egy interaktv kornyezet letrehoz asa, amikor a felhasznalo minden kep
hozzaad asa utan donthet arrol, hogy tov abb javtsa-e a kepet. Ekkor a rajzolast vegzo
ciklusban minden kirajzolas utan a
glAccum(GL RETURN,n/i);
parancsot kell kiadni, ahol i a ciklusvaltoz o.
10.4.2. Bemozdulasos eletlenseg (motion blur)
Feltetelezz uk, hogy az abr azolt terreszben vannak rogztett es mozgo objektumok, es a
mozgo alakzatok k ul onboz o helyzeteit ugyanazon a kepen akarjuk abrazolni ugy, hogy az
idoben visszafele haladva a kepek egyre elmosodottabbak legyenek. A megoldas a kep
kisimt asahoz hasonlt. A k ul onbseg az, hogy most nem a kamerat kell mozgatni, hanem
az alakzatot, es a
glAccum(GL MULT,decayf);
parancsot kell kiadni, ahol decayf [0., 1.], ha ez a tenyezo kicsi a mozgas gyorsabbnak
latszik. Veg ul a kepet a hatter, a mozgo alakzat pillanatnyi pozcioja es az eloz o
helyzetek altal lert elmosod o csova a glAccum(GL RETURN,1.) paranccsal a lathato
sznpuerbe rhatjuk.
10.4.3. Melysegelesseg
Egy fenykepezogeppel kesztett kepen vannak objektumok, melyek elesen latszanak, mas
reszek kisse (vagy nagyon) homalyosak. Normal kor ulmenyek kozott az OpenGL-el
77
kesztett kepek minden resze ugyanolyan eles. A gy ujt opuerrel azonban elerheto az,
hogy egy adott skt ol tavolodva egyre homalyosabb, elmosodottabb legyen a kep. Ez
nem a fenykepezogep m uk odesenek a szimul alasa, de a vegeredmeny elegge hasonlt a
fenykepezogeppel kesztett kephez.
10.1. abra. A vettesi kozeppontok elhelyezese a melysegelesseg modellezesehez
Ennek erdekeben tobbsz or kell megrajzolni a kepet a perspektv lekepezes olyan
valtoztat asa mellett, hogy az abr azolando terreszt megado csonka g ulaknak legyen egy
koz os teglalapja, mely a csonka g ula alaplapjaval parhuzamos skban van (lasd a 10.1.
abr at). Ennek a modostasnak termeszetesen nagyon csekelynek kell lennie. A kepet a
szokasos modon atlagolni kell a gy ujt opuerben.
10.5. Puerek torlese
A puerek torlese nagyon idoigenyes feladat, egyszer ubb rajzok eseten a torles hosszabb
ideig tarthat, mint maga a rajzolas. Ha nemcsak a sznpuert, hanem pl. a melysegpuert
is tor olni kell, ez aranyosan noveli a torleshez sz ukseges idot. A torlesre fordtott ido
csokkentese erdekeben legtobb grakus hardver egyidej uleg tobb puert is tud torolni,
amivel jelentos megtakartas erhet o el.
A torleshez elobb be kell alltani a torlesi erteket, azt az erteket, amivel fel ul akarjuk
rni a puer elemeit, majd vegre kell hajtani magat a torlest.
void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
A torlesi szn megadasa RGBA sznmegadasi mod eseten. A megadott ertekeket a
rendszer a [0., 1.] intervallumra levagja. Alapertelmezes: 0., 0., 0., 0..
void glClearIndex (GLoat index);
A torlesi szn megadasa sznindex mod eseten. Alapertelmezes: 0.
78
void glClearDepth (GLclampd depth);
A torlesi melyseg megadasa. A megadott ertekeket a rendszer a [0., 1.] intervallumra
levagja. Alapertelmezes: 1..
void glClearStencil (GLint s);
A stencilpuer torlesi ertekenek megadasa. Alapertelmezes: 0.
void glClearAccum (GLclampf red, GLclampf green, GLclampf blue, GLclampf al-
pha);
A gy ujtopuer torlesi sznenek megadasa. A megadott ertekeket a rendszer a [0., 1.]
intervallumra levagja. Alapertelmezes: 0., 0., 0., 0..
void glClear (GLbiteld mask);
A mask parameterrel megadott puereket torli. mask erteke a
GL COLOR BUFFER BIT, GL DEPTH BUFFER BIT, GL STENCIL BUFFER BIT,
GL ACCUM BUFFER BIT konstansok valamelyike, vagy ezeknek a logikai vagy (OR)
m uvelettel osszekapcsolt tetszoleges kombin aci oja lehet. GL COLOR BUFFER BIT
eseten mindig a megfelelo sznpuer torl odik, azaz vagy a sznindex-puer, vagy az
RGBA puer; tov abba minden rhat o puert tor ol a rendszer.
10.6. Az rand o es olvasand o puerek kivalasztasa
A rajzolas eredmenye az altalunk kivalasztott sznpuerbe, vagy sznpuerekbe ker ulhet,
tehat a bal elso, jobb elso, bal hats o, jobb hatso vagy a kiegeszto sznpuerekbe,
illetve ezek tetszoleges kombin acioj aba, azaz egyszerre tobb sznpuerbe is rajzolha-
tunk. Animacio eseten pl. a kozos hatteret egyszerre megrajzolhatjuk az elso es hats o
sznpuerekbe, majd a mozgo alakzat k ul onb ozo helyzeteit felvaltva az elso, illetve a hatso
puerbe, gondoskodva a ket puer megfelelo cserejerol.
A glDrawBuer() paranccsal allthatjuk be a kurrens puert.
void glDrawBuer (GLenum mode);
Azrand o vagy torlendo sznpuer kivalaszt asa. A mode parameter az alabbi ertekeket
veheti fel:
GL FRONT, GL BACK, GL RIGHT, GL LEFT, GL FRONT RIGHT,
GL FRONT LEFT, GL BACK RIGHT, GL BACK LEFT, GL FRONT AND BACK,
GL AUXi, GL NONE
A GL LEFT es GL RIGHT az elso es a hatso puerekre is vonatkozik, hasonlokeppen
a GL FRONT es GL BACK a bal es a jobb oldalira is. A GL AUXi pedig az i-edik
kiegeszto sznpuert azonostja.
79
Kijelolhet unk olyan puert is amelyik nem letezik mindaddig, mg a kijelolt puerek
koz ott van letezo. Ha a kivalasztott puerek egyike sem letezik, hibara jutunk.
Egy kepsk hasznalata eseten (single-buered mode) az alapertelmezes GL FRONT,
ket kepsk (double-buered mode) eseten pedig GL BACK. (A ket mod koz otti valasztas
hardverf ugg o, tehat a GLX vagy GLUT konyvt ar megfelelo f uggvenyevel lehet megtenni.)
void glReadBuer (GLenum mode);
Annak a sznpuernek a kivalaszt asa, amelybol a glReadPixels(), glCopyPi-
xels(), glCopyTexImage*(), glCopyTexSubImage*() es glCopyConvolutionFil-
ter*() f uggvenyekkel pixeladatokat olvashatunk be. A kor abbi glReadBuer()
hv asanak hatasat ervenytelenti. Csak letez o puerekbol valo olvasas engedelyezheto.
Egy kepsk hasznalata eseten (single-buered mode) az alapertelmezes GL FRONT, ket
kepsk (double-buered mode) eseten pedig GL BACK. (A ket mod kozotti valaszt as
hardverf ugg o, tehat a GLX vagy GLUT konyvt ar megfelelo f uggvenyevel lehet megtenni.)
10.7. Puerek maszkolasa
Mielott az OpenGL berna egy adatot a kivalasztott puerbe (szn, melyseg, stencil)
maszkolja az adatokat, vagyis bitenkenti logikai es (AND) m uveletet hajt vegre a maszk
megfelelo elemen es a berando adaton. A maszkol asi m uveleteket az alabbi parancsokkal
adhatjuk meg:
void glIndexMask (GLuint mask);
Csak sznindex sznmegadasi modban van hatasa, segtsegevel a sznindex maszkolhat o.
Ahol a maszkban 1 szerepel, a sznindex megfelelo bitjet berja a rendszer a sznpuerbe,
ahol 0 szerepel azt nem. Alapertelmezes szerint a sznindex maszkjanak minden bitje 1.
void glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean al-
pha);
Csak RGBA sznmegad asi mod eseten van hatasa, segtsegevel azt szabalyozhatjuk,
hogy a rendszer az R, G, B, A ertekek koz ul melyiket rja be a sznpuerbe. GL TRUE
eseten berja, GL FALSE eseten nem rja be. Alapertelmezes szerint mind a negy kom-
ponenst berja.
void glDepthMask (GLboolean ag);
Ha a ag erteke GL TRUE, a melysegpuer rhat o, GL FALSE eseten csak olvashat o.
Alapertelmezes: GL TRUE.
void glStencilMask (GLuint mask);
Ahol a maskban 1 szerepel, a sznindex megfelelo bitjet berja a rendszer a sznpuerbe,
ahol 0 szerepel azt nem. Alapertelmezes szerint a mask minden bitje 1.
80
Sznindex modban szamos tr ukk elerhet o maszkolassal.
A melysegpuer maszkol asanak alkalmaz asara mar az atlatsz o alakzatok abrazol as anal
lathattunk peldat (lasd a 8.1. szakaszt). Tov abbi alkalmaz as lehet pl. ha ugyanabban
a kornyezetben mozog egy alak, akkor a hatteret csak egyszer rajzoljuk meg, majd a
melysegpuert csak olvashat ova tessz uk, es az eloterben mozgo alakot gy rajzoljuk meg
kepkock ankent. Ez mindaddig jol m uk odik, mg az eloterben lev o alak abrazol asahoz nem
sz ukseges a melysegpuer rhat osaga.
A stencilpuer maszkol asaval tobb 1 bit/pixel meret u stencilsk hasznalhato. Ezek
segtsegevel hajthato vegre pl. a zart fel uletekb ol a vagoskok altal lemetszett reszek be-
fedese. A glStencilMask() paranccsal megadott maszk azt szabalyozza, hogy melyik
bitsk rhat o. Az itt megadott maszk nem azonos a glStencilFunc() parancs harma-
dik parameterekent megadando maszkkal, azzal ugyanis azt szabalyozzuk, hogy a stencil
f uggveny mely bitskokat vegye gyelembe.
81
11. fejezet
A fragmentumokon vegrehajtott
vizsgalatok es m uveletek
Amikor geometriai alakzatokat, szoveget vagy raszteres kepet rajzolunk az OpenGL
segtsegevel, a megjelentend o alakzatokon sok m uveletet hajt vegre a rendszer: modell-
nez opont transzformacio, megvilagt asi szamtasok, vettesi transzformaci o, kepmez o-
transzformaci o, fragmental as. A fragmentumok is sok vizsgalaton mennek at mg veg ul
valamilyen formaban esetleg megjelennek a keperny on. A rendszer pl. gyelmen kv ul
hagyja azokat a fragmentumokat, amelyek a kepmez o adott ter uleten kv ul esnek, vagy
tavolabb vannak a nezopontt ol, mint a megfelelo pixel aktualis melysege. A vizsgalatok
utan megmarado fragmentumok sznet a megfelelo pixelek sznevel kombin alhatja a rend-
szer az alfa komponensek szerint.
Ebben a fejezetben a fragmentumokon vegrehajthato vizsgalatokat es m uveleteket
foglaljuk ossze. Ezek teljes listaja a vegrehajtas sorrendjeben a kovetkez o:
1. kivag asi vizsgalat,
2. alfa-vizsgalat,
3. stencilvizsgalat,
4. melysegvizsgalat,
5. sznkombinal as alfa szerint,
6. dithering,
7. logikai m uveletek.
Ha egy fragmentum a fentiek koz ul valamelyik vizsgalaton fennakad, akkor a tobbi
vizsgalatot nem hajtja vegre rajta a rendszer.
11.1. Kivagasi vizsgalat
A glScissor() paranccsal a rajzolast lesz ukthetj uk az ablaknak, egy az ablak oldalaival
parhuzamos oldal u teglalap alak u ter uletere. Egy fragmentum akkor jut t ul a kivag asi
vizsgalaton, ha erre a teglalapra esik a kepe.
82
void glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
A kivagasi teglalap mereteit adja meg az ablakkoordinata-rendszerben. A teglalap
bal also sarkanak koordinat ai (x, y), szelessege width, magassaga height. Alapertelmezes
szerint a kivagasi teglalap megegyezik az ablakkal.
A kivagas a stencilvizsgalat specialis esetenek tekinthet o. Letet az indokolja, hogy
ezt a kivagast konny u a hardverben implementalni, ezert nagyon gyors lehet, ellentetben
a tetszoleges alak u kivagasi ter uletet megengedo stencilvizsgalattal, melyet szoftverbol
valostanak meg.
A kivagasi vizsgalatot a glEnable(GL SCISSOR TEST) paranccsal le-
het engedelyezni, a glDisable(GL SCISSOR TEST) paranccsal letiltani, a
glIsEnabled(GL SCISSOR TEST) paranccsal pedig lekerdezheto, hogy a kivagas
engedelyezett-e. A GL SCISSOR BOX parameterrel kiadott glGetIntegerv() parancc-
sal pedig a kivagasi teglalap adatait kapjuk meg.
11.2. Alfa-vizsgalat
RGBA sznmegadasi mod eseten lehetoseg van fragmentumok elhagyasara alfa kompo-
nens uk alapjan. Ha ez a vizsgalat engedelyezett, a rendszer az uj fragmentum alfa erteket
osszehasonltja egy referenciaertekkel, es az osszehasonlt as eredmenyet ol f uggoen eldobja
a fragmentumot, vagy tov abbengedi a megjelentesi m uveletsoron. A referenciaerteket es
az osszehasonlt o f uggvenyt a glAlphaFunc() paranccsal adhatjuk meg.
void glAlphaFunc (GLenum func, GLclampf ref );
A referenciaerteket es az osszehasonlt o f uggvenyt alltja be. A megadott ref eretket
levagja a [0., 1.] intervallumra. A 11.1. tabl azat tartalmazza a func parameter le-
hetseges ertekeit, alfa az uj fragmentum alfa komponenset jeloli. Az alfa szerinti
vizsgalatot a glEnable(GL ALPHA TEST) paranccsal lehet engedelyezni, a glDisa-
ble(GL ALPHA TEST) paranccsal letiltani, a glIsEnabled(GL ALPHA TEST) pa-
ranccsal pedig lekerdezheto, hogy engedelyezett-e. A glGetIntegerv() parancsot a
GL ALPHA TEST FUNC parameterrel kiadva a kurrens osszehasonlt o f uggvenyt, a
GL ALPHA TEST REF parameterrel kiadva pedig a referenciaerteket kerdezhetj uk le.
Alapertelmezes szerint func = GL AWAYS, ref = 0 es nem engedelyezett.
Az alfa-vizsgalattal atl atszos agi algoritmust implementalhatunk. Ehhez az alakzatot
ketszer kell megjelenteni. Az elso megjelenteskor csak azokat a fragmentumokat en-
gedj uk at, melyek alfa erteke 1, a masodik soran csak azokat, melyek alfaja nem 1. A
melysegsegvizsg alatot mindket esetben engedelyezz uk, de a masodik rajzolas elott tegy uk
a melysegpuert csak olvashatov a.
Az alfa-vizsgalat segtsegevel billboarding hatas is megvalosthato. A text ura azon
reszeinek alfa erteket alltsuk 0-ra, amelyiket atl atszov a akarjuk tenni, a tobbit 1-re,
es alltsuk az alfa-vizsgalat referenciaerteket 0.5-re (vagy mas 0 es 1 koze eso ertekre),
tovabb a osszehasonlto f uggvenykent valasszuk a GL GREATER-t.
83
11.1. tabl azat. Az alfa-vizsgalathoz hasznalhato osszehasonlt o f uggvenyek
func hatasa
GL NEVER soha nem engedi tovabb a fragmentumot
GL ALWAYS mindig tovabbengedi a fragmentumot
GL LESS tov abbengedi ha alfa < ref
GL LEQUAL tov abbengedi ha alfa ref
GL EQUAL tov abbengedi ha alfa = ref
GL GEQUAL tov abbengedi ha alfa ref
GL GREATER tov abbengedi ha alfa > ref
GL NOTEQUAL tov abbengedi ha alfa ,= ref
11.3. Stencilvizsgalat
A stencilvizsgalatokat csak akkor hajtja vegre a rendszer, ha van stencilpuer, egyebkent
a fragmentumok ezen a ponton mindig t uljutnak. A vizsgalat abbol all, hogy a rend-
szer osszehasonltja a fragmentumnak megfelelo pixelhez a stencilpuerben tarolt erteket
egy referenciaertekkel, es az osszehasonlt as eredmenyet ol f ugg oen modostja a puerben
tarolt erteket. A referenciaerteket es az osszehasonlt o f uggvenyt a glStencilFunc(), a
modostast pedig a glStencilOp() paranccsal adhatjuk meg.
void glStencilFunc (GLenum func, GLint ref, GLuint mask);
A stencilvizsgalatn al hasznalt osszehasonlt o f uggvenyt (func), referenciaerteket (ref )
es maszkot (mask) alltja be. A rendszer a referenciaerteket a func f uggveny szerint
osszehasonltja a stencilpuerben tarolt ertekkel, de annak csak azokat a bitjeit veszi
gyelembe, amelyhez tartozo bitnek a mask-ban 1 az erteke. Ha a stencilpuernek s
darab bitskja van, akkor a rendszer az osszehasonlt as elott a stencilpuerbeli erteket
es a mask s darab kisebb helyiertek u bitjet logikai es (AND) m uveletbe hozza es ennek
eredmenyen vegzi el az osszehasonltast. A func parameter lehetseges ertekeit a 11.2.
tabl azat tartalmazza, a tabl azatban val a fenti bitenkenti AND m uvelet eredmenyet jeloli.
Alapertelmezes szerint func = GL ALWAYS, ref = 0 es mask minden bitje 1.
void glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
Segtsegevel azt adhatjuk meg, hogy a rendszer hogyan modostsa a stencilpuert
amikor a fragmentum tov abbmegy vagy fennakad a vizsgalaton. A fail, zfail es zpass
parameterek ertekei a 11.3. tablazat szerintiek lehetnek.
Inkrement al as es dekremental as utan a rendszer a kapott erteket a [0, 2
s
1] inter-
vallumra levagja, ahol s a stencilpuer bit/pixel merete. A fail parameterrel megadott
f uggvenyt akkor hasznalja a rendszer, ha a fragmentum nem jut t ul a stencilvizsgalaton; a
zfail -el megadottat akkor, ha a stencilvizsgalaton t uljut, de a melysegvizsgalaton nem; a
zpass-al megadottat pedig akkor, ha a stencilvizsgalaton t uljut es nincs melysegvizsg alat,
vagy van de azon is t uljutott. Alapertelmezes szerint fail = zfail = zpass = GL KEEP.
84
11.2. tabl azat. A stencilvizsgalathoz hasznalhato osszehasonlt o f uggvenyek
func hatasa
GL NEVER soha nem engedi tovabb a fragmentumot
GL ALWAYS mindig tovabbengedi a fragmentumot
GL LESS tov abbengedi ha ref < val
GL LEQUAL tov abbengedi ha ref val
GL EQUAL tov abbengedi ha ref = val
GL GEQUAL tov abbengedi ha ref val
GL GREATER tov abbengedi ha ref > val
GL NOTEQUAL tov abbengedi ha ref ,= val
11.3. tabl azat. A glStencilOp() f uggveny parametereinek lehetseges ertekei
ertek hatasa
GL KEEP megtartja a kurrens erteket
GL ZERO 0-val fel ulrja a kurrens erteket
GL REPLACE a referenciaertekkel rja fel ul
GL INCR eggyel noveli a kurrens erteket
GL DECR eggyel csokkenti a kurrens erteket
GL INVERT bitenkent invert alja a kurrens erteket
A stencilvizsgalatot a glEnable(GL STENCIL TEST) paranccsal en-
gedelyezhetj uk, a glDisable(GL STENCIL TEST) paranccsal letilthatjuk, a
glIsEnabled(GL STENCIL TEST) paranccsal pedig lekerdezhetj uk, hogy engedelyezett-
e. A stencilvizsgalatokkal kapcsolatos beallt asokat a 11.4. tabl azatbeli parameterekkel
kiadott glGetIntegerv() paranccsal kerdezhetj uk le.
A stencilvizsgalat leggyakoribb alkalmaz asa, hogy a keperny o tetszoleges alak u
ter uletet lemaszkoljuk, azaz nem engedj uk, hogy oda rajzoljon a rendszer. Ehhez elobb
tolts uk fel a stencilpuert 0-val es rajzoljuk meg a kvant alakot a stencilpuerbe 1
ertekkel. Kozvetlen ul nem lehet a stencilpuerbe rajzolni, de a kovetkez o eljar assal kozve-
tett modon ugyanazt az eredmenyt kapjuk:
a sznpuerbe zpass = GL REPLACE bealltas mellett rajzoljunk;
a sznmaszkot alltsuk 0-ra (vagy GL ZERO), hogy a sznpuerben ne tortenjen
valtoz as;
a melysegpuert tegy uk csak olvashat ova, ha nem akarjuk, hogy tartalma valtozzon.
A stencilter ulet megadasa utan alltsuk a referenciaertekeket 1-re, es az osszehasonlt o
f uggvenyt olyanra, hogy a fragmentum akkor jusson t ul, ha a stencilsk erteke megegyezik
a referenciaertekkel. A rajzolas soran ne valtoztassuk a stencilskok tartalmat!
85
11.4. tablazat. A stencil-vizsgalatok beallt asainak lekerdezesehez hasznalhat o pa-
rameterek
parameter a visszaadott ertek
GL STENCIL FUNC stencil f uggveny
GL STENCIL REF stencil referenciaertek
GL STENCIL VALUE MASK stencil maszk
GL STENCIL FAIL fail f uggveny
GL STENCIL PASS DEPTH FAIL zfail f uggveny
GL STENCIL PASS DEPTH PASS zpass f uggveny
Ha egy zart objektumot valamely vag osk elmetsz, akkor belelathatunk a testbe.
Amennyiben nem akarjuk a belsejet latni ezt konvex objektum eseten elerhetj uk ugy,
hogy egy konstans szn u fel ulettel befedj uk. Ennek erdekeben
tor olj uk a stencilpuert 0-val;
engedelyezz uk a stencilvizsgalatot, es alltsuk az osszehasonlto f uggvenyt olyanra,
hogy minden fragmentum t uljusson;
invert aljuk a stencilskok megfelelo erteket minden atengedett fragmentumnal;
rajzoljuk meg a zart konvex alakzatot.
A rajzolas utan a kepmezo azon pixeleinek stencilerteke, melyeket nem kell lefedni
0 lesz, a lefedendoknek pedig 0-tol k ul onboz o.

Alltsuk be az osszehasonlt o f uggvenyt
ugy, hogy csak akkor engedje at a fragmentumot, ha a stencilertek nem 0, es rajzoljunk a
lefedes sznevel egy akkora poligont, amely az egesz kepmezot lefedi.
Kitoltes mint aval (stippling). Ha az alakzatok kepet pontmint aval akarjuk megraj-
zolni, kitolteni, rjuk be a mint at a stencilpuerbe (a mintaval torolj uk), majd a megfelelo
feltetelek mellett rajzoljuk meg az alakzatot.
11.4. Melysegvizsgalat
Az OpenGL a melysegpuerben minden pixelhez tarolja a melyseget, ami a pixelen
abr azolt objektumoknak a nezopontt ol val o tavolsag at fejezi ki. Egesz pontosan: ez
a melyseg a kepmez okoordinata-rendszerbeli z ertek. A melysegpuert leggyakrabban
a lathatos ag szerinti abrazol ashoz hasznaljuk. Ha az uj fragmentum z erteke kisebb
mint a megfelelo pixele, akkor mind a sznpuert, mind a melysegpuert fel ulrja a rend-
szer az uj fragmentum megfelelo ertekeivel.

Igy veg ul az alakzatok lathatos ag szerinti
kepet kapjuk. A melysegpuer hasznalat at a glEnable(GL DEPTH TEST) paranc-
csal lehet engedelyezni, a glDisable(GL DEPTH TEST) paranccsal lehet letiltani, a
glIsEnabled(GL DEPTH TEST) paranccsal pedig lekerdezhet o, hogy a melysegpuer
hasznalata engedelyezett-e. Alapertelmezes szerint a melysegpuer hasznalata nem en-
gedelyezett.
86
Ne feledj uk, hogy a kep minden ujrarajzolasa elott tor olni kell a melysegpuert, vagyis
fel kell tolteni azzal a tavols aggal, amelynel tavolabbi fragmentumot nem vesz unk gye-
lembe (lasd a 10.5. szakaszt).
void glDepthFunc (GLenum func);
A melysegek osszehasonlt asara hasznalt f uggvenyt adhatjuk meg vele. Ezen a
vizsgalaton akkor jut t ul egy fragmentum, ha a z koordinataja es a megfelelo pixel
melysege a func f uggvennyel elort kapcsolatban van. A func parameter lehetseges ertekeit
a 11.5. tabl azat mutatja, fz a fragmentum melyseget, bz a puerben tarolt melyseget
jeloli. Alapertelmezes: func = GL LESS.
11.5. tabl azat. A melysegek osszehasonlt asahoz hasznalhat o f uggvenyek
func hatasa
GL NEVER soha nem engedi tovabb a fragmentumot
GL ALWAYS mindig tovabbengedi a fragmentumot
GL LESS tov abbengedi ha fz < bz
GL LEQUAL tov abbengedi ha fz bz
GL EQUAL tov abbengedi ha fz = bz
GL GEQUAL tov abbengedi ha fz bz
GL GREATER tov abbengedi ha fz > bz
GL NOTEQUAL tov abbengedi ha fz ,= bz
A glGetIntegerv() parancsot a GL DEPTH FUNC parameterrel kiadva a kurrens
melysegosszehasonltas f uggvenyet kapjuk meg.
11.5. Sznkombinalas, dithering, logikai m uveletek
Ha egy uj fragmentum az elozo vizsgalatokon kivagas, alfa, stencil, melyseg t uljut,
akkor annak sznet a megfelelo pixel sznevel tobbfelekeppen kapcsolatba hozhatjuk. Leg-
egyszer ubb esetben, ami egyben az alapertelmezes is, fel ulrjuk a fragmentum sznevel a pi-
xel sznet.

Atlatsz o objektumok rajzolasakor, vagy a kephat ar kisimtasakor vegythetj uk
a ket sznt. Ha az abrazolhat o sznek szam at a felbontas csokkentese reven novelni akarjuk,
akkor a dithering hatast alkalmazhatjuk. Veg ul sznindex modban tetszoleges bitenkenti
logikai m uveletet hajthatunk vegre a szneken.
11.5.1. Sznkombinalas
A sznkombin al as az uj fragmentum es a neki megfelelo pixelhez tarolt R, G, B es alfa
komponensek vegyteset jelenti. A vegytes tobbfelekeppen vegrehajthato, de minden
esetben a fragmentum es a pixelhez tarolt (ha tarolja a rendszer) alfa ertekek alapjan
tortenik.
87
11.5.2. Dithering
A grakus hardverek egy resze lehetoseget biztost arra, hogy a megjelentheto sznek
szam at a felbontas rov as ara novelj uk.

Uj szn ugy allthat o elo, hogy az eredetileg
hasznalhat o sznekkel kisznezett pixelmint akat jelent unk meg, melyek uj szn hatas at
eredmenyezik. Vagyis a megjelentes soran a rajzolas pixele a keperny o pixeleinek egy
negyzetes tombje lesz, azaz csokken a felbontas, de ezek a pixeltomb ok uj, az eredeti pi-
xeleken el nem erheto szn uek lesznek. Ilyen technik at hasznalnak a fekete-feher ujs agok
a fenykepek megjelentesenel, amikor a sz urke k ul onboz o arnyalatait kozeltik az elobb
vazolt technikaval.
A dithering megvalost asa teljesen hardverf uggo, az OpenGL-bol csak en-
gedelyezhetj uk, illetve letilthatjuk a glEnable(GL DITHER), illetve glDisa-
ble(GL DITHER) parancsokkal. Alapertelmezes szerint a dithering nem engedelyezett.
Ez a technika mind sznindex, mind RGBA modban hasznalhat o. RGBA modban
ez az utolso m uvelet a sznpuerbe valo ber as elott, sznindex modban meg bitenkenti
logikai m uveletek vegrehajtasara is lehetoseg van.
11.5.3. Logikai m uveletek
Sznindex modban az indexek tekinthetok egesz szamkent es bitsorozatkent is. Egesz
szamnak celszer u tekinteni a sznindexeket pl. arnyal asnal es ditheringnel. Ha azon-
ban k ulonb oz o retegekre kesz ult rajzok kompozciojakent alltunk elo egy kepet, vagyis
k ul onboz o rasi maszkot hasznalunk, hogy a rajzolast a k ul onb ozo bitskokra korlatozzuk,
celszer u a sznindexeket bitsorozatnak tekinteni.
A logikai m uveleteket az uj fragmentum es a megfelelo pixel sznindexenek bitsorozatan
hajthatjuk vegre. Ezek a m uveletek k ulon osen hasznosak es gyorsan vegrehajthatok a
bittomb ok gyors mozgatasara specializalt (bitBlt bit block transfer) hardver u grakus
berendezesek eseten. Az OpenGL-ben a glLogicOp() parancs segtsegevel valaszthatjuk
ki a vegrehajtando logikai m uveletet.
void glLogicOp (GLenum opcode);
Sznindex modban az uj fragmentum fi sznindexen es a neki megfelelo pixel pi
sznindexen vegrehajtando bitenkenti logikai m uvelet kivalaszt as ara szolgal. Az opcode
parameter lehetseges ertekeit es azok jelenteset a 11.6. tablazat mutatja. Alapertelmezes
szerint opcode = GL COPY.
A logikai m uveletek vegrehajtas at a glEnable(GL LOGIC OP) parancc-
sal engedelyezhetj uk, a glDisable(GL LOGIC OP) paranccsal letilthatjuk es a
glIsEnabled(GL LOGIC OP) paranccsal lekerdezhetj uk, hogy engedelyezett-e.
Alapertelmezes szerint nem engedelyezett. A GL LOGIC OP MODE parameterrel
kiadott glGetIntegerv() paranccsal a kurrens logikai m uvelet kerdezhet o le.
88
11.6. tablazat. A glLogicOp() f uggvennyel elorhat o bitenkenti logikai m uveletek
opcode hatasa
GL CLEAR 0
GL COPY fi
GL NOOP pi
GL SET 1
GL COPY INVERTED fi
GL INVERT pi
GL AND REVERSE fi pi
GL OR REVERSE fi pi
GL AND fi pi
GL OR fi pi
GL NAND (fi pi)
GL NOR (fi pi)
GL XOR fi XORpi
GL EQUIV (fi XORpi)
GL AND INVERTED fi pi
GL OR INVERTED fi pi
89
12. fejezet
Kivalasztas, visszacsatolas
Interaktv grakus programok rasakor gyakran van sz ukseg arra, hogy a kepernyon
lathat o objektumok koz ul valasszunk a grakus kurzor segtsegevel. Ezt a grakus in-
putot angolul pick inputnak, magyarul ramutato azonostasnak nevezz uk. Ezt a funkciot
tamogatja az OpenGL kivalaszt asi mechanizmusa.
Ugyancsak fontos, hogy az OpenGL felhasznalas aval megrt alkalmaz asaink futasi
eredmenyet mas rendszer vagy eszkoz bemeno adatkent hasznalhassa (pl. CAD rend-
szer, vagy plotter). Erre szolgal a visszacsatolasi mechanizmus.
Mindket funkciohoz sz ukseg unk van az OpenGL m ukodesi modj anak beallt asara.
GLint glRenderMode (GLenum mode);
A megjelentes, kivalaszt as es visszacsatolasi uzemm odok koz otti valaszt ast teszi le-
hetove a mode parameternek adott GL RENDER, GL SELECT es GL FEEDBACK
erteknek megfeleloen. A rendszer a megadott uzemmodban marad a kovetkez o, mas
parameterrel kiadott glRenderMode() parancs kiadasaig. A kivalasztasi uzemm od
beallt asa elott a glSelectBuer(), a visszacsatolasi uzemm od elott a glFeedbackBuf-
fer() parancsot kell kiadni. A glRenderMode() parancs altal visszaadott erteknek ak-
kor van jelentese, ha a kurrens m uk odesi mod (amirol atv altunk) vagy GL SELECT,
vagy GL FEEDBACK. Kivalaszt asi uzemm odbol valo kilepes eseten a visszaadott ertek a
talalatok szama, visszacsatolasi uzemmodn al pedig a visszacsatolasi puerbe tett adatok
szama. A negatv visszaadott ertek azt jelzi, hogy a megfelelo puer (kivalaszt asi, vagy
visszacsatolasi) t ulcsordult.
A GL RENDER MODE parameterrel kiadott glGetIntegerv() paranccsal
lekerdezhetj uk a kurrens uzemm odot.
Kivalasztasi es visszacsatolasi uzemmodban a rajzolasi utast asoknak nincs lathato
eredmenye, ilyenkor csak a megfelelo adatokat tarolja a rendszer a kor abban letrehozott
puerbe.
12.1. Kivalasztas
A ramutato azonostas megval ost asa erdekeben:
letre kell hozni az un. kivalaszt asi puert, amiben a valasztas eredmenyet kapjuk
vissza;
90
at kell terni kivalasztasi uzemm odra;
olyan specialis vettesi matrixot kell megadni, amelyik csak az adott pozci o (prak-
tikusan a grakus kurzor pozcioja) kis kornyezetet kepezi le;
a kepet ujra kell rajzolni ugy, hogy a valaszthat o kepelemeket azonost oval kell
ellatni;
vissza kell terni rajzolasi uzemm odra, amivel a kivalaszt asi puerben megkapjuk
azon kepelemek azonostoj at, melyeket legalabb reszben tartalmazott a specialis
vettesi matrixszal megadott terresz.
void glSelectBuer (GLsizei size, GLuint *buer);
A kivalasztott kepelemek adatainak visszaadas ara szolgal o puer megadasa. A buer
parameter a size meret u elojel nelk uli egeszekb ol allo puer cme. Ezt a parancsot mindig
ki kell adnunk, mielott kivalasztasi modra atternenk.
A valaszthatos ag erdekeben a kepelemeket azonost oval kell ellatni. A rendszer egy
veremszerkezetet tart karban ezen azonostok szamara. Ezt nevveremnek nevezz uk. Az
ujonnan letrehozott kepelem azonostoja a nevverem legfelso szintjen tarolt azonosto lesz.
void glInitNames (void);
A nevvermet torli.
void glPushName (GLuint name);
A name azonost ot a nevverem legfelso szintjere teszi. A nevverem melysege imple-
mentaci of ugg o, de legalabb 64. A GL MAX NAME STACK DEPTH parameterrel kia-
dott glGetIntegerv() paranccsal kaphatjuk meg a pontos erteket. A megengedettnel
tobb szint hasznalat ara tett kserlet a GL STACK OVERFLOW hibat eredmenyezi.
void glPopName (void);
A nevverem legfelso szintjen lev o azonost ot eldobja.

Ures veremre kiadott glPo-
pName() parancs a GL STACK UNDERFLOW hibat eredmenyezi.
void glLoadName (GLuint name);
A nevverem legfelso szintjen lev o erteket a name ertekkel fel ulrja. Ha a nevverem ures,
mint pl. a glInitNames() parancs kiadasa utan, akkor a GL INVALID OPERATION
hiba keletkezik. Ennek elker ulese erdekeben, ures verem eseten egy tetszoleges erteket
tegy unk a verembe a glPushName() paranccsal, mielott a glLoadName() parancsot
kiadnank.
91
void gluPickMatrix (GLdouble x, GLdouble y, GLdouble width, GLdouble height,
GLint viewport[4] );
Azt a vettesi matrixot hozza letre, amely a kepmezo (x, y) kozeppont u, width
szelesseg u es height magassag u ter uletere korlatozza a rajzolast, es ezzel a matrixszal
megszorozza a kurrens matrixverem legfelso elemet. A kepmez o-koordinat akban mega-
dott (x, y) altal aban a kurzor pozci oja, a szelesseg es magassag altal kijelolt tartomany
pedig a ramutat o azonost o eszkoz erzekenysegekent foghato fel. A viewport[] parameter
a kurrens kepmez o hatarait tartalmazza, amit a
glGetIntegerv(GL VIEWPORT,viewport);
paranccsal kaphatunk meg.
12.2. Visszacsatolas
A visszacsatolas megvalost asa nagyon hasonlo a kivalasztasehoz. A folyamat az alabbi
lepesekbol all:
letre kell hozni az un. visszacsatolasi puert, amiben a kepelemek adatait majd
megkapjuk;
at kell terni visszacsatolasi uzemmodra;
ujra kell rajzolni a kepet;
vissza kell terni rajzolasi uzemmodra, amivel megkapjuk a puerbe rt adatok
szam at;
a puerben visszakapott adatokat kiolvashatjuk, feldolgozhatjuk.
void glFeedbackBuer (GLsizei size, GLenum type, GLoat *buer);
A visszacsatolasi uzemmod adatainak tarol asara hoz letre egy puert. size a puerben
tarolhat o adatok szama, buer a tarter ulet cme. A type parameter azt specikalja, hogy
a rendszer milyen adatokat adjon vissza a cs ucspontokrol. A lehetseges ertekeket a 12.1.
tabl azat tartalmazza. A tabl azatban k erteke 1 sznindexmod eseten, 4 RGBA modnal. A
glFeedbackBuer() parancsot ki kell adni mielott visszacsatolasi uzemm odba lepnenk.
void glPassThrough (GLoat token);
Ha visszacsatolasi modban hvjuk meg, akkor egy markert tesz a visszaa-
dott adatok koze, mas m ukodesi modban meghvasa hatastalan. A marker a
GL PASS THROUGH TOKEN konstansbol es a token lebegopontos ertekb ol all. A gl-
Begin() es glEnd() koz otti kiadasa a GL INVALID OPERATION hibat eredmenyezi.
92
12.1. tablazat. A visszaadando adatok tpusa
type koordinat ak szn text ura osszes
GL 2D k 2
GL 3D x, y, z 3
GL 3D COLOR x, y, z k 3 + k
GL 3D COLOR TEXTURE x, y, z k 4 7 + k
GL 4D COLOR TEXTURE x, y, z k 4 8 + k
12.2. tabl azat. A visszaadott kodok
alapelem tpusa kod adat
pont GL POINT TOKEN cs ucspont
szakasz
GL LINE TOKEN
GL LINE RESET TOKEN
ket cs ucspont
poligon GL POLYGON TOKEN cs ucspontok
bitterkep GL BITMAP TOKEN cs ucspont
pixeltomb
GL DRAW PIXEL TOKEN
GL COPY PIXEL TOKEN
cs ucspont
megjegyzes GL PASS THROUGH TOKEN lebegopontos szam
93
13. fejezet
Text urak
A val oszer u kepek letrehozas anak egy fontos eszkoze a text uralekepezes. A val osagban
a targyak nem egyszn uek, hanem a fel ulet ukon mint ak vannak. Ezen mint ak geome-
triai ler asa es geometriai objektumkent val o kezelese (amit az eddig targyalt eszkoz ok
lehetove tennenek) azonban rendkv ul idoigenyes es nagy tarolokapacitast lekoto fela-
dat lenne. Mindamellett nem is lenne eleg val oszer u, hiszen a mint ak altal aban eles
kont ur uak, t ul szabalyosak lennenek. Ezzel szemben, ha egy valodi objektum fel uletenek
kepet (mint azatat) vissz uk fel a szamtogeppel eloalltott objektumra, sokkal eletszer ubb
lesz a kep. A terbeliseg erzekeltetesenek fokoz asara is alkalmas a text ura, ugyanis a
text ur at a modellterben rendelj uk hozza a geometriai alakzathoz, gy a fel uleti mintan is
ervenyes ul a centralis vettesbol eredo, un. perspektv torztas, pl. egy teglafal tavolabb
lev o tegl ai kisebbek lesznek a kepen, es a tegl ak szemkozti elei nem lesznek parhuzamosak.
A text urakat tobbnyire ketdimenzi osnak (skbelinek) gondoljuk, azonban a text ur ak
lehetnek egy- vagy haromdimenziosak is. A text urakat lekepezhetj uk ugy, hogy azok
lefedjek a poligonokat (poligonhalokat), de ugy is, hogy a text ura az objektum szintvo-
nalait, vagy mas jellemzoit szemleltesse. Az erosen ragyogo fel ulet u objektumok ugy is
text ur azhatok, hogy azt a hatast keltsek, mintha a kornyezet t ukroz odne az objektumon.
A text ura geometriailag egy teglalap alak u ter ulet, mely sorokba es oszlopokba rendezett
text uraelemekb ol, roviden texelekbol (texture element) ep ul fel. A text ura tehat adatok
1, 2, vagy 3 dimenzios tombjenek tekinthet o. Az egyes texelekhez tarolt adat kepviselhet
sznt, fenyer osseget vagy szn es alfa erteket, azaz 1, 2, 3 vagy 4 adat tartozhat minden
egyes texelhez.
A teglalap alak u text urakat azonban tetszoleges alak u poligonokra, poligonhal okra kell
rahelyezni. A rahelyezes mikentjet a modellterben kell megadni, gy a text ur akra is hat-
nak a modell- es vettesi transzformaciok. Ennek erdekeben az objektumok letrehoz asakor
a cs ucspontok geometriai koordinat ai mellett a text urakoordinat akat is meg kell adni.
Egy ketdimenzios text ura koordinat ai a [0., 1.] [0., 1.] egysegnegyzeten bel ul valtoznak.
Amikor a cs ucspontokhoz hozzarendelj uk a text ura pontjait ezen a ter uleten kv ul eso
koordinatap art is megadhatunk, de elo kell rnunk, hogy az egysegnegyzeten kv uli koor-
dinat akat hogy ertelmezze a rendszer, pl. ismetelje a text urat (tegye egymas melle).
A text ura hatasanak ervenyestese a kepmez okoordinata-rendszereben az abrazoland o
objektum fragment alasa utan tortenik.

Igy elofordulhat, hogy a transzformaci okon
atesett text ura tobb eleme latszik egy fragmentumon, vagy ellenkez oleg, tobb fragmen-
tumon latszik egyetlen texel. Ennek a problem aknak tobbfele megoldas at kn alja a
94
rendszer, a felhasznal ok altal kivalaszthato un. sz uresi m uveleteken kereszt ul. Ezek a
m uveletek rendkv ul szamtasigenyesek, ezert a fejlettebb grakus munkahelyek hard-
verbol tamogatj ak a text uralekepezest. Ha tobb text urat felvaltva hasznalunk, ak-
kor celszer u text uraobjektumokat letrehozni, melyek egy-egy text ur at (esetleg tobb fel-
bont asban) tartalmaznak. Neh any OpenGL implement acioban text uraobjektumok mun-
kacsoportjat lehet letrehozni. A csoporthoz tartozo text urak hasznalata hatekonyabb,
mint a csoporton kv ulieke. Ezeket a nagy hatekonysag u text uraobjektumokat rezidens-
nek nevezik, es ezek hasznalat at altal aban hardveres vagy szoftveres gyorstok segtik.
A felhasznalo altal elorhat o, hogy a text ura hogyan hasson a megjelentend o objektum
sznere. Megadhatjuk, hogy a megfelelo texel(ek) szne legyen a fragmentum szne (egys-
zer uen fel ulrja a fragmentum sznet, mintha egy matricat ragasztanank ra), elorhatjuk,
hogy a text ur aval modostsa (pontosabban skal azza) a fragmentum sznet, ami a meg-
vilagtas es text uraz as hatasat kombinalja, veg ul a fragmentum sznenek es egy konstans
sznnek a text uraelemen alapulo kevereset is elorhatjuk.
Text urazott poligonhal o megjelentesehez meg a legegyszer ubb esetben is az alabbi
lepeseket kell megtenni:
engedelyezni kell a text uralekepezest;
letre kell hozni egy text uraobjektumot es hozza kell rendelni egy text urat;
meg kell adni, hogy a text ur at hogyan alkalmazza a rendszer a fragmentumokra
(sz ur o megadasa);
engedelyezni kell a text uralekepezest;
meg kell rajzolni a text urazand o objektumokat ugy, hogy a cs ucspontok geometriai
koordinat ai mellett megadjuk a text urakoordinatait is.
13.1. A text uralekepezes engedelyezese
Az objektumok text urazott megjelentesehez a megrajzolasuk elott engedelyezni kell a
text uralekepezest. Az engedelyezes, illetve letiltas a szokasos glEnable(), illetve glDisa-
ble() parancsoknak a GL TEXTURE 1D, GL TEXTURE 2D vagy GL TEXTURE 3D
szimbolikus konstansokkal valo kiadasaval lehetseges. Ezekkel rendre az 1, 2, illetve
3 dimenzios text uralekepezest engedelyezhetj uk vagy tilthatjuk le. Ha egyszerre tobb
text uralekepezes is engedelyezett, a rendszer mindig a legnagyobb dimenzioj ut veszi gye-
lembe. Az ilyen helyzeteket azonban lehetoseg szerint ker ulj uk el!
13.2. Text ura megadasa
Elobb a termeszetesnek t uno ketdimenzios text ura megadasaval, majd az elso hallasra
kevesbe kezenfekv o egy- es haromdimenzios text ur akeval foglalkozunk.
95
void glTexImage2D (GLenum target, GLint level, GLint internalFormat, GLsizei
width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid
*texels);
Ketdimenzios text urat hoz letre. A target parameter erteke GL TEXTURE 2D vagy
GL PROXY TEXTURE 2D lehet. A level parametert akkor hasznaljuk, ha a text ur at
tobb felbont asban is tarolni akarjuk, egyebkent a level parameternek adjuk a 0 erteket.
(A tobb felbont asban tarolt text ur ak hasznalat at a 13.7. szakaszban targyaljuk.)
Az internalFormat (belso formatum) parameterrel azt rjuk elo, hogy egy kep texe-
leinek a ler asahoz az R, G, B, A sznkomponensek melyiket, esetleg fenyer osseget vagy
szner osseget hasznalja a rendszer.

Erteke 1, 2, 3, 4 vagy az alabbi elore denialt szimbo-
likus konstansok valamelyike lehet:
GL ALPHA, GL ALPHA4, GL ALPHA8, GL ALPHA12, GL ALPHA16,
GL LUMINANCE, GL LUMINANCE4, GL LUMINANCE8, GL LUMINANCE12,
GL LUMINANCE16, GL LUMINANCE ALPHA, GL LUMINANCE4 ALPHA4,
GL LUMINANCE6 ALPHA2, GL LUMINANCE8 ALPHA8,
GL LUMINANCE12 ALPHA4, GL LUMINANCE12 ALPHA12,
GL LUMINANCE16 ALPHA16, GL INTENSITY, GL INTENSITY4,
GL INTENSITY8, GL INTENSITY12, GL INTENSITY16, GL RGB, GL R3 G3 B2,
GL RGB4, GL RGB5, GL RGB8, GL RGB10, GL RGB12, GL RGB16, GL RGBA,
GL RGBA2, GL RGBA4, GL RGB5 A1, GL RGBA8, GL RGB10 A2, GL RGBA12,
GL RGBA16.
Ezen konstansok jelenteset a text uraf uggvenyek ler as anal ismertetj uk.
Az OpenGL 1.0 verzi oval val o kompatibilit as erdekeben az 1, 2, 3, illetve 4 ertekek
rendre a GL LUMINANCE, GL LUMINANCE ALPHA, GL RGB, illetve GL RGBA
szimbolikus konstansoknak felelnek meg. A szimbolikus konstansokkal a texelekhez tarolt
komponenseket es azok pontossag ara vonatkozo kv ansagunkat adhatjuk meg, pl. a
GL R3 G3 B2 konstanssal azt, hogy a piros es zold sznt 3-3 biten, a keket pedig 2 biten
tarolja a rendszer. Ez nem jelenti azt, hogy a rendszer biztosangy is hajtja vegre a paran-
csot. Csak az garant alt, hogy az OpenGL az implementaci o altal tamogatott formatumok
koz ul az ehhez legkozelebb all o szerint tarolja a texelekhez kapcsolt adatokat.
A width es height parameterek a text ura szelesseget, illetve magassag at adjak meg. A
border a text ura hatar anak szelesseget adja meg, erteke vagy 0, vagy 1 lehet. A width, il-
letve height parameterek ertekenek 2
w
+2b, illetve 2
h
+2b alak unak kell lenni, ahol 0 h, w
egesz szamok es b a border erteke. A text ur ak meretenek maximuma implement aciof uggo,
de legalabb 64 64, illetve hatarral 66 66 -nak kell lennie.
A format es type parameterek a text uraadatok formatumat es tpusat rj ak le.
Jelentes uk megegyezik a glDrawPixels() parancs megfelelo parametereinek jelentesevel.
Val ojaban a text uraadatok ugyanolyan formatum uak, mint a glDrawPixels() pa-
rancs altal hasznalt adatoke, ezert a glPixelStorage*() es glPixelTransfer*()
parancsok altal bealltott formatumokat hasznalja mindketto. A format parameter
erteke GL COLOR INDEX, GL RGB, GL RGBA, GL RED, GL GREEN, GL BLUE,
GL ALPHA, GL LUMINANCE vagy GL LUMINANCE ALPHA lehet, vagyis a
GL STENCIL INDEX es GL DEPTH COMPONENT kivetelevel azokat, amelyeket a
glDrawPixels() is hasznal.
96
A type parameter pedig a GL BYTE, GL UNSIGNED BYTE, GL SHORT,
GL UNSIGNED SHORT, GL INT, GL UNSIGNED INT, GL FLOAT, GL BITMAP
vagy a tomortett pixeladatok valamelyiket.
A texels a letrehozand o text ura adatainak tarolas ara szolgalo tomb cme. A belso
tarol asi formatumnak (internalFormat) hatasa van a text uram uveletek vegrehajtasi
sebessegere is. Az azonban, hogy melyik hatekonyabb, teljes mertekben imple-
mentaci of ugg o.
A text ur ak sorai es oszlopai szam anak (a hatart levonva) 2 hatvany anak kell lenni.
Ha egy olyan kepb ol szeretnenk text ur at letrehozni, amely merete ennek nem tesz eleget,
a GLU f uggvenyk onyvtar gluScaleImage() f uggvenyet celszer u hasznalni.
int gluScaleImage (GLenum format, GLint widthin, GLint heightin, GLenum typein,
const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *da-
taout);
A datain cmen tarolt kepadatokat a megfelelo pixeltarolasi modot hasznalva kicso-
magolja, a kvant meret uve skal azza, majd a dataout cmen kezd odo memoriater uletre
letarolja. A format, typein (a bejov o adatok tpusa) es a typeout (a kimeno adatok
tpusa) a glDrawPixels() altal tamogatott barmely formatum, illetve tpus lehet. A
bejovo widthin heightin meret u kepet linearis transzformaci oval es box sz uressel tran-
szformalja widthout heightout meret uve, majd ezt a dataout cmen kezdod o ter uletre
kirja a kurrens GL PACK* pixeltarol asi modnak megfeleloen. Az eredmeny tarolas ara
alkalmas memoria lefoglalas at a f uggveny meghvasa elott el kell vegezni.
A visszaadott ertek 0, ha a f uggveny sikeresen vegrehajtodott, egyebkent egy GLU
hiba uzenet.
(Az OpenGL 1.2-ben bevezetett tomortett pixeltarolasi formatumokat a GLU 1.3
tamogatja.)
A keppuer tartalmabol is letrehozhato text ura. Erre szolgal a glCopyTexI-
mage2D(), mely a keppuerb ol kiolvas egy teglalap alak u ter uletet, majd ennek pixeleibol
letrehozza a text ura texeleit.
void glCopyTexImage2D (GLenum target, GLint level, GLint internalFormat, GLint
x, GLint y, GLsizei width, GLsizei height, GLint border)
A keppuer adataibol egy ketdimenzios text urat hoz letre. A pixeleket a kurrens
(GL READ BUFFER) puerbol kiolvassa es ugy dolgozza fel oket, mint a glCopyPi-
xels() parancs eseten azzal a k ulonbseggel, hogy a pixeleket nem a keppuerbe, hanem
a text ura szamara lefoglalt memoriaba masolja. A glPixelTransfer*() bealltasait es a
tobbi pixelatviteli m uveletet hasznalja.
A target parameternek a GL TEXTURE 2D erteket kell adni. A level, internalFormat,
border, width es height parameterek jelentese ugyanaz, mint a glTexImage2D() eseten.
x, y a kimasoland o pixeltomb bal also sarkanak a keppuerbeli koordinat ai.
97
13.3. Text urahelyettesto
A text ur at hasznal o OpenGL programok memoriaigenye tekintelyes, es implementaci ot ol
f ugg oen k ul onb ozo megszort asok vannak a text uraform atumokra. Ezert egy specialis
text urahelyettesto (proxy) hasznalhat o annak eldontesere, hogy vajon az adott OpenGL
implementaci o tudna-e kezelni egy adott text urat a kv ant felbont as(ok)ban.
Ha a glGetIntegerv() f uggvenyt meghvjuk a GL MAX TEXTURE SIZE parameterrel,
akkor megkapjuk, hogy az adott implement aci oban legfeljebb mekkora meret u (szelesseg,
magassag a hatarok nelk ul) 2D-s text urak hasznalhatok. A 3D-s text urak eseten ugya-
nezt a GL MAX 3D TEXTURE SIZE parameter hasznalataval erj uk el. A fenti ertek
meghataroz asakor azonban a rendszer nem veszi (nem veheti) gyelembe a text urak
tarol asanak formatumat es azt, hogy a text urat esetleg tobb felbont asban is tarolni kell
(mipmapping).
Egy specialis text urahelyettesto funkci o segt abban, hogy pontosan lekerdezhet o legyen
az OpenGL-tol, hogy egy text ura adott formatum szerint tarolhato-e a hasznalt imple-
mentaci oban. Ehhez a text ur ak letrehoz as at segto glTexImage2D() f uggvenyt kell
meghvni ugy, hogy a target parameternek GL PROXY TEXTURE 2D erteket adjuk,
a level, internalFormat, width, height, border, format es type parametereknek ugyanazt
az erteket adjuk, mintha tenylegesen letre akarn ank hozni az adott text urat, a texels pa-
rameterben pedig a NULL cmet adjuk. Ezutan a glGetTexLevelParameter() paran-
ccsal lekerdezhetj uk, hogy rendelkezesre all-e elegendo eroforras a text ura letrehozas ara.
Ha nem all rendelkezesre, akkor a lekerdezett text ura jellemzo ertekekent 0-at ad
vissza a f uggveny. Ezzel a f uggvennyel tenylegesen letrehozott text ur ak parameterei is
lekerdezhet ok, nemcsak az informaci oszerzes erdekeben letrehozott text urahelyettest oke.
void glGetTexLevelParameterifv (GLenum target, GLint level, GLenum pname,
TYPE *params);
A level parameterrel megadott reszletezesi szintnek megfelelo text uraparametereket
adja vissza a params valtoz oban.
A target parameter lehetseges ertekei: GL TEXTURE 1D, GL TEXTURE 2D,
GL TEXTURE 3D, GL PROXY TEXTURE 1D, GL PROXY TEXTURE 2D,
GL PROXY TEXTURE 3D.
A pname parameter lehetseges ertekei:
GL TEXTURE WIDTH, GL TEXTURE HEIGHT, GL TEXTURE DEPTH,
GL TEXTURE BORDER, GL TEXTURE INTERNAL FORMAT,
GL TEXTURE RED SIZE, GL TEXTURE GREEN SIZE,
GL TEXTURE BLUE SIZE, GL TEXTURE ALPHA SIZE,
GL TEXTURE LUMINANCE SIZE, GL TEXTURE INTENSITY SIZE.
Az OpenGL 1.0 verzioval val o kompatibilitas erdekeben a pname parameternek a
GL TEXTURE COMPONENTS ertek is adhato, a magasabb verzi oj u OpenGL imple-
mentaci oknal azonban a GL TEXTURE INTERNAL FORMAT a javasolt szimbolikus
konstans.
Pelda a text urahelyettesto hasznalat ara
GLint height;
98
glTexImage2D(GL PROXY TEXTURE 2D, 0, GL RGBA8, 64, 64, 0, GL RGBA,
GL UNSIGNED BYTE, NULL);
glGetTexLevelPrarameteriv(GL PROXY TEXTURE 2D, 0, GL TEXTURE HEIGHT,
&height);
A text urahelyettesto mechanizmusnak jelentos hianyoss aga, hogy segtsegevel csak
azt tudjuk meg, hogy a rendszer kepes lenne-e betolteni az adott text ur at. Nem veszi
gyelembe, hogy pillanatnyilag a text ura eroforrasok milyen mertekben foglaltak, vagyis
azt nem tudjuk meg, hogy pillanatnyilag van-e elegendo kapacitas az adott text ura
hasznalat ara.
13.4. Text urak modostasa
Egy uj text ura letrehozasa tobb szamtasi kapacit ast kot le, mint egy meglev o modostasa.
Ezert az OpenGL-ben lehetoseg van a text urak tartalmanak reszbeni vagy teljes atr asara.
Ez k ul onosen hasznos lehet olyan esetekben, amikor a text urak alapjat val os idoben
letrehozott videokepek alkotj ak. A text ura modostasa mellet szol az is, hogy mg
a text ura szelessegenek es magassag anak 2 hatvanyanak kell lenni, addig egy text ura
tetszoleges meret u teglalap alak u ter ulete atrhat o, es a videokepek meretei altalaban
nem 2 hatvanyai.
void glTexSubImage2D (GLenum target, GLint level, GLint xoset, GLint yoset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *tex-
els);
A kurrens ketdimenzi os text ura egy teglalap alak u ter uletet atrja a texels cmen
kezdod o text uraadatokkal. A target parameternek a GL TEXTURE 2D erteket kell
adni. A level, format es type parameterek ertelmezese a glTexImage2D() parancsnal
hasznaltakkal megegyezik. xoset, yoset az atrand o teglalap alak u ter ulet bal also
sarkanak koordinat ai a text ura bal also sarkahoz kepest, width a teglalap szelessege, height
a magassaga. Az gy elhelyezett teglalap nem loghat ki a text urat lero teglalapb ol. Ha a
szelesseg vagy magassag erteke 0, akkor a parancsnak nem lesz hatasa a kurrens text urara,
de nem kapunk hiba uzenetet.
A kepreszre a glPixelStore*(), glPixelTransfer*() altal bealltott modok, tov abba
az egyeb pixelatviteli m uveletek is hatassal vannak.
A text urak letrehoz as ahoz hasonloan a text urak modost as ahoz is hasznalhatjuk a
keppuert.
void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoset, GLint yo-
set, GLint x, GLint y, GLsizei width, GLsizei height);
A keppuerb ol kimasolt keppel helyettesti a kurrens ketdimenzi os text ura megadott
teglalap alak u ter uletet. A kurrens GL READ BUFFER puerbol kiolvassa a megadott
pixeleket, es pontosan ugy dolgozza fel, mint a glCopyPixels() parancs eseten azzal a
k ul onbseggel, hogy nem a keppuerbe masolja hanem a text uramemori aba. A glPixel-
Transfer*() es a tobbi pixelatviteli m uvelet bealltasait hasznalja.
99
A target es level parameterek ertelmezese megegyezik a glTexSubImage2D() parancs
megfelelo parametereinek ertelmezesevel. A text ura atrand o ter uletet az xoset, yoset,
width, height parameterek hatarozz ak meg ugyan ugy, mint glTexSubImage2D() parancs
eseten. Erre a ter uletre a keppuernek az a teglalapja ker ul, mely bal also sarkanak
koordinat ai x, y szelessege width, magassaga height.
13.5. Egydimenzios text urak
Elofordulhat, hogy a mintazat csak egy dimenzioban valtozik. Ilyen esetben elegendo
(takarekosabb) egydimenzios text urat hasznalni. Az egydimenzios text ura olyan specialis
ketdimenzi os text ur anak tekinthet o, melynek alul es fel ul nincs hatara es a magassaga 1
(height = 1). Az eddig megismert, ketdimenzios text urakat letrehoz o, modost o parancsok
mindegyikenek van egydimenzios megfeleloje.
void glTexImage1D (GLenum target, GLint level, GLint internalFormat, GLsizei
width, GLint border, GLenum format, GLenum type, const GLvoid *texels);
Egydimenzios text urat hoz letre. A target parameternek a GL TEXTURE 1D vagy
GL TEXTURE PROXY 1D erteket kell adni. A tobbi parameter jelentese megegyezik a
glTexImage2D() parancs megfelelo parameterenek jelentesevel.
void glTexSubImage1D (GLenum target, GLint level, GLint xoset, GLsizei width,
GLenum format, GLenum type, const GLvoid *texels);
Egydimenzios text uratomb ot hoz letre, mellyel fel ulrja a kurrens egydimenzios text ura
megadott szakaszat. A target parameternek a GL TEXTURE 1D erteket kell adni. A
tobbi parameter jelentese megegyezik a glTexSubImage2D() parancs megfelelo pa-
rameterenek jelentesevel.
void glCopyTexImage1D (GLenum target, GLint level, GLint internalFormat, GLint
x, GLint y, GLsizei width, GLint border)
Egydimenzios text ur at hoz letre a keppuer felhasznal asaval. A target parameternek
a GL TEXTURE 1D erteket kell adni. A tobbi parameter jelentese megegyezik a glCo-
pyTexImage2D() parancs megfelelo parameterenek jelentesevel.
void glCopyTexSubImage1D (GLenum target, GLint level, GLint xoset, GLint x,
GLint y, GLsizei width);
A kurrens egydimenzios text ura kijelolt reszet fel ulrja a keppuerb ol vett adatokkal.
A target parameternek a GL TEXTURE 1D erteket kell adni. A tobbi parameter jelentese
megegyezik a glCopyTexSubImage2D() parancs megfelelo parameterenek jelentesevel.
100
13.6. Haromdimenzi os text urak
A haromdimenzios text ur ak egymas moge helyezett ketdimenzios text urak
(text uraretegek) osszessegenek tekinthet ok. Az ilyen text ur ak adatai tehat
haromdimenzi os tombben tarolhat ok. A haromdimenzi os text urak leggyakoribb
alkalmazasi ter ulete az orvostudom any es a geologia, ahol a text ura retegei CT (com-
puter tomograph) vagy MRI (magnetic resonance image) kepeket, illetve kozetreteget
kepviselnek. A haromdimenzi os text ur ak az OpenGL 1.2 verzi oban valtak a rendszer
magjanak reszeve, kor abban csak elterjedt kiegesztesek voltak.
Minden ketdimenzi os text ur at letrehozo es manipulalo parancsnak megvan a
haromdimenzi os megfeleloje.
void glTexImage3D (GLenum target, GLint level, GLint internalFormat, GLsizei
width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type,
const GLvoid *texels);
Haromdimenzios text ur at hoz letre. A target parameternek a GL TEXTURE 3D vagy
GL TEXTURE PROXY 3D erteket kell adni. A level, internalFormat, width, height, bor-
der, format, type es texels parameterekre ugyanaz vonatkozik, mint a glTexImage2D()
parancsnal. A width, illetve height parameterek rendre a retegek szelesseget, illetve ma-
gassag at jelolik, a depth parameter a retegek szamat, a text ura melyseget. A depth pa-
rameterre ugyanazok a megszortasok ervenyesek, mint a width es height parameterekre.
void glTexSubImage3D (GLenum target, GLint level, GLint xoset, GLint yoset,
GLint zoset, GLsizei width, GLsizei height, GLsizei depth, GLint format, GLenum
type, const GLvoid *texels);
A kurrens haromdimenzios text ura kijelolt reszet rja fel ul. A target parameternek a
GL TEXTURE 3D erteket kell adni. A level es type parameterek ertelmezese a glTexI-
mage3D() parancsnal hasznalt ugyanilyen nev u parameterekevel megegyezik. A width,
height, depth parameterek rendre a modostand o teglatest szelesseget, magassagat es
melyseget jelolik, az xoset, yoset, zoset harmas pedig ezen teglatest bal also sarkanak
a text ura bal also cs ucspontj ahoz viszonytott koordinat ait. A modostando text uraresz
nem loghat ki a text ur abol. Az uj text uraadatok a texels cmen kezdodnek.
void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoset, GLint yo-
set, GLint zoset, GLint x, GLint y, GLsizei width, GLsizei height);
A kurrens haromdimenzios text ura megadott retegenek elort teglalap alak u ter uletet
fel ulrja a keppuerb ol kivett adatokkal. A kurrens GL READ BUFFER puerbol kiol-
vasott pixeleket ugyan ugy dolgozza fel, mint a glCopyPixels() parancs, az egyetlen
k ul onbseg az, hogy a pixeleket nem a keppuerbe, hanem a text uramemori aba masolja.
A target parameternek a GL TEXTURE 3D erteket kell adni. A level parameter je-
lentese megegyezik az eloz o parancsoknal lertakkal. Hatasa: a megfelelo keppuer azon
teglalapjanak pixeleit, melynek szelessege width, magassaga height, bal also sarkanak
kepmez obeli koordinat ai x, y bemasolja a kurrens haromdimenzios text ura zoset
101
retegenek azon width szelesseg u, height magassag u teglalapjara, mely bal also sarkanak a
retegen bel uli koordinat ai xoset, yoset.
13.7. A text urak reszletessegenek szintje (mipmap-
ping)
A text ur akat az objektumkoordinata-rendszerben kapcsoljuk hozza az abr azolando alak-
zatokhoz, melyek aztan szamos transzformaci on mennek kereszt ul. Elofordulhat, hogy
egy-egy poligon kepe csak egyetlen pixel lesz. Ennek megfeleloen a poligonra fesztett
text ura is egyetlen pontt a zsugorodik, amit a rendszernek az eredeti meret u, pl. 128128
-as text ur abol kell kiszamtania. Ilyen esetekben gyakran elofordul, hogy a kornyezetet ol
nagyon el uto lesz az eredmeny, pl. csillogo-villogo pixelek jonnek elo. Ezen problema
kik usz obolese erdekeben a text urab ol egyre csokken o felbont as u csaladot hoznak letre,
egy text ura g ul at (ha a csokkeno felbontas u text ur akat - teglalapokat - egymas fole he-
lyezz uk) es az abrazolt poligon csokken o meretenek megfelelo tagjat hasznalja a rendszer.
Ezt az eljar ast nevezz uk mipmapping-nek, ahol a mip a multum in parvo (sok dolog kis
helyen) latin kifejezes rovidtese. Ennek hasznalatahoz a text urar ol minden lehetseges
kicsinytest el kell keszteni, vagyis pl. egy 64 16 -os text ur arol: 32 8, 16 4, 8 2,
4 1, 2 1, 1 1. Az egyes kicsinytett text urak mindig az eggyel nagyobb felbont asbol
kesz ulnek, gy az ugrasszer u valtozas kik uszob olheto. Ezeket a kicsinytett text urakat is
a glTexImage2D() f uggvennyel lehet megadni, az alapfelbont as (a legnagyobb) szintje
(level ) legyen 0, es a felbont as csokkenesevel a level erteke no.
13.7.1. Automatikus letrehozas
Ha a 0-s szintet (a legnagyobb felbontast) mar letrehoztuk, akkor az alabbi GLU
f uggvenyekkel automatikusan letrehozhatjuk az osszes tobbit.
int gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLint width,
GLenum format, GLenum type, void *texels);
int gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLint width, GLint
height, GLenum format, GLenum type, void *texels);
int gluBuild3DMipmaps (GLenum target, GLint internalFormat, GLint width, GLint
height, GLint depth, GLenum format, GLenum type, void *texels);
Letrehozza a text ura osszes sz ukseges alacsonyabb felbontas u valtozat at es a glTexI-
mage*D() felhasznal asaval betolti oket. A target, internalFormat, width, height, format,
type es texels parameterekre ugyanaz vonatkozik, mint a megfelelo glTexImage*D()
f uggvenynel. A f uggvenyek a 0 erteket adjak vissza, ha minden felbontast sikeresen
letrehoztak, egyebkent pedig egy GLU hiba uzenetet.
Arra is lehetoseg van, hogy ne az osszes lehetseges, hanem csak a megadott szint u
felbont asokat hozzuk automatikusan letre.
102
int gluBuild1DMipmapLevels (GLenum target, GLint internalFormat, GLint width,
GLenum format, GLenum type, GLint level, GLint base, GLint max, void *texels);
int gluBuild2DMipmapLevels (GLenum target, GLint internalFormat, GLint width,
GLint height, GLenum format, GLenum type, GLint level, GLint base, GLint max,
void *texels);
int gluBuild3DMipmapLevels (GLenum target, GLint internalFormat, GLint width,
GLint height, GLint depth, GLenum format, GLenum type, GLint level, GLint base,
GLint max, void *texels);
A level szint u texels text ur ab ol a base es max koz otti texeleket hozza letre, es a
glTexImage*D() f uggvennyel betolti azokat. A tobbi parameter ertelmezese ugyanaz,
mint a megfelelo glTexImage*D() f uggvenynel. A f uggvenyek a 0 erteket adjak vissza,
ha minden felbontast sikeresen letrehoztak, egyebkent pedig egy GLU hiba uzenetet.
13.8. Sz ur ok
A text ur ak teglalap alak uak, melyeket tetszoleges alak u poligonokra helyez unk ra a
modellterben, es a poligonnal egy utt transzformalja a rendszer a keperny o koordinata-
rendszerebe. Ezen transzformaciok eredmenyekent ritkan fordul elo, hogy egy pixelen
pontosan egy texel latszik, sokkal gyakoribb, hogy egy pixelen tobb texel latszik vagy
megfordtva, egy texel tobb pixelen. Az utobbi ket esetben nem egyertelm u, hogy
mely texeleket hasznalja a rendszer, es hogy a texeleket hogyan atlagolja vagy inter-
polalja. Erre a celra az OpenGL tobb, un. sz urot biztost, melyekb ol a felhasznal o
valaszthat. A valaszt as az egymasnak ellentmond o minoseg es sebesseg kozotti kom-
promisszum megkoteset jelenti. K ul on lehet sz ur ot valasztani a texelek kicsinytesehez
es nagyt asahoz. Sok esetben nem kicsinytesr ol vagy nagyt asrol van szo, hiszen pl.
elofordulhat, hogy az egyik tengelyiranyba kicsinyteni, a masikba nagytani kellene, azaz
skal azasnak (an transzformaci onak) kellene alavetni az adott texeleket. Ilyen esetekben
az OpenGL donti el, hogy kicsinyt-e vagy nagyt, miutan skalazni nem tudja a texeleket.
Legjobb azonban az ilyen helyzetek elker ulese.
A texelek kicsinytesere, illetve nagytas ara hasznalt sz uroket a glTexParameter*()
paranccsal valaszthatjuk ki. Ez egy altal anosabb cel u f uggveny, tovabbi alkalmaz asa
a 13.11.2. pontban talalhat o.
void glTexParameterif (GLenum target, GLenum pname, TYPE param);
void glTexParameterifv (GLenum target, GLenum pname, TYPE *param);
A target parameternek a GL TEXTURE 1D, GL TEXTURE 2D vagy
GL TEXTURE 3D erteket adjuk attol f ugg oen, hogy hany dimenzios text ur arol van szo.
A pname parameternek a GL TEXTURE MAG FILTER a nagyt ashoz hasznaland o
sz ur o bealltas ahoz es a GL TEXTURE MIN FILTER erteket a kicsinyteshez. param
lehetseges ertekeit a 13.1. tabl azat tartalmazza.
Ha a param = GL NEAREST, akkor mind nagytas, mind kicsinytes eseten a pixel
kozeppontjahoz legkozelebbi texelt hasznalja a rendszer. Ez gyakran a kornyezetet ol
103
13.1. tabl azat. A text ur ak kicsinytesehez es nagytas ahoz megadhato sz ur ok
target param
GL TEXTURE MAG FILTER GL NEAREST, GL LINEAR
GL TEXTURE MIN FILTER
GL NEAREST, GL LINEAR
GL NEAREST MIPMAP NEAREST
GL NEAREST MIPMAP LINEAR
GL LINEAR MIPMAP NEAREST
GL LINEAR MIPMAP LINEAR
nagyon eltero pixelt eredmenyez.
param = GL LINEAR eseten a text ura dimenzioj anak megfeleloen a pixel
kozeppontjahoz legkozelebbi 2, 2 2 vagy 2 2 2 pixelt linearisan interpolalja a
rendszer mind kicsinytesnel, mind nagyt asn al. Elofordulhat, hogy az gy kivalasztott
texelek t ulny ulnak a text ura hataran. Ilyen esetekben az eredmeny ket tenyezot ol
f ugg: egyreszt attol, hogy a text ur anak van-e hatara, masreszt a text ura ,,ismetlesenek
beallt as atol (GL REPEAT, GL CLAMP, GL CLAMP TO EDGE lasd a 13.11.2. pon-
tot). Nagytas eseten mindig az alapfelbontas u text ur at hasznalja a rendszer. Kicsinytes
eseten valaszthatunk, hogy az alapfelbont as ut (GL NEAREST, GL LINEAR), vagy a
legmegfelelobb egy vagy ket felbontast hasznalja a rendszer (a tobbi opcio).
Ha param = GL NEAREST MIPMAP NEAREST, akkor a kicsinytes mertekenek
megfelelo, legkozelebb allo felbont asbol veszi a rendszer a pixel kozeppontjahoz legkoze-
lebbi texelt, param = GL LINEAR MIPMAP NEAREST eseten pedig a legkozelebbi
felbont asban linearis interpolaci oval szamtja ki.
Ha param = GL NEAREST MIPMAP LINEAR, akkor a ket legkozelebbi fel-
bont asban veszi a pixel kozeppontj ahoz legkozelebbi texeleket es ezeket linearisan in-
terpolalja, mg param = GL LINEAR MIPMAP LINEAR eseten a ket legkozelebbi fel-
bont asban k ulon-k ulon linearisan interpolalja a pixel kozeppontj ahoz legkozelebbi pixe-
leket, majd az eredmenyeket ujra linearisan interpolalja. A linearis interpolaci o mindig
lassabb, de jobb eredmenyt ado megoldas.
Ezen sz ur ok nemelyikenek mas elnevezese is van. A GL NEAREST opciot szokas
pont-mintavetelezesnek is nevezni, a GL LINEAR-t bilinearis mintavetelezesnek, a
GL LINEAR MIPMAP LINEAR-t pedig trilinearis mintavetelezesnek.
Ha a mipmapre tamaszkodo sz ur ot akarunk alkalmazni, de nem hoztuk letre
az osszes lehetseges felbont asat a text ur anak (a GL TEXTURE BASE LEVEL-tol a
GL TEXTURE MAX LEVEL-ig), akkor az OpenGL egyszer uen nem fog text ur azni, de
nem k uld hiba uzenetet.
13.9. Text uraobjektumok
A text uraobjektumok biztostj ak a text uraadatok tarol asat es a tarolt adatok gyors
elereset. Hasznalatuk nagymertekben felgyorstja a text ur ak hasznalat at, mivel egy
mar letrehozott text ura aktivizalasa mindig gyorsabb, mint egy uj letrehoz asa. A
text uraobjektumokat az OpenGL 1.1 verzi ojaban vezettek be. Az implementaci ok egy
104
resze lehetove teszi, hogy text uraobjektumokbol un. munkacsoportot hozzunk letre,
mely tagjai a leghatekonyabban m uk odnek. Ha ez a lehetoseg rendelkezes unkre all,
celszer u a leggyakrabban hasznalt text uraobjektumainkat a munkacsoportba tenni. A
text uraobjektomok hasznalatahoz a kovetkezo lepeseket kell tenni:
Text uraobjektum neveket kell letrehozni.
Letre kell hozni a text uraobjektomokat, azaz a nevhez hozza kell rendelni a
text uraadatokat, es be kell alltani a tulajdonsagait.
Ha az implementaci onk tamogatja a munkacsoportot, meg kell nezni, hogy
van-e elegendo hely az osszes text uraobjektum tarol asara. Ha nincs, akkor
az egyes text ur akhoz prioritast kell rendelni, hogy a leggyakrabban hasznalt
text uraobjektumok ker uljenek a munkacsoportba.
A megfelelo text uraobjektumot tegy uk aktvv a, hogy a megjelentes szamara
elerhet ok legyenek.
13.9.1. A text uraobjektumok elnevezese
A text ur akhoz pozitv egesz nevek (azonostok) rendelhetok. A veletlen nev utk ozesek
elker ulese erdekeben celszer u a glGenTextures() f uggvenyt hasznalni.
void glGenTextures (GLsizei n, GLuint *textureNames);
n darab, jelenleg hasznalaton kv uli text uraobjektum nevet ad vissza a textureNames
tombben. A visszaadott nevek nem feltetlen ul egymast kovet o pozitv egeszek. A 0 a
rendszer altal lefoglalt text uraazonost o, ezt a glGenTextures() f uggveny soha sem adja
vissza.
GLboolean glIsTexture (GLuint textureName);
A GL TRUE erteket adja vissza, ha a textureName egy letez o text uraobjektum azo-
nost oja, es GL FALSE erteket, ha nincs ilyen nev u text uraobjektum vagy textureName
= 0.
13.9.2. Text uraobjektumok letrehozasa, hasznalata
void glBindTexture (GLenum target, GLuint textureName);
A target parameter erteke GL TEXTURE 1D, GL TEXTURE 2D vagy
GL TEXTURE 3D lehet. Amikor elosz or hvjuk meg egy pozitv textureName
azonost oval, akkor letrehoz egy text uraobjektumot es ezt hozzakapcsolja a nevhez.
Az gy letrehozott text uraobjektum a text uraadatokra es text uratulajdonsagokra az
alapertelmezett bealltasokat tartalmazza, ezeket kesobb a glTexImage*(), glTexSub-
Image*(), glCopyTexImage*(), glCopyTexSubImage*(), glTexParameter*() es
105
glPrioritizeTextures() f uggvenyek meghv asaval tolthetj uk fel a hasznalando text ura
jellemzoivel.
Ha nem elosz or hvjuk meg a textureName azonostoval, akkor a textureName azo-
nost oj u text uraobjektumot teszi kurrensse (a text uralekepezes szam ara elerhetove) a
target-nek megfelelo dimenzioj u text uraobjektumok koz ul.
Ha textureName = 0 ertekkel hvjuk meg, akkor az OpenGL kikapcsolja a
text uraobjektumok hasznalatat, es a nevnelk uli alapertelmezett text ur at teszi kurrensse.
13.9.3. Text uraobjektumok torlese
A nem kurrens text uraobjektumok is foglaljak a helyet a text uramem ori aban. Ahhoz,
hogy helyet szabadtsunk fel, tor olni kell az objektumot.
void glDeleteTextures (GLsizei n, const GLuint *textureNames);
A textureNames tombben tarolt azonostoj u text uraobjektumokat torli, azaz fels-
zabadtja az adatok, parameterek szam ara lefoglalt helyet a memori aban es az azo-
nost ok hasznalaton kv uli statuszt nyernek. Nem letezo text uraobjektumok torlese nem
eredmenyez hibat, egyszer uen gyelmen kv ul hagyja a rendszer, a 0 azonost oj u objektum
torlese a default text ur at teszi kurrensse, mint a textureName = 0 parameterrel meghvott
glBindTexture() f uggveny.
13.9.4. Rezidens text urak munkacsoportja
Neh any OpenGL implement acio lehetove teszi, hogy nagy hatekonysaggal m uk odo
text uraobjektumokbol all o munkacsoportot hozzunk letre. A munkacsoporthoz tar-
tozo objektumokat rezidensnek nevezz uk. Ezeknel altal aban specialis hardver
tamogatja a text uram uveleteket, es egy korlatozott kapacitas u cache all rendelkezesre
a text urak tarol asahoz. Ilyen specialis cache letezese eseten mindenkeppen celszer u
text uraobjektumokat hasznalni.
Ha a hasznalando text urakhoz sz ukseges hely meghaladja a cache kapacit asat, akkor nem
lehet minden text ur ank rezidens. Ha meg akarjuk tudni, hogy egy text uraobjektumunk
rezidens-e, tegy uk az objektumot kurrensse es a glGetTexParameter*v() parancsot
a GL TEXTURE RESIDENT parameterrel kiadva lekerdezhetj uk a statusz at. Ha tobb
objektum statuszara vagyunk kvancsiak, akkor hasznaljuk a glAreTexturesResident()
f uggvenyt.
GLboolean glAreTexturesResident (GLsizei n, const GLuint *textureNames,
GLboolean *residences);
A textureNames tombben megadott azonost oj u n darab text uraobjektum statuszat
kerdezhetj uk le. Az objektumok statusz at a residences tombben adja vissza. Ha a mega-
dott n darab objektum mindegyike rezidens a f uggveny a GL TRUE erteket adja vissza es
a residences tomb elemeit nem valtoztatja meg. Ha az adott objektumok koz ul legalabb
egy nem rezidens, akkor a f uggveny a GL FALSE erteket adja vissza es a residences tomb-
nek a nem rezidens objektumokhoz tartozo elemeit a GL FALSE ertekre alltja.
106
Ez a f uggveny a text uraobjektumok pillanatnyi allapotat adja vissza, ami altal aban
nagyon gyorsan valtozik. Ha az implement acio nem tamogatja a text uraobjektumok
munkacsoportjat, akkor a rendszer minden objektumot rezidensnek tekint es a glAre-
TexturesResident() f uggveny mindig a GL TRUE erteket adja vissza.
13.9.5. Text uraobjektumok prioritasa
Ha azt akarjuk, hogy programunk a leheto legnagyobb hatekonys aggal m uk odjon min-
denkor, pl. jatekprogramok eseten, akkor csak rezidens text uraobjektumot hasznaljunk
text ur azasra (ha a rendszer tamogatja a text uraobjektumok munkacsoportjat). Ha nincs
elegendo text uramem oria az osszes text ura befogadas ara, akkor csokkenthetj uk a text urak
meretet, a felbont asok (mipmap) szamat, vagy a glTexSubImage*() f uggvennyel a
text ur ak tartalmat folytonosan valtoztatva ugyanazt a text uramemori at hasznaljuk. (Ez
utobbi mindig hatekonyabb, mint text ur ak torlese, majd uj letrehoz asa.)
Az olyan alkalmazasokn al, ahol a text urakat menetkozben hozzak letre, elker ulhetetlen
a nem rezidens text uraobjektumok hasznalata is. Ilyen esetben a gyakrabban hasznalt
text uraobjektumokhoz celszer u magasabb prioritast rendelni, mint azokhoz amelyeket
valoszn uleg ritkabban hasznalunk.
void glPrioritizeTextures (GLsizei n, const GLuint *textureNames, const GLclampf
*priorities);
A textureNames tombben megadott azonost oj u n darab text uraobjektumhoz a prio-
rities tombben adott prioritasokat rendeli. A prioritasokat a rendszer a [0., 1.] interval-
lumra levagja. A 0 ertek a legalacsonyabb prioritast rendeli, az ilyen objektumnak a
legkisebb az eselye arra, hogy rezidens maradjon az eroforrasok csokkenese eseten, az 1
prioritas ue a legnagyobb. A prioritas hozzakapcsolas ahoz nem sz ukseges, hogy az objek-
tum letezzen, de a prioritasnak csak letez o objektumokra van hatasa. A glTexPara-
meter*() is hasznalhat o a kurrens objektum prioritas anak bealltas ara, a default text ura
prioritasa csak ezzel allthat o be.
13.10. Text uraf uggvenyek
A text ur ak nemcsak arra hasznalhat ok, hogy a text ura szneit rafess uk az abrazolt alakza-
tra, hanem hasznalhatok az abrazolt alakzat sznenek modostas ara, vagy kombin alhat ok
az alakzat eredeti sznevel. A glTexEnv*() f uggvennyel rhatjuk elo, hogy a rendszer
hogyan hasznalja a text urat.
void glTexEnvif (GLenum target, GLenum pname, TYPE param);
void glTexEnvifv (GLenum target, GLenum pname, TYPE *param);
A target parameternek a GL TEXTURE ENV erteket kell adni.
Ha pname = GL TEXTURE ENV MODE, akkor a param erteke GL DECAL,
GL REPLACE, GL MODULATE vagy GL BLEND lehet, mely ertekek azt rj ak elo,
hogy a rendszer a text urat hogyan kombin alja a feldolgozando fragmentum sznevel.
107
Ha pname = GL TEXTURE ENV COLOR, akkor param az R, G, B, A komponen-
seket tartalmazo tomb cme. Ezeket az ertekeket csak akkor hasznalja a rendszer, ha a
GL BLEND text uraf uggveny is denialt.
A text uraf uggveny es a text ura belso formatum anak (ezt a glTexImage*()
f uggvennyel adjuk meg) kombin aci oja hatarozza meg, hogy a text ura egyes komponenseit
hogyan hasznalja a rendszer. A text uraf uggveny csak a text ura kivalasztott komponenseit
es az abr azolando alakzat text ur azas nelk uli sznet veszi gyelembe.
A 13.2. tabl azat a GL REPLACE es GL MODULATE , a 13.3. tablazat pedig a
GL DECAL es GL BLEND hatasat mutatja. Az f also index u elemek a fragmentumra,
a t a text ur ara, a c pedig a GL TEXTURE ENV COLOR segtsegevel megadott sznre
vonatkoznak. Az index nelk uli mennyisegek az eredmeny ul kapott sznt jelentik, E pedig
a csupa 1 komponens u vektort.
13.2. tablazat. A GL REPLACE es GL MODULATE f uggvenyei
belso formatum GL REPLACE GL MODULATE
GL ALPHA
C = C
f
A = A
t
C = C
f
A = A
f
A
t
GL LUMINANCE
C = L
t
A = A
f
C = C
f
L
t
A = A
f
GL LUMINANCE ALPHA
C = L
t
A = A
t
C = C
f
L
t
A = A
f
A
t
GL INTENSITY
C = I
t
A = A
t
C = C
f
I
t
A = A
f
I
t
GL RGB
C = C
t
A = A
f
C = C
f
C
t
A = A
f
GL RGBA
C = C
t
A = A
t
C = C
f
C
t
A = A
f
A
t
GL REPLACE eseten a fragmentum sznet fel ulrja a text ura sznevel. A GL DECAL
opcio hatasa nagyon hasonlt az eloz ore, a k ul onbseg az, hogy az utobbi csak RGB es
RGBA belso formatum eseten m uk odik es az alfa komponenst maskent dolgozza fel.
RGBA belso formatum eseten a text ura alfa komponensenek megfeleloen keveri a frag-
mentum sznet a text ura sznevel, es a fragmentum alfa komponenset valtozatlanul hagyja.
Alapertelmezes szerint a text uram uveleteket a rendszer a megvilagtasi szamt asok
utan hajtja vegre. A t ukr oz odo fenyes foltok hatasat csokkenti, ha azt text ur aval keverj uk.
Lehetoseg van arra, hogy a t ukr oz ott fenykomponens hatasat a text uraz as utan vegye
gyelembe a rendszer. Ez az eljar as sokkal hangs ulyosabb a teszi a text ur azott fel uletek
megvilagtas at.
13.11. Text urakoordinatak megadasa
Text urazott fel uletek megadasakor a cs ucspontok geometriai koordinat ai mellett meg kell
adni a cs ucspontok text urakoordinat ait is. A text urakoordinatak azt adjak meg, hogy
108
13.3. tablazat. A GL DECAL es GL BLEND f uggvenyei
belso formatum GL DECAL GL BLEND
GL ALPHA denialatlan
C = C
f
A = A
f
A
t
GL LUMINANCE denialatlan
C = C
f
(E L
t
) + C
c
L
t
A = A
f
GL LUMINANCE ALPHA denialatlan
C = C
f
(E L
t
) + C
c
L
t
A = A
f
A
t
GL INTENSITY denialatlan
C = C
f
(E I
t
) + C
c
I
t
A = A
f
(1 I
t
) + A
c
I
t
GL RGB
C = C
t
A = A
f
C = C
f
(E C
t
) + C
c
C
t
A = A
f
GL RGBA
C = C
f
(1 A
t
) + C
t
A
t
A = A
f
C = C
f
(E C
t
) + C
c
C
t
A = A
f
A
t
mely texel tartozik a cs ucsponthoz, es a rendszer a cs ucspontokhoz tartozo texeleket in-
terpolalja.
A text ur anak lehet 1, 2, 3 vagy 4 koordinat aja. Ezeket s, t, r es q val jelolj uk,
megk ul onboztetes ul a geometriai koordinat akhoz hasznalt x, y, z es w, valamint a fel ule-
tek parameterezesehez hasznalt u, v jelolesektol. A q koordinata erteke altal aban 1, es
ez homogen text urakoordinatak letrehoz as at teszi lehetove. A text urakoordinatakat is
a glBegin(), glEnd() f uggvenyp ar koz ott kell megadni, mint a cs ucspontokat. Ezek a
koordinat ak altalaban a [0., 1.] intervallumon valtoznak, de megadhatunk ezen kv ul eso
ertekeket is, melyek ertelmezeset elorhatjuk (lasd a 13.11.2. pontot).
void glTexCoord1234sifd (TYPE coords);
void glTexCoord1234sifdv (TYPE *coords);
A kurrens (s, t, r, q) text urakoordinatakat alltja be. Az ezt kovet oen letrehozott
cs ucspon(ok)hoz a rendszer ezt a text urakoordinat at rendeli. Ha a t vagy r koordinat at
nem adjuk, meg akkor azokat a rendszer 0-nak tekinti, a hianyzo q-t pedig 1-nek. A me-
gadott text urakoordinatakat a rendszer megszorozza a 44 -es text uram atrixszal, mielott
feldolgozna oket.
13.11.1. A megfelelo text urakoordinatak kiszamolasa
Az abr azolando poligonok, poligonhal ok cs ucspontjaihoz hozzarendelj uk a
text urakoordinatakat. Ez a hozzarendeles tortenhet ugy, hogy a poligonokra
(skdarabokra) ratessz uk a szinten skdarabot reprezent alo text ur at. Skbaterthet o
fel uletek eseten (k up, henger altalanos erintofel ulet) ezt torztasmentesen megtehetj uk,
minden mas esetben azonban torztas lep fel. Peldaul gomb eseten a text uralekepezes
tortenhet a gomb
109
x(, ) = r cos cos ,
y(, ) = r sin cos ,
z(, ) = r sin ,
[0., 2] , [0., 2]
parameteres alakjab ol kiindulva ugy, hogy az ertelmezesi tartomany [0., 2] [0., 2]
negyzetet kepezz uk le a text ura teglalapjara. ez a megoldas jelent os torztast eredmenyez
a gomb eszaki es deli polusa (a (0., 0., r) es (0., 0., r) ) fele haladva. Szabad formaj u,
pl. NURBS fel ulet eseten a fel ulet u, v parameterei hasznalhat ok a text uralekepezeshez,
azonban a poligonhaloval kozeltett gorb ult fel uletek esztetikus text uraz as anak jelent os
m uveszi osszetevoi is vannak.
13.11.2. Text urak ismetlese
A [0., 1.] intervallumon kv ul eso text urakoordinat akat is megadhatunk, es rendelkez-
het unk arrol, hogy a rendszer a text urakat ismetelje vagy levagja a koordinat akat. A
text ura ismetlese azt jelenti, hogy a text ura teglalapjat, mit egy csempet, a rendszer
egymas melle teszi. A megfelelo hatas elerese erdekeben olyan text urat celszer u me-
gadni, mely jol illesztheto. A text urakoordinat ak levag asa azt jelenti, hogy minden 1-nel
nagyobb text urakoordinatat 1-nek, minden 0-nal kisebbet 0-nak tekint a rendszer. Ezek-
ben az esetekben k ulon gondot kell fordtani a text ura hatar ara, ha van. A GL NEAREST
sz ur o eseten a rendszer a legkozelebbi texelt hasznalja, es a hatart mindig gyelmen kv ul
hagyja.
void glTexParameterif (GLenum target, GLenum pname, TYPE param);
void glTexParameterifv (GLenum target, GLenum pname, TYPE *param);
Azokat a parametereket alltja be, melyek azt befolyasolj ak, hogy a rendszer ho-
gyan kezeli a texeleket a text uraobjektumokba valo tarol as, illetve a fragmentumo-
kra val o alkalmaz as soran. A target parametert a text ura dimenzioj anak megfeleloen
GL TEXTURE 1D, GL TEXTURE 2D vagy GL TEXTURE 3D ertekre kell alltani. A
pname parameter lehetseges ertekeit a 13.4. tablazat tartalmazza, a hozzajuk kapcsolhato
ertekekkel egy utt.
13.11.3. Text urakoordinatak automatikus letrehozasa
A text uraz assal fel uletek szintvonalainak abr azolasa, valamint olyan hatas is elerhet o,
mintha a fel uletben t ukr ozodne a kornyezete. Ezen hatasok elerese erdekeben az OpenGL
automatikusan letrehozza a text urakoordinat akat, vagyis nem kell azokat cs ucspontonkent
megadni.
110
13.4. tabl azat. Text urak ismetlese
pname pname
GL TEXTURE WRAP S
GL CLAMP, GL CLAMP TO EDGE,
GL REPEAT
GL TEXTURE WRAP T
GL CLAMP, GL CLAMP TO EDGE,
GL REPEAT
GL TEXTURE WRAP R
GL CLAMP, GL CLAMP TO EDGE,
GL REPEAT
GL TEXTURE MAG FILTER GL NEAREST, GL LINEAR
GL TEXTURE MIN FILTER
GL NEAREST, GL LINEAR,
GL NEAREST MIPMAP NEAREST,
GL NEAREST MIPMAP LINEAR,
GL LINEAR MIPMAP NEAREST,
GL LINEAR MIPMAP LINEAR
GL TEXTURE BORDER COLOR tetszoleges szamnegyes [0., 1.] -bol
GL TEXTURE PRIORITY egy [0., 1.] intervallumbeli ertek
GL TEXTURE MIN LOD tetszoleges lebegopontos szam
GL TEXTURE MAX LOD tetszoleges lebegopontos szam
GL TEXTURE BASE LEVEL tetszoleges nemnegatv egesz
GL TEXTURE MAX LEVEL tetszoleges nemnegatv egesz
void glTexGenifd (GLenum coord, GLenum pname, TYPE param);
void glTexGenifdv (GLenum coord, GLenum pname, TYPE *param);
Text urakoordinatak automatikus letrehoz asahoz lehet vele f uggvenyeket megadni.
A coord parameter ertekei GL S, GL T, GL R vagy GL Q lehet attol f ugg oen, hogy
az s, t, r vagy q koordinata letrehoz as arol van szo.
A pname erteke GL TEXTURE GEN MODE, GL OBJECT PLANE vagy
GL EYE PLANE lehet. pname = GL TEXTURE GEN MODE eseten param erteke
GL OBJECT LINEAR, GL EYE LINEAR vagy GL SPHERE MAP lehet, melyekkel
a text urat lekepezo f uggvenyt adhatjuk meg. pname masik ket lehetseges ertekenel a
lekepezo f uggvenyhez adhatunk meg parametereket.
A referenciaskot akkor celszer u objektumkoordinat akban megadni
(GL OBJECT LINEAR), ha a text urazott kep rogztett marad egy mozgo ob-
jektumhoz kepest. Mozgo objektumok szintvonalainak abr azolas ahoz celszer u a
nez opontkoordinata-rendszerben (GL EYE LINEAR) megadni a referenciaskot. A
GL SPHERE MAP lekepezest elsosorban a kornyezet t ukr ozodesenek szimul aciojakor
hasznaljuk.
111
13.12. Text uramatrix-verem
A rendszer a text urakoordinat akat a 4 4 -es text uram atrixszal megszorozza, mielott
barmilyen mas feldolgozasnak alavetne. Alapertelmezes szerint a text uramatrix az
egysegm atrix, azaz nincs semmilyen hatasa. A text ur azott objektum ujrarajzolasa elott a
text uram atrixot megvaltoztatva specialis hatasok erhetok el, pl. a text ura elmozdthat o,
ny ujthat o, zsugorthat o, forgathato. Miutan a matrix 44 -es, tetszoleges projektv tran-
szformaci o rhat o le vele. A rendszer egy veremszerkezetet tart karban a text uram atrixok
tarol asara, mely verem legalabb 2 szint u. A text uram atrix megadasa, a verem mani-
pulal asa elott a glMatrixMode(GL TEXTURE) parancsot kell kiadni, es ez utan a
matrixm uveletek es a veremm uveletek a text uram atrixra hatnak.
112
14. fejezet
Gorbek es fel uletek rajzolasa
A geometriai alapelemekkel csak pont, torottvonal es poligon rajzolhato, azonban
termeszetesen igeny van gorbek es gorb ult fel uletek megjelentesere is. A grakus rend-
szerekben a gorbeket kozelto (a gorben valamilyen s ur useggel felvett pontokat osszek ot o)
tor ottvonallal, a fel uletet pedig kozelt o (a fel uleten valamilyen s ur useggel kiszamtott
pontokkal meghatarozott) poligonokkal (poligonhaloval) szokas megjelenteni. Ha a
kozelto tor ottvonal , illetve poligon oldalai eleg rovidek, a kepen nem lathat ok az oldalak
(lapok) toresei, kovetkezeskeppen sima gorbe, illetve fel ulet benyom asat keltik vizualisan.
A gorbek, illetve fel uletek ilyen tpus u megjelenteset parameteres formaban lert alakza-
tokon celszer u alkalmazni.
Az OpenGL a Bezier-g orbek es fel uletek megjelenteset tamogatja kozvetlen ul, azon-
ban a Bezier-alakzatokkal sok mas, jol ismert gorbe es fel ulet is egzaktul lerhat o, gy pl.
az Hermite-v, Ferguson-spline, B-spline.
14.1. Bezier-g orbe megjelentese
Az n-edfok u Bezier-g orbe
b(u) =
n

i=0
B
n
i
(u) b
i
, u [u
1
, u
2
] , (14.1)
B
n
i
(u) =
_
n
i
_
u
i
(1 u)
ni
=
n!
i! (n i)!
u
i
(1 u)
ni
(14.2)
alakban rhat o fel. A b
i
pontokat kontroll, vagy Bezier pontoknak nevezz uk, B
n
i
(u) pedig
az i-edik n-edfok u Bernstein-polinomot jeloli.

Altalaban u
1
= 0, u
2
= 1. A (14.1) kifejezes
olyan gorbet r le, melynek a kezdopontja b
0
, vegpontja b
n
es a tobbi megadott ponton
altal aban nem megy at (kiveve, ha a pontok egy egyenesre illeszkednek).
Az OpenGL-ben a kovetkezokeppen tudunk Bezier-g orbet megjelenteni:
Denialunk egy ugynevezett egydimenzios kiertekelest a glMap1*() paranccsal,
azaz megadjuk a Bezier-gorbe rendjet, parametertartomanyat, kontrollpontjait,
valamint azt, hogy a kontrollpontok mit reprezent alnak, pl. a modellterbeli pontot
vagy sznt.
Engedelyezz uk a megfelelo objektum kiertekeleset glEnable().
113
A megadott lekepezest kiertekelj uk a kv ant parameterertekeknel, azaz kiszamtjuk
a helyettestesi erteket glEvalCoord1*().
void glMap1fd (GLenum target, TYPE u1, TYPE u2, GLint stride, GLint order,
const TYPE *points);
Bezier-gorbet ler o, ugynevezett egydimenzios kiertekelot denial. A target pa-
rameterrel kell megadnunk, hogy a pontok mit reprezent alnak, amibol az is kovetke-
zik, hogy a point tombben hany adatot kell atadni. A lehetosegek teljes listaj at a 14.1.
tabl azat tartalmazza. A pontok reprezent alhatnak, cs ucspontokat, RGBA vagy sznindex
adatokat, normalvektorokat, vagy text urakoordinatakat. A szamt ast vegz o parancs
kiadasa elott ugyanezzel a parameterrel kell engedelyezni (glEnable())a kiertekelest.
u1 es u2 a Bezier-gorbe parametertartom any anak hatarait jeloli, a stride parameterrel
pedig azt adjuk meg, hogy ket egymast koveto pont koz ott hany oat vagy double tpus u
valtoz o van. Az order parameter a gorbe rendje (fokszam + 1), aminek meg kell egyeznie
a pontok szam aval. A points parameter az elso pont elso koordinataj anak a cme.
Tobb kiertekel ot is denialhatunk, de adattpusonkent csak egyet engedelyezz unk,
tehat csak egyfajta cs ucspont-, szn- vagy text ura-kiertekelest engedelyezz unk. Ha
ugyanabbol a tpusbol tobb is engedelyezett, a rendszer a legtobb komponenssel megad-
hatot veszi gyelembe.
14.1. tabl azat. Az glMap1*() parancs target parameterenek ertekei es jelentes uk
target jelentese
GL MAP1 VERTEX 3 cs ucspontok x, y, z koordinat ai
GL MAP1 VERTEX 4 cs ucspontok x, y, z, w koordinat ai
GL MAP1 INDEX sznindex
GL MAP1 COLOR 4 R, G, B, A sznkomponensek
GL MAP1 NORMAL normalis koordinat ai
GL MAP1 TEXTURE COORD 1 s text urakoordinat ak
GL MAP1 TEXTURE COORD 2 s, t text urakoordinat ak
GL MAP1 TEXTURE COORD 3 s, t, r text urakoordinat ak
GL MAP1 TEXTURE COORD 4 s, t, r, q text urakoordinat ak
void glEvalCoord1fd (TYPE u);
void glEvalCoord1fdv (const TYPE *u);
Az engedelyezett egydimenzios lekepezesek u helyen vett helyettestesi erteket
szamtja ki. A glBegin() es glEnd() par kozott aktivizalva a megfelelo OpenGL
parancs(ok) kiadas anak hatas at is elerj uk, tehat ha GL MAP1 VERTEX 3 vagy
GL MAP1 VERTEX 4 engedelyezett, akkor egy cs ucspontot hoz letre (mintha a
114
glVertex*() parancsot adtuk volna ki); ha GL MAP1 INDEX engedelyezett, ak-
kor a glIndex*() parancsot szimulalja; ha GL MAP1 COLOR 4, akkor a gl-
Color*(); ha GL MAP1 TEXTURE COORD 1, GL MAP1 TEXTURE COORD 2,
GL MAP1 TEXTURE COORD 3, GL MAP1 TEXTURE COORD 4, akkor a glTex-
Coord*() parancsot, ha pedig a GL MAP1 NORMAL, akkor a glNormal*() parancsot.
Az gy letrehozott cs ucspontokhoz a kiszamtott sznt, sznindexet, normalist es
text urakoordinatat rendeli a rendszer, amennyiben azok engedelyezettek, a nem en-
gedelyezettekhez pedig a rendszer altal tarolt kurrens erteket. Az gy kiszamtott
ertekekkel azonban nem rja fel ul a kurrens ertekeket.
A glEvalCoord1*() paranccsal egyetlen gorbepontot szamthatunk ki. A rendszer
lehetove teszi azt is, hogy az [u
1
, u
2
] ertelmezesi tartomanyt n egyenlo reszre osztva
a parametertartomanyban racspontokat hozzunk letre, majd egyetlen f uggvenyhv assal
kiszamtsuk a racspontokhoz tartozo gorbepontokat.
void glMapGrid1fd (GLint n, TYPE u1, TYPE u2);
Az [u1, u2] intervallumot n egyenl o reszre osztva egy n +1 darab racspontot hoz letre
az ertelmezesi tartomanyban.
void glEvalMesh1 (GLenum mode, GLint p1, GLint p2);
Minden engedelyezett kiertekel ovel kiszamolja a kurrens racspontok p1-tol p2-ig ter-
jedo intervallum ahoz tartozo ertekeket ( 0 p1 p2 n , ahol n a glMapGrid1*()
paranccsal megadott osztasok szama). A mode parameter a GL POINT vagy GL LINE
ertekeket veheti fel, melynek megfeleloen a gorben kiszamtott pontokat pont alapelemmel
jeloli meg, vagy torottvonallal koti ossze. A
glMapGrid1f(n,u1,u2);
glEvalMesh1(mode,p1,p2);
parancsok hatasa, a kerektesi hibab ol adod o elterest ol eltekintve, megegyezik a kovetkez o
programreszletevel:
glBegin(mode);
for(i = p1; i <= p2; i++)
glEvalCoord1f(u1 + i* (u2 - u1) / n);
glEnd();
Gorbek megrajzolasa nem egyszer u feladat, ugyanis igaz, hogy ha az oldalak nagyon
rovidek (pl. 1 pixel hossz uak), akkor biztosan jo vizualis hatast er unk el. Az esetek
tobbsegeben azonban az osszes oldal hosszanak csokkentese pazarlo (t ul sok szakaszt tar-
talmazo) kozeltest eredmenyez. Olyan gorbek eseten, melyek majdnem egyenes sza-
kaszt es nagyon gorb ult reszeket is tartalmaznak, az oldalhosszakat addig kell csokken-
teni, mg a nagyon gorb ul resz is megfelelo lesz a kepen, de ez mar biztosan t ul sok reszre
bontja a majdnem egyenes reszt. A feladat megoldasan al tehat gyelembe kell venni a
gorbe gorb uletenek valtozas at is, vagyis az a gyakran hasznalt durva megoldas, miszerint:
osszuk fel a parametertartom anyt n egyenlo reszre, es az ezekhez tartozo gorbepontokat
koss uk ossze egyenes szakaszokkal, gy n novelesevel elobb-utobb esztetikus kepet ka-
punk, csak konstans gorb ulet u gorbek eseten eredmenyezhet optimalis megoldast. Ilyen
gorbe a skon, mint tudjuk, csak az egyenes es a kor. A gorb ulet valtoz asahoz alkalmaz-
kodo felosztasi algoritmust nem konny u talalni tetszoleges gorbehez, de a Bezier-gorbek
115
eseten a de Casteljau-algoritmus biztostja ezt. A fenti szempontokat mindenkeppen
celszer u gyelembe venni, ha sajat felbont asi algoritmust akarunk kitalalni gorbek raj-
zolas ara. A fel uletek poligonhal oval valo kozeltese meg osszetettebb feladat. Ezert azt
tanacsoljuk, hogy ha csak lehet, hasznaljuk a GLU, vagy a GLUJ f uggvenykonyvt arak
NURBS objektumok megjelentesere felkn alt lehetosegeit.
14.2. Bezier-fel ulet megjelentese
A Bezier-fel ulet parameteres alakja
s (u, v) =
n

i=0
m

j=0
B
n
i
(u) B
m
j
(v) b
ij
, u [u
1
, u
2
] , v [v
1
, v
2
] ,
ahol B
n
i
(u) es B
m
j
(v) ertelmezese (14.2) szerinti. A fel ulet atmegy a b
00
, b
0m
, b
n0
, b
nm
kontrollpontokon, a tobbi ponton azonban altal aban nem, kiveve, ha a kontrollpontok egy
skra illeszkednek.
A Bezier fel ulet megjelentesekor kovetend o eljar as analog a Bezier-g orbe megje-
lentesehez kovetendovel, beleertve a parancsok nevet is.
void glMap2fd (GLenum target, TYPE u1, TYPE u2, GLint ustride, GLint uorder,
TYPE v1, TYPE v2, GLint vstride, GLint vorder, const TYPE *points);
Bezier-fel uletet lero, ugynevezett ketdimenzios kiertekel ot denial. A target pa-
rameter a 14.2. tabl azat szerinti ertekeket veheti fel, vagyis a gorbehez hasonloan azt
rja elo, hogy a pontok hol adottak. A szamtast vegz o parancs kiadasa elott ugyanezzel
a parameterrel kell engedelyezni (glEnable())a kiertekelest. A fel ulet ertelmezesi tar-
tomanya az (u, v) parametersk [u1, u2] [v1, v2] teglalapja. uorder a fel ulet u, vorder
pedig a v irany u rendjet (fokszam + 1) jeloli. Az ustride es vstride parameterek ket
egymast koveto pontnak a koordinatak tpusaban (oat, double) mert tavolsag at adja
meg. A points parameter az elso pont elso koordinat ajanak a cme.
Peldaul, ha a kontrollpontok tombje
GLdouble ctrlpoints[50][30][3];
es az elso kontrollpont elso koordinat aja a ctrlpoints[10][10][0], akkor ustride = 303,
vstride = 3 es points = &(ctrlpoints[10][10][0]).
void glEvalCoord2fd (TYPE u, TYPE v);
void glEvalCoord2fdv (const TYPE *u, const TYPE *v);
Az engedelyezett ketdimenzios lekepezeseknek a parametersk (u, v) koordinataj u
pontj aban vett erteket szamtja ki. Ha az engedelyezett lekepezes cs ucspontra
vonatkozik - a glMap2*() parancs target parametere GL MAP2 VERTEX 3
vagy GL MAP2 VERTEX 4 - a rendszer automatikusan letrehozza a normalisokat
is, es a cs ucsponthoz kapcsolja, ha a normalisok automatikus letrehoz as at a
glEnable(GL AUTO NORMAL) parancs kiadasaval korabban engedelyezt uk. Ha nem
engedelyezt uk a normalisok automatikus letrehoz asat, akkor a megfelelo ketdimenzios
116
14.2. tablazat. Az glMap2*() parancs target parameterenek ertekei
target jelentese
GL MAP2 VERTEX 3 cs ucspontok x, y, z koordinat ai
GL MAP2 VERTEX 4 cs ucspontok x, y, z, w koordinat ai
GL MAP2 INDEX sznindex
GL MAP2 COLOR 4 R, G, B, A sznkomponensek
GL MAP2 NORMAL normalis koordinat ai
GL MAP2 TEXTURE COORD 1 s text urakoordinat ak
GL MAP2 TEXTURE COORD 2 s, t text urakoordinat ak
GL MAP2 TEXTURE COORD 3 s, t, r text urakoordinat ak
GL MAP2 TEXTURE COORD 4 s, t, r, q text urakoordinat ak
normalis-lekepezes denialas aval es engedelyezesevel hozhatjuk letre a normalisokat. Ha
az eloz ok egyiket sem engedelyezt uk, akkor a rendszer a kurrens normalist rendeli a
cs ucsponthoz.
void glMapGrid2fd (GLint nu, TYPE u1, TYPE u2, GLint nv, TYPE v1, TYPE
v2);
Az [u1, u2] parametertartom anyt nu , a [v1, v2] parametertartom anyt nv egyenlo reszre
osztva egy (nu +1) (nv +1) pontb ol all o racsot hoz letre az ertelmezesi tartomanyban.
void glEvalMesh2 (GLenum mode, GLint p1, GLint p2, GLint q1, GLint q2);
A glMapGrid2*() paranccsal letrehozott racspontokban minden engedelyezett
kiertekelovel kiszamtja a fel ulet pontjait az (nu + 1) (nv + 1) racspontokban, es a
mode parameter GL POINT erteke eseten ponth aloval, GL LINE eseten poligonhal oval,
GL FILL eseten pedig kitoltott poligonhal oval jelenti meg. A
glMapGrid2f(nu,u1,u2,nv,v1,v2);
glEvalMesh1(mode,p1,p2,q1,q2);
parancsok hatasa gyakorlatilag a kovetkez o programreszletek valamelyikevel egyezik meg,
elteres csak a kerektesi hibab ol adodhat.
glBegin(GL POINTS);/* ha mode == GL POINT */
for(i = p1; i <= p2; i++)
for(j == q1; j <= q2; j++)
glEvalCoord2f(u1 + i *(u2 - u1) / nu, v1 + j *(v2 - v1) / nv);
glEnd();
for(i = p; i <= p2; i++)/* ha mode == GL LINE */

glBegin(GL LINES);
for(j == q1; j <= q2; j++)
glEvalCoord2f(u1 + i *(u2 - u1) / nu, v1 + j *(v2 - v1) / nv);
glEnd();
117

for(i = p1; i <= p2; i++)/* ha mode == GL FILL */

glBegin(GL QUAD STRIP);


for(j == q1; j <= q2; j++)

glEvalCoord2f(u1 + i * (u2 - u1) / nu, v1 + j * (v2 - v1) / nv);


glEvalCoord2f(u1 + (i + 1) * (u2 - u1) / nu, v1 + j * (v2 - v1) /
nv);

glEnd();

14.3. Racionalis B-spline (NURBS) gorbek es fel ule-


tek megjelentese
Napjaink szamtogepes rendszereinek legelterjedtebb gorbe- es fel uletler asi modszere a
racionalis B-spline. Szinonimakent hasznalatos a NURBS (Non-Uniform Rational B-
Spline) elnevezes is. Nagy nepszer useg uket az is indokolja, hogy sokfele alak rhat o le
vel uk egzaktul, gy pl. a Bezier-g orbe vagy a hagyomanyosan hasznalt k upszeletek is.
Jelen anyagban csak a vonatkozo OpenGL f uggvenyek megertesehez elengedhetetlen ul
sz ukseges denciokat adjuk meg.
Az OpenGL-ben az alabbi eljar ast kovetve tudunk NURBS gorbet vagy fel uletet meg-
jelenteni:
Letrehozunk egy uj NURBS objektumstrukt ur at a gluNewNurbsRenderer() pa-
ranccsal. Az itt visszakapott cmmel tudunk hivatkozni az objektumra a tulajd-
onsagok bealltasakor es a megjelenteskor.
A gluNurbsProperty() paranccsal beallthatjuk az objektum megjeleneset be-
folyasol o parametereket, tovabb a ezzel engedelyezhetj uk a kozelt o tor ottvonal, il-
letve poligonhal o adatainak visszanyereset.
A gluNurbsCallback() paranccsal megadhatjuk azt a f uggvenyt, amit a rendszer
meghv, ha a NURBS objektum megjelentese soran hiba fordul elo, valamint me-
gadhatjuk azt a f uggvenyt, amivel a kozelto tor ottvonal, illetve poligonhal o adatait
visszakapjuk.
A gorbe-, illetve fel uletmegadast es rajzolast a gluBeginCurve(), illetve gluBeg-
inSurface() parancsokkal kezdj uk.
A gorbek, illetve fel uletek megadasara a gluNurbsCurve(), illetve gluNurbsSur-
face() parancsok szolgalnak. Ezeket legalabb egyszer ki kell adni a kozelto torott-
vonal, illetve poligonhalo letrehoz asa erdekeben, de meghvhatok a fel uleti normalis
es a text urakoordinat ak letrehozas ahoz is.
118
A gluEndCurve(), illetve gluEndSurface() parancsokkal zarjuk a NURBS ob-
jektum megjelenteset.
GLUnurbsObj *gluNewNurbsRenderer (void);
Egy uj NURBS objektumstrukt urat hoz letre es ad vissza. Az objektumra a tulajd-
onsagok bealltas an al es a megrajzolasn al ezzel az azonostoval kell hivatkozni. Ha nincs
eleg memoria az objektum allokal asahoz, akkor a visszaadott cm NULL.
void gluDeleteNurbsRenderer (GLUnurbsObj *nobj );
Torli az nobj cmen tarolt NURBS objektumot, felszabadtja a lefoglalt memoriat.
void gluNurbsProperty (GLUnurbsObj *nobj, GLenum property, GLoat value);
Az nobj azonost oj u NURBS objektum megjelenesenek tulajdonsagai allthatok be
segtsegevel. A property parameter a tulajdonsag azonost oja, value pedig az erteke. A
property parameter lehetseges ertekei es jelentes uk:
GLU DISPLAY MODE eseten a megjelentes modja rhat o elo, ekkor
a value parameter erteke GLU FILL, GLU OUTLINE POLYGON vagy
GLU OUTLINE PATCH lehet. GLU FILL eseten kitoltott poligonok-
kal, GLU OUTLINE POLYGON eseten a kozelt o poligonok oldalaival,
GLU OUTLINE PATCH eseten pedig a fel uletfolt hatarol o gorbeivel (beleertve a
trimmelo gorbeket is) abrazolja a NURBS fel uletet a rendszer. Alapertelmezes:
GLU FILL.
GLU NURBS MODE eseten azt rhatjuk elo, hogy a kozelt o tor ottvonal, il-
letve poligonhal ot meg kell jelenteni, vagy a visszahvasi mechanizmust kell
aktivizalni, hogy a kozelto tor ottvonal, illetve poligonhalo adatai elerhetok
legyenek. Az elso esetben a value parametert GLU NURBS RENDERER
ertekre kell alltani, ami egyben az alapertelmezes is, a masodik esetben pedig
GLU NURBS TESSELLATOR-ra.
GLU CULLING eseten a GL TRUE ertek megadas aval a megjelentesi folyamat fel-
gyorsthato, ugyanis ekkor a rendszer nem vegzi el a tor ottvonallal, illetve poligonok-
kal val o kozeltest, ha az objektum az abr azolando terreszt lero csonka g ulan (vagy
hasabon) kv ul esik. Ha ez a parameter GL FALSE - ami egyben az alapertelmezes
is -, akkor ilyen esetben is elvegzi.
GLU SAMPLING METHOD eseten a mintavetelezesi modszert adhatjuk meg,
maskent nezve azt, hogy a kozeltes pontoss ag at milyen modon akarjuk elorni. Ha
value erteke:
GLU PARAMETRIC ERROR, a kozelto tor ottvonalnak, illetve poligonoknak
a gorbet ol, illetve a fel ulett ol pixelekben mert tavols aga nem lehet nagyobb a
gluNurbsProperty() type = GLU SAMPLING TOLERANCE parameterrel
valo meghv as anal megadott value erteknel.
119
GLU PATH LENGTH, a kozelt o torottvonal, illetve poligonok oldalainak pi-
xelekben mert hossza nem lehet nagyobb a gluNurbsProperty() type =
GLU SAMPLING TOLERANCE parameterrel val o meghvas anal megadott
value erteknel.
GLU OBJECT PATH LENGTH hatasa csaknem teljesen megegyezik a
GLU PATH LENGTH-nel lertakkal, egyetlen elteres, hogy a tavolsagot nem
pixelben, hanem az objektum terenek egysegeben rjuk elo.
GLU OBJECT PARAMETRIC ERROR hatasa majdnem megegyezik a
GLU PARAMETRIC ERROR-n al lertakkal, egyetlen elteres, hogy a
tavols agot nem pixelben, hanem az objektum terenek egysegeben rjuk elo.
GLU DOMAIN DISTANCE, akkor azt adjuk meg, hogy a kozelt o tor ottvonal,
illetve poligonhal o cs ucspontjait a parametertartom anyon merve milyen s ur un
szamtsa ki a rendszer. Ezt a s ur useget u iranyban a gluNurbsProperty()
type = GLU U STEP meghvas aval, v iranyban a type = GLU V STEP
meghvas aval rhatjuk elo. Ezeknel a hv asoknal a value parameterrel azt ad-
hatjuk meg, hogy egysegnyi parametertartom anyon hany osztaspont legyen.
GLU SAMPLING TOLERANCE eseten a kozeltes pontoss agat rhatjuk elo. Ha a
mintavetelezesi modszer:
GLU PATH LENGTH, akkor a value parameterrel a kozelto tor ottvonal,
illetve poligonok oldalainak pixelekben mert maximalis hosszat rjuk elo.
Alapertelmezes: 50.
GLU OBJECT PATH LENGTH, akkor a value parameterrel a kozelto torott-
vonal, illetve poligonok oldalainak az objektumkoordinata-rendszerben mert
maximalis hosszat rjuk elo. Alapertelmezes: 50.
GLU PARAMETRIC TOLERANCE eseten a kozeltes pontossag at adhatjuk meg.
Ha a mintavetelezesi modszer:
GLU PARAMETRIC ERROR, a kozelto tor ottvonalnak, illetve poligonoknak
a gorbet ol, illetve a fel ulett ol mert elteresenek pixelekben mert maximumat
rhatjuk elo a value parameterrel. Alapertelmezes: 0.5.
GLU OBJECT PARAMETRIC ERROR, a kozelto torottvonalnak, illetve po-
ligonoknak a gorbetol, illetve a fel ulettol mert elteresenek maximum at rhatjuk
elo az objektumkoordinata-rendszerben a value parameterrel. Alapertelmezes:
0.5.
GLU U STEP eseten azt adhatjuk meg, hogy az u irany u parameter 1 egysegere
hany osztaspont jusson a gorben, illetve a fel uleten, felteve, hogy a mintavetelezesi
modszer GLU DOMAIN DISTANCE. Alapertelmezes: 100.
GLU V STEP eseten azt adhatjuk meg, hogy az v irany u parameter 1 egysegere
hany osztaspont jusson a gorben, illetve a fel uleten, felteve, hogy a mintavetelezesi
modszer GLU DOMAIN DISTANCE. Alapertelmezes: 100.
120
GLU AUTO LOAD MATRIX eseten a GL TRUE ertek, ami az alapertelmezes is,
megadas aval azt jelezz uk, hogy az OpenGL szerverrol kell letolteni a nezopont-
modell, a vettesi es a kepmezo-transzform acio matrix at a megjelenteshez. Ha
ennek a parameternek a GL FALSE erteket adjuk, akkor a felhasznal oi programnak
kell szolgaltatnia ezeket a matrixokat a gluSamplingMatricies() paranccsal.
14.3.1. NURBS gorbek rajzolasa
Mindenekelott denialjuk a NURBS gorbeket es az ezekhez sz ukseges normalizalt B-spline
alapf uggvenyt. Az
N
1
j
(u) =
_
1, ha u
j
u < u
j+1
0, egyebkent
N
k
j
(u) =
u u
j
u
j+k1
u
j
N
k1
j
(u) +
u
j+k
u
u
j+k
u
j+1
N
k1
j+1
(u)
(14.3)
rekurzioval denialt f uggvenyt k 1edfok u ( kadrend u) normalizalt Bspline
alapf uggvenynek nevezz uk, az u
j
u
j+1
R szamokat pedig csomoertekeknek.
Megallapodas szerint 0/0 =0.
Az
r (u) =
n

l=0
N
k
l
(u) w
l
d
l
n

j=0
N
k
j
(u) w
j
, u [u
k1
, u
n+1
] (14.4)
kifejezessel adott gorbet k1edfok u (kadrend u) NURBS (racionalis Bspline) gorbenek
nevezz uk, a d
l
pontokat kontrollpontoknak vagy de Boorpontoknak, a w
l
0
skalarokat pedig s ulyoknak nevezz uk. N
k
l
(u) az ledik k 1edfok u normalizalt Bspline
alapf uggvenyt jeloli, melyek ertelmezesehez az u
0
, u
1
, . . . , u
n+k
csomoertekek sz uksegesek.
Az gy denialt gorbe altal aban egyik kontrollponton sem megy at, azonban egy-
beeso szomszedos csomoertekek megadasaval ez elerhet o. Ha az elso k darab csomoertek
megegyezik (u
0
= u
1
= = u
k1
), akkor a gorbe atmegy a d
0
kontrollponton, ha-
sonlokeppen, ha az utolso k darab csomoertek megegyezik (u
n+1
= u
n+2
= = u
n+k
),
akkor a gorbe atmegy a d
n
kontrollponton. A kozb ulso csomoertekek eseteben legfeljebb
k 1 egymast kovet o eshet egybe.
void gluBeginCurve (GLUnurbsObj *nobj );
void gluEndCurve (GLUnurbsObj *nobj );
A gluBeginCurve() parancs az nobj azonost oj u NURBS gorbe megadas anak kez-
detet jelzi, a gluEndCurve() parancs pedig a veget. A ketto koz ott a gluNurbsCurve()
parancs egy vagy tobb meghvas aval lehet a gorbet lerni. A gluNurbsCurve() parancsot
pontosan egyszer kell a GL MAP1 VERTEX 3 vagy GL MAP1 VERTEX 4 parameterrel
meghvni.
void gluNurbsCurve (GLUnurbsObj *nobj, GLint uknot count, GLoat *uknot,
GLint u stride, GLoat *ctrlarray, GLint uorder, GLenum type);
Az nobj azonost oj u NURBS gorbet rajzolja meg. uorder a gorbe rendje (a (14.4)
121
kifejezesbeli k), u knot count a csomoertekek szama (a kontrollpontok szama + a rend,
a (14.4) jelolesevel n + k + 1), uknot az elso csomoertek cme, ctrlarray az elso kontroll-
pont elso koordinat aj anak cme, ustride ket egymast kovet o kontrollpontnak GLoat-
ban mert tavols aga, type erteke GL MAP1 VERTEX 3 nem racionalis B-spline eseten,
GL MAP1 VERTEX 4 racionalis B-spline eseten.
Racionalis gorbeknel a kontrollpontokat homogen koordinat akban kell megadni, tehat
a (14.4) kifejezes w
i
s ulyait es d
i
kontrollpontjait p
i
=
_
w
i
d
i
w
i
_
alakban kell atadni, azaz
a kontrollpontokat meg kell szorozni a s ullyal es a 4. koordinata maga a s uly lesz.
14.3.2. NURBS fel uletek megjelentese
Az
s (u, v) =
n

i=0
m

j=0
N
k
i
(u) N
l
j
(v)
n

p=0
m

q=0
N
k
p
(u) N
l
q
(v) w
ij
w
ij
d
ij
, u [u
k1
, u
n+1
] , v [v
l1
, v
m+1
] (14.5)
kifejezessel adott fel uletet NURBS (racionalis Bspline) fel uletnek nevezz uk, a d
ij
pon-
tokat kontrollpontoknak vagy de Boorpontoknak, a w
ij
0 skal arokat pedig s ulyoknak
nevezz uk. N
k
i
(u) az iedik k 1edfok u normalizalt Bspline alapf uggvenyt jeloli (lasd
a (14.3) kifejezest), melyek ertelmezesehez az u
0
, u
1
, . . . , u
n+k
csomoertekek sz uksegesek,
N
l
j
(v)-hez pedig a v
0
, v
1
, . . . , v
m+l
csomoertekek.
Az gy denialt fel ulet altalaban egyik kontrollponton sem megy at, am egybeeso
szomszedos csomoertekek megadas aval ez elerhet o. A gorbekkel analog modon, ha u
0
=
u
1
= = u
k1
, u
n+1
= u
n+2
= = u
n+k
, v
0
= v
1
= = v
l1
es v
m+1
= v
m+2
= =
v
m+l
teljes ul, akkor a fel ulet illeszkedik a d
00
, d
0m
, d
n0
, d
nm
kontrollpontokra.
void gluBeginSurface (GLUnurbsObj *nobj );
void gluEndSurface (GLUnurbsObj *nobj );
A gluBeginSurface() parancs az nobj azonostoj u NURBS fel ulet megadas anak kez-
detet jelzi, a gluEndSurface() parancs pedig a veget. A ketto koz ott a gluNurbsSur-
face() parancs egy vagy tobb meghv asaval lehet a gorbet lerni. A gluNurbsSurface()
parancsot pontosan egyszer kell a GL MAP2 VERTEX 3 vagy GL MAP2 VERTEX 4
parameterrel meghvni.
A fel ulet trimmelese a gluBeginTrim(), gluEndTrim() parancsok kozott kiadott
gluPwlCurve() es gluNurbsCurve() parancsokkal erhet o el.
void gluNurbsSurface (GLUnurbsObj *nobj, GLint uknot count, GLoat *uknot,
GLint vknot count, GLoat *vknot, GLint u stride, GLint v stride, GLoat *ctrlar-
ray, GLint uorder, GLint vorder, GLenum type);
Az nobj azonost oj u NURBS fel uletet rajzolja meg. uorder a fel ulet u irany u rendje
(fokszam + 1), vorder pedig a v irany u. uknot count az u parameter csomoertekeinek
122
szama (uknot count = uorder + az u irany u kontrollpontok szama), vknot count pe-
dig a v parametere. ctrlarray a kontrollhal o elso pontj anak cme. A type pa-
rameter lehetseges ertekei: GL MAP2 VERTEX 3 nem racionalis B-spline fel ulet eseten,
GL MAP2 VERTEX 4 racionalis B-spline fel uletnel, GL MAP2 TEXTURE COORD *
text urakoordinatak, GL MAP2 NORMAL normalisok letrehozas ahoz.
Az u stride, illetve v stride parameterekkel azt kell megadnunk, hogy u, illetve v
iranyban a szomszedos kontrollpontok adatainak tavols aga hany GLoat valtozo.
14.3.3. Trimmelt fel uletek
Elofordulhat, hogy a NURBS fel uletfoltnak csak valamely darabjat (darabjait) akarjuk
megjelenteni. Ezt ugy tehetj uk meg, hogy az ertelmezesi tartomanyt, mely a (14.5)
kifejezes jeloleseit hasznalva eredetileg az [u
k1
, u
n+1
][v
l1
, v
m+1
] teglalap, tor ottvonalak
es NURBS gorbek felhasznal asaval lesz uktj uk. Az ilyen fel uletfoltokat trimmelt NURBS
foltnak nevezz uk. A trimmeles hatarat a parametersk egysegnegyzeteben ([0, 1] [0, 1])
tor ottvonalakbol es NURBS gorbekb ol all o zart gorbekkel adhatjuk meg. Tobb ilyen
zart hatart is megadhatunk, melyek egymasba agyazhat ok (a trimmelt ter uletben is lehet
lyuk), de nem metszhetik egymast. A hatarol o gorbek iranytottak, es ugy kell oket
megadni, hogy a rendszer a gorbet ol balra levo pontokat tekinti az ertelmezesi tartomany
pontjainak.
void gluBeginTrim (GLUnurbsObj *nobj );
void gluEndTrim (GLUnurbsObj *nobj );
Az nobj azonostoj u NURBS fel ulethez, annak denialasa soran a gluBeginTrim()
es gluEndTrim() zarojelp ar koz ott adhatunk meg zart trimmelo gorbeket. A trimmelo
gorbe egy iranytott zart hurok, mely a NURBS fel ulet hatarat rja le. A trimmelo
gorbeket (tobb is megadhato) a fel ulet denial asakor, vagyis a gluBeginSurface(nobj);
es gluEndSurface(nobj); kozott kell megadni. Egy-egy trimmelo gorbe tobb NURBS
gorbebol (gluNurbsCurve())es tor ottvonalbol (gluPwlCurve()) is allhat, azonban
ugyeln unk kell arra, hogy egy zart - az egyik vegpontja essen egybe a kovetkezo
kezdopontj aval, valamint az utolso vegpontja az elso kezdopontj aval - , onmag at nem
metszo hurkot alkossanak.
A rendszer altal megjelentett fel ulet mindig az iranytott trimmelo gorbet ol balra van
(a parameterskon nezve), az elsodleges ertelmezesi tartomany hatar anak iranytasa tehat
oramutat o jar asaval ellentetes. Ha ebbe a fel uletbe egy lyukat akarunk vagni, akkor a
lyuk hatarat az oramutat o jar asaval megegyez o iranyt as u gorbevel kell lerni.
Egy fel ulethez tobb trimmelo gorbe is megadhato, de ezek nem metszhetik egymast,
es ugyeln unk kell az iranytasok helyes megvalaszt as ara.
void gluPwlCurve (GLUnurbsObj *nobj, GLint count, GLoat *array, GLint stride,
GLenum type);
Az nobj azonost oj u NURBS fel ulethez egy trimmelo torottvonalat ad meg. A trim-
melo tor ottvonal cs ucsainak szama count, es a cs ucspontok koordinat ai az array cmen
kezdodnek. A type parameter leggyakrabban GLU MAP1 TRIM 2, ami azt jelenti, hogy
123
a parameterskra illeszkedo cs ucspontokat az (u, v) koordinat akkal adjuk meg, de lehet
GLU MAP1 TRIM 3 is, mely esetben az (u, v, w) homogen koordinat akkal. A stride
parameterrel az egymast kovet o cs ucspontoknak GLoatokban mert tavolsag at kell me-
gadni.
14.3.4. Hibakezeles
A GLU f uggvenykonyvt ar a NURBS objektumokkal kapcsolatban 37 k ulonboz o hibale-
hetoseget gyel. Ha regisztraljuk hibaf uggveny unket, akkor ertes ulhet unk az altalunk
elkovetett hibakr ol. Ezt a regisztraci ot a gluNurbsCallback() paranccsal vegezhetj uk
el.
void gluNurbsCallback (GLUnurbsObj *nobj, GLenum which, void (*fn)(GLenum
errorCode));
which a visszahv as tpusa, hibagyeles eseten erteke GLU ERROR (ez a f uggveny
mas celra is hasznalhat o, a which parameter lehetseges ertekeinek teljes listaj at a 14.3.
tabl azat tartalmazza). Amikor az nobj NURBS objektummal kapcsolatos f uggvenyek
vegrehajtasa soran a rendszer hibat eszlel, meghvja az fn f uggvenyt. Az errorCode a
GLU NURBS ERRORi (i = 1, 2, . . . , 37) ertekek valamelyike lehet, mely jelenteset a
gluErrorString() f uggvennyel kerdezhetj uk le.
gluNurbsCallback(nurbs, GLU ERROR, nurbshiba); // a hibafuggv eny
regisztral asa
void CALLBACK nurbshiba(GLenum errorCode); //a hibafuggv eny

const GLubyte *hiba;


hiba = gluErrorString(errorCode);
fprintf(stderr,NURBS hiba: %sn,hiba);
exit(0);

14.3.5. A NURBS objektumokat kozelto adatok visszanyerese


A rendszer a NURBS objektumokat tor ottvonalakkal, illetve poligonokkal kozelti, es
ezeket jelenti meg a bealltott tulajdonsagoknak megfeleloen. A GLU f uggvenyk onyvtar
1.3 verzi oja lehetove teszi, hogy a kozelt o adatokat ne jelentse meg a rendszer, hanem
azokat visszaadja a felhasznal oi programnak tov abbi feldolgozasra. A kovetkez o lepesek
sz uksegesek ennek elerese erdekeben:
Hvjuk meg a gluNurbsProperty() f uggvenyt a property = GLU NURBS MODE,
value = GLU NURBS TESSELLATOR parameterekkel.
A gluNurbsCallback() f uggveny meghv asaival regisztraljuk a rendszer altal
meghvando f uggvenyeket (lasd a 14.3. tabl azatot).
124
void gluNurbsCallback (GLUnurbsObj *nobj, GLenum which, void (*fn)());
nobj a NURBS objektum azonostoja, which a regisztraland o f uggvenyt ler o, a rend-
szer altal denialt konstans a 14.3. tablazat szerint. Ha a gluNurbsProperty()
f uggvenyt a property = GLU NURBS MODE, value = GLU NURBS TESSELLATOR
parameterekkel hvtuk meg elozoleg, akkor a GLU ERROR-on kv ul 12 tovabbi viss-
zahvand o f uggvenyt regisztrahatunk (lasd a 14.3. tabl azatot).
A regisztralt f uggvenyt barmikor kicserelhetj uk egy masikra a gluNurbsCallback()
ujabb meghv asaval, illetve tor olhetj uk a regisztraci ot, ha a f uggveny nevekent a NULL
pointert adjuk meg. Az adatokhoz az altalunk regisztralt f uggvenyeken kereszt ul jutha-
tunk hozza.
A visszahvand o f uggvenyek koz ul hat lehetove teszi, hogy a felhasznalo adatokat adjon
at neki.
void gluNurbsCallbackData (GLUnurbsObj *nobj void *userData);
nobj a NURBS objektum azonostoja, userData az atadando adat cme.
14.3. tablazat. A gluNurbsCallback() parancs parametereinek ertekei
a which parameter erteke prototpus
GLU NURBS BEGIN void begin(GLenum type);
GLU NURBS BEGIN DATA void beginDat(GLenum type, void
*uData);
GLU NURBS TEXTURE COORD void texCoord(GLoat *tCoord);
GLU NURBS TEXTURE COORD DATA void texCoordDat(GLoat *tCoord,
void *uData);
GLU NURBS COLOR void color(GLoat *color);
GLU NURBS COLOR DATA void colorDat(GLoat *color, void
*uData);
GLU NURBS NORMAL void normal(GLoat *norm);
GLU NURBS NORMAL DATA void normalDat(GLoat *norm, void
*uData);
GLU NURBS VERTEX void vertex(GLoat *vertex);
GLU NURBS VERTEX DATA void vertexDat(GLoat *vertex, void
*uData);
GLU NURBS END void end(void);
GLU NURBS END DATA void endDat(void *uData);
GLU ERROR void error(GLenum errorCode);
14.4. Gomb, k up es korgy ur u rajzolasa
A GLU f uggvenyk onyvt ar lehetoseget biztost gomb, forgasi csonkak up, korgy ur u es
korgy ur ucikk megjelentesere. A konyvt ar keszt oi ezeket az alakzatokat osszefoglal oan
125
masodrend u fel uletnek nevezik, ami helytelen, mivel a korgy ur u nem masodrend u fel ulet,
a forgask up csak specialis esete a masodrend u k upnak (raadasul a rendszer ezt henger-
nek nevezi) es a masodrend u fel uletek t ulnyomo tobbsege hianyzik (ellipszoid, egy- es
ketk openy u hiperboloid, elliptikus es hiperbolikus paraboloid, altal anos masodrend u k up
es henger).
A NURBS fel uletekhez hasonloan ezeket az alakzatokat is poligonhal oval kozelti a
rendszer es a kozelt o poligonhal ot abr azolja. Az objektumok abr azolas anak a menete is
nagymertekben hasonlt a NURBS gorbek es fel uletek megjelentesehez.
Letre kell hoznunk egy objektumstrukt ur at a gluNewQuadric() paranccsal.
Beallthatjuk az objektum megjeleneset befolyasol o attrib utumokat, gy:
A gluQuadricOrientation() paranccsal az iranyt ast adhatjuk meg, vagyis
azt, hogy mi tekintend o k uls o, illetve belso resznek.
A gluQuadricDrawStyle() paranccsal azt rhatjuk elo, hogy a kozelt o poli-
gonhalot a cs ucspontjaival, eleivel vagy kitolt ott poligonjaival abrazolja a rend-
szer.
A gluQuadricNormal() paranccsal kivalaszthatjuk, hogy a normalisokat
minden cs ucspontban kiszamolja a rendszer, vagy laponkent csak egyet, vagy
egyaltalan ne szamoljon normalist.
A gluQuadricTexture() paranccsal rhatjuk elo a text urakoordinatak
letrehozas at.
Hibaf uggvenyt regisztralhatunk a gluQuadricCallback() paranccsal, vagyis azt a
f uggvenyt, amit a rendszer meghv, ha hibat eszlel az objektum letrehozasa vagy
abr azolasa soran.
Meg kell hvni az objektumot megjelent o parancsot (gluSphere(), gluCylinder(),
gluDisk(), gluPartialDisk()).
Tor olhetj uk az objektumot a gluDeleteQuadric() paranccsal, amennyiben a
tov abbiakban mar nincs ra sz ukseg unk.
GLUquadricObj* gluNewQuadric (void);
Egy uj GLUquadricObj tpus u strukt uravaltoz ot hoz letre, es ennek a cmet adja
vissza. Sikertelen hvas eseten a visszaadott cm NULL.
void gluDeleteQuadric (GLUquadricObj *qobj );
Torli a qobj cmen tarolt GLUquadricObj tpus u valtozot, azaz felszabadtja a
letrehoz asakor lefoglalt memoriat.
void gluQuadricCallback (GLUquadricObj *qobj, GLenum which, void(*fn)());
Az itt megadott fn f uggvenyt hvja meg a rendszer, ha a qobj megjelentese soran
hibat eszlel. A which valtoz o erteke csak GLU ERROR lehet. Ha a meghvand o f uggveny
126
cmekent a NULL cmet adjuk at, akkor a rendszer ezen objektummal kapcsolatos hiba
eseten nem fog semmit meghvni. A felhasznaloi program az fn f uggveny parametereben
kapja vissza a hiba kodj at, melynek szoveges leras at ezen koddal meghvott gluError-
String() f uggvennyel kapjuk meg (lasd meg a 14.3.4. pontot).
void gluQuadricDrawStyle (GLUquadricObj *qobj, GLenum drawStyle);
A qobj objektum abr azol asanak modj at alltja be. drawStyle lehetseges ertekei:
GLU POINT, az objektumot a kozelt o poligonhalo cs ucspontjaival abrazolja.
GLU LINE, az objektumot a kozelt o poligonhalo eleivel abrazolja.
GLU SILHOUETTE, az objektumot a kozelt o poligonhal o eleivel abr azolja, de a
komplan aris, kozos oldallal br o poligonoknak a koz os oldalait nem rajzolja meg
(ennek az opcionak pl. a k upok es hengerek alkot oinak megrajzolasakor van je-
lent osege).
GLU FILL, az objektumot a kozelt o poligonhal o kitolt ott poligonjaival abrazolja.
A poligonokat a normalisukhoz kepest pozitv (az oramutat o jar asaval ellentetes)
iranyt as unak tekinti.
void gluQuadricOrientation (GLUquadricObj *qobj, GLenum orientation);
A qobj objektum normalisainak iranytas at hatarozza meg. Az orientation pa-
rameter lehetseges ertekei GLU OUTSIDE, illetve GLU INSIDE, melyek kifele, il-
letve befele mutat o normalisokat eredmenyeznek. Ezek ertelmezese gomb es forgask up
eseten ertelemszer u, korgy ur u eseten a kifele irany a lap z tengelyenek pozitv fele.
Alapertelmezes: GLU OUTSIDE.
void gluQuadricNormals (GLUquadricObj *qobj, GLenum normals);
A qobj objektum normalisainak kiszamtasi modjat hatarozza meg. A normals pa-
rameter lehetseges ertekei:
GLU NONE, a rendszer nem hoz letre normalisokat. Ez csak akkor ajanlott, ha a
megvilagtas nem engedelyezett.
GLU FLAT, laponkent csak egy normalist hoz letre a rendszer, ami konstans
arnyalashoz (lasd a 4. fejezetet) ajanlott.
GLU SMOOTH, minden cs ucsponthoz k ul on normalist hoz letre, ami folytonos
arnyalas (lasd a 4. fejezetet) eseten ajanlott.
Alapertelmezes: GLU NONE.
127
void gluQuadricTexture (GLUquadricObj *qobj, GLboolean textureCoords);
A qobj objektumhoz a textureCoords parameter ertekenek megfeleloen
text urakoordinatakat is letrehoz (GL TRUE), vagy nem hoz letre (GLU FALSE).
Alapertelmezes: GLU FALSE. A text uralekepezes modja az objektum tpusat ol f ugg.
void gluSphere (GLUquadricObj *qobj, GLdouble radius, GLint slices, GLint stacks);
Megjelenti a qobj azonost oj u, origo kozeppont u, radius sugar u gombot. A
kozelteshez a rendszer a z tengelyre merolegesen slices darab skkal metszi a gombot
(szelessegi kor ok), tov abba stacks darab z tengelyre illeszked o skkal (hossz us agi kor ok). A
text ura lekepezese a kovetkez o: a text ura t koordinat ajat linearisan kepezi le a hossz us agi
kor okre az alabbiak szerint t = 0 z = radius, t = 1 z = radius; az s koor-
dinat akat pedig a szelessegi kor okre a kovetkezo megfeleltetes szerint s = 0 (R, 0, z),
s = 0.25 (0, R, z), s = 0.5 (R, 0, z), s = 0.75 (0, R, z), s = 1 (R, 0, z), ahol
R a z magassagban lev o szelessegi kor sugara.
void gluCylinder (GLUquadricObj *qobj, GLdouble baseRadius, GLdouble topRadius,
GLdouble height, GLint slices, GLint stacks);
Azt a qobj azonostoj u z tengely u forgasi csonkak upot abrazolja, melynek alapkore a
z = 0, fedokore a z = height magassagban van. A kozelteshez a rendszer slices darab
z tengelyre meroleges kort es stacks darab alkot ot vesz fel. Az alapkor sugara baseRa-
dius, a fedokor sugara pedig topRadius. baseRadius = 0 eseten forgask up fel uletet ka-
punk, topRadius = baseRadius eseten pedig forgashengert. A rendszer csak a csonkak up
palastj at abr azolja, az alap es fedok ort nem. A text ura lekepezese a kovetkez o: a text ura
t koordinat aj at linearisan kepezi le az alkotokra ugy, hogy a megfeleltetes t = 0 z = 0,
t = 1 z = height legyen. Az s koordinat ak lekepezese megegyezik a gombnel lertakkal.
void gluDisk (GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius,
GLint slices, GLint rings);
A qobj azonostoj u korgy ur ut abr azolja a z = 0 skon. A korgy ur u k ulso sugara
outerRadius, belso sugara pedig innerRadius. innerRadius = 0 eseten teljes korlap
jon letre. A kozelteshez a rendszer slices darab korcikkre es rings darab koncentrikus
korgy ur ure osztja az alakzatot. A normalisok iranyt asakor a z tengely pozitv felet te-
kinti kifele iranynak, ami a gluQuadricOrientation() paranccsal megvaltoztathato. A
text ura lekepezeset linearisan vegzi el a kovetkez o megfeleltetes szerint: (s = 1, t = 0.5)
(R, 0, 0), (s = 0.5, t = 1) (0, R, 0), (s = 0, t = 0.5) (R, 0, 0) es (s = 0.5, t = 0)
(0 R, 0), ahol R = outerRadius.
void gluPartialDisk (GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outer-
Radius, GLint slices, GLint rings, GLdouble startAngle, GLdouble sweepAngle);
A qobj azonostoj u korgy ur ucikket abr azolja. A korgy ur ucikk a z = 0 skon jon
letre, k uls o sugara outerRadius, belso sugara innerRadius, a cikk kezd oszoge az y tengely
128
pozitv feletol mert startAngle, kozepponti szoge sweepAngle. A szogeket fokban kell
megadni. innerRadius = 0 eseten korcikket kapunk. A normalisok iranytasa es a text ura
lekepezese megegyezik a korgy ur unel lertakkal.
129
15. fejezet
A gluj f uggvenykonyvtar
A GLUJ f uggvenykonyvt ar az OpenGL gorbe- es fel uletmegjelent o kepessegenek
kiegesztesere kesz ult. Hasznalatahoz inkludalni kell a gluj.h fajlt, valamint a program-
hoz kell szerkeszteni a gluj32.lib konyvtarat. A mellekelt valtozat a Visual C/C++ 6.0
rendszerhez kesztett uk.
15.1. Gorbeket es fel uleteket megjelento f uggvenyek
Hasznalatuk gyakorlatilag megegyezik a GLU f uggvenykonyvt ar NURBS gorbet, illetve
fel uletet megjelent o f uggvenyeinek hasznalataval, tehat a gluNewNurbsRenderer()
f uggvennyel letre kell hozni egy NURBS objektum strukt urat, mely utan ennek a tu-
lajdonsagai a gluNurbsProperty() f uggvennyel beallthat ok (a tulajdonsagok koz ul
a kozeltes pontoss ag at - GLU SAMPLING TOLERANCE - veszik gyelembe a GLUJ
f uggvenyek), majd gorbek eseten a gluBeginCurve(), gluEndCurve(), fel uleteknel pe-
dig a gluBeginSurface(), gluNurbsSurface() f uggvenyek koz ott meghvhatjuk a meg-
felelo gorbe-, illetve fel uletrajzolo gluj f uggvenyt.
15.1.1. Gorbek rajzolasa
void glujBezierCurve (GLUnurbsObj *nobj, GLint cp count, GLint stride, GLoat
*ctrlarray, GLenum type);
Az nobj azonostoj u Bezier-g orbet rajzolja meg.
cp count a kontrollpontok szama,
stride az egymast koveto kontrollpontok GLoatban mert tavolsaga,
*ctrlarray az elso kontrollpont cme,
type parameter lehetseges ertekei: GL MAP1 VERTEX 3 nem racionalis Bezier-
gorbe eseten (a pontok harom, vagyis Descartes-fele koordinataval adottak),
GL MAP1 VERTEX 4 racionalis Bezier-g orbe eseten (a pontok negy, azaz homogen ko-
ordinat aval adottak).
130
void glujHermiteSpline (GLUnurbsObj *hs, GLint cp count, GLint cp stride,
GLoat *cp, GLenum type, GLint tg stride, GLoat *tg);
A hs azonostoj u Hermite-spline gorbet rajzolja meg.
cp stride az egymast kovet o pontok GLoatban mert tavols aga,
*cp az elso pont cme,
type parameter lehetseges ertekei: GL MAP1 VERTEX 3 ha a pontok harom, vagyis
Descartes-fele koordinat aval adottak, GL MAP1 VERTEX 4 ha a pontok negy, azaz ho-
mogen koordinat aval adottak,
tg stride az egymast kovet o erint ovektorok GLoatban mert tavols aga,
*tg az elso erint ovektor cme.
void glujCircle (GLUnurbsObj *nobj, GLint stride, GLoat *points, GLoat radius,
GLenum type);
Az nobj azonostoj u kort rajzolja meg.
stride az egymast koveto pontok GLoatban mert tavols aga,
*points a kor kozeppontj at es skj anak normalis at tartalmazo vektor cme,
radius a kor sugara,
type parameter lehetseges ertekei: GL MAP1 VERTEX 3 ha a pontok harom, vagyis
Descartes-fele koordinat aval adottak, GL MAP1 VERTEX 4 ha a pontok negy, azaz ho-
mogen koordinat aval adottak.
void glujTrimmedNurbsCurve (GLUnurbsObj *nobj, GLint knot count, GLoat
*knot, GLint stride, GLoat *ctrlarray, GLint order, GLenum type, GLoat u min,
GLoat u max);
Az [u min, u max] es [knot[order 1], knot[knot count order]] intervallumok met-
szetet veszi es az nobj azonost oj u NURBS gorbenek ezen intervallum fol otti darabjat
jelenti meg.
knot count a csomoertekek szama (knot count = order + a kontrollpontok szama),
*knot az elso csomoertek cme,
stride a szomszedos kontrollpontok adatainak tavols aga GLoat-okban merve,
*ctrlarray a kontrollpoligon elso pontj anak a cme,
order a gorbe rendje,
type parameter lehetseges ertekei: GL MAP1 VERTEX 3 nem racionalis B-
spline gorbe eseten (a pontok harom, vagyis Descartes-fele koordinat aval adottak),
GL MAP1 VERTEX 4 racionalis B-spline gorbe eseten (a pontok negy, azaz homogen
koordinat aval adottak).
void glujParamCurve (void (*fn)(oat, oat *), GLenum mode, GLint uxed count,
GLoat *u xed, GLoat u min, GLoat u max);
Az fn f uggvennyel lert parameteres gorbenek az [u min, u max] intervallum fol otti
reszet abrazolja torottvonallal vagy pontjaival.
fn a gorbe egy pontjat kiszamt o f uggveny. A f uggveny prototpusa:
131
void fn(oat u, oat p[3] );
mely a gorbe u parameter u pontj at kiszamtja es a p vektorban visszaadja.
mode a megjelentes modj at rja elo, lehetseges ertekei:
GLUJ LINES a gorbet uxed count 0 szam u rogztett u ertekhez tar-
tozo gorbepontot osszek oto torottvonallal jelenti meg. *u xed a rogztett u ertekeket
tartalmazo vektor cme. Ha uxed count > 1 es u fixed = NULL, akkor a pa-
rametertartom anyban egymastol egyenl o tavolsagra lev o uxed count darab u erteket
rogzt a f uggveny, es az ezekhez tartozo pontokat osszekot o tor ottvonalat abr azolja.
GLUJ POINT MESH a gorbet az adott u ertekekhez tartozo pontokkal
abr azolja. A uxed count, *u xed parameterekre a GLUJ LINES -nal lertak ervenyesek.
Peldaul az x (u) = 1/ cosh (u) , y (u) = u tanh (u) koordinataf uggvenyekkel adott
traktrixot a
void traktrix(float u,float p[3])

p[0] = 1./cosh(u);
p[1] = u - tanh(u);
p[2] = 0.;

f uggvennyel rjuk le. A


glujParamCurve(traktrix,GLUJ POINT MESH,20,NULL,-4.0,4.);
f uggvenyhv as eredmenye a 15.1./a abra, a
glujParamCurve(traktrix,GLUJ LINES,100,NULL,-4.0,4.);
hv ase pedig a 15.1./b abra.
15.1. abra. A glujParamCurve( ) f uggvennyel abrazolt gorbek
132
15.1.2. Fel uletek szemleltetese
void glujNurbsSurface (GLUnurbsObj *nobj, GLint uknot count, GLoat *uknot,
GLint vknot count, GLoat *vknot, GLint u stride, GLint v stride, GLoat *ctrlar-
ray, GLint uorder, GLint vorder, GLenum type, GLenum mode, GLint uxed count,
GLoat *u xed, GLint vxed count, GLoat *v xed, GLoat u min, GLoat
u max, GLoat v min, GLoat v max, GLoat , int ud, int vd);
Az nobj azonost oj u NURBS fel ulet kontrollpontjait, kontrollpoligonjat,
vagy a ([u min, u max] [uknt[uorder 1], uknt[uknot count uorder]])
([v min, v max] [vknt[vorder 1], vknt[vknot count vorder]]) tartomany folotti
parametervonalait, pontjait, vagy normalisait jelenti meg.
uknot count az u parameter csomoertekeinek szama (uknot count = uorder + az u
irany u kontrollpontok szama),
*uknot az elso u irany u csomoertek cme,
vknot count az v parameter csomoertekeinek szama (vknot count = vorder + az v
irany u kontrollpontok szama),
*vknot az elso v irany u csomoertek cme,
u stride u iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
v stride v iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
*ctrlarray a kontrollhal o elso pontjanak a cme,
uorder a fel ulet u irany u rendje,
vorder a fel ulet v irany u rendje,
type parameter lehetseges ertekei: GL MAP2 VERTEX 3 nem racionalis B-
spline fel ulet eseten (a pontok harom, vagyis Descartes-fele koordinat aval adottak),
GL MAP2 VERTEX 4 racionalis B-spline fel ulet eseten (a pontok negy, azaz homogen
koordinat aval adottak),
mode a megjelentes modj at rja elo, lehetseges ertekei:
GLUJ CONTROL POLYGON MESH a kontrollh al ot rajzolja meg,
GLUJ CONTROL POINT MESH a kontrollpontokat jelenti meg,
GLUJ ISO LINES a fel uletet parametervonalaival abrazolja, megpedig az
uxed count 0 szam u rogztett u ertekhez tartozo v irany u, es a vxed count 0
szam u rogztett v ertekhez tartozo u irany u parametervonallal. *u xed a rogztett u
ertekeket tartalmazo vektor cme, *v xed a rogztett v ertekeket tartalmazo vektore.
Ha uxed count > 1 es u fixed = NULL, akkor a parametertartom anyban egymast ol
egyenlo tavols agra lev o uxed count darab u erteket rogzt a f uggveny es az ezekhez
tartozo v irany u parametervonalakat jelenti meg. A vxed count es *v xed parameterek
hasznalata ezzel analog.
GLUJ ISO LINES WITH OFFSET a fel uletet parametervonalaival ekvi-
disztans (attol adott tavols agra lev o) gorbekkel abr azolja. Az uxed count, vxed count,
*u xed es *v xed parameterek jelentese megegyezik a GLUJ ISO LINES modn al
lertakkal. u irany u parametervonalak eseten az ertelmezesi tartomanyt ud egyenl o reszre
osztja, az ezekhez tartozo fel uleti pontokat a pontbeli normalis menten mertekben el-
133
tolja es ezeket a pontokat koti ossze egyenes szakaszokkal. A v irany u parametervonalak
letrehoz asa ezzel analog.
GLUJ POINT MESH a fel uletet a megadott u es v ertekekhez tartozo
pontokkal abrazolja. Az uxed count, *u xed, vxed count, *v xed parameterekre a
GLUJ ISO LINES -nal lertak ervenyesek.
GLUJ NORMAL MESH a fel uletnek a megadott u es v ertekekhez tartozo
normalisait abrazolja. Az uxed count, *u xed, vxed count, *v xed parameterekre a
GLUJ ISO LINES -nal lertak ervenyesek. A normalvektorok hosszat es iranytas at az
parameter befolyasolja: fl = 0 eseten a normalvektorok hossza es iranyt asa a kiszamtott
lesz, egyebkent a normalizalt normalvektor -szerese.
15.2. abra. A fel ulet kontrollh aloja es kontrollpontjai
A 15.2. - 15.6. abrak ugyanannak a fel uletnek a glujNurbsSurface() f uggvennyel
elerhet o neh any szemleltetesi modj at demonstralj ak. A 15.2. abran a fel ulet kon-
trollhal ojat es a kontrollpontjait lathatjuk. Ehhez a glujNurbsSurface() f uggvenyt
ketszer kell meghvni: egyszer a GLUJ CONTROL POLYGON MESH, egyszer a
GLUJ CONTROL POINT MESH parameterrel. A 15.3. abran a kitoltott poligonokkal
abr azolt megvilagtott fel uletet lathatjuk (ezt a gluNurbsSurface() f uggvennyel rajzol-
tuk), valamint fel uleti pontokat es ezekben az egysegnyi hossz us ag u normalvektorokat.
Az utobbiakat a glujNurbsSurface() f uggvenynek a GLUJ POINT MESH, illetve
GLUJ NORMAL MESH parameterekkel valo meghvas aval hoztuk letre. A 15.4. abra
parametervonalaival szemlelteti a fel uletet (GLUJ ISO LINES opcio). A 15.5. es a 15.6.
abra azt demonstralja, hogy miert van sz ukseg a parametervonallal ekvidisztans gorbekre
(GLUJ ISO LINES WITH OFFSET opcio). A 15.5. abr an a fel ulet arnyalt kepet latjuk,
amire folytonos vonallal rarajzoltuk a parametervonalakat. A kepen a parametervonalak
nem folytonosak, szinte veletlenszer uen hol a fel ulet, hol a parametervonal latszik a meg-
felelo pixeleken. Ezert csalashoz folyamodunk, a parametervonalak helyett a vel uk ekvi-
134
disztans gorbeket rajzoljuk meg, lasd a 15.6. abr at. Mar nagyon csekely eltolas - abrankon
ez 0.016 egyseg - is elegendo a kvant hatas elerese erdekeben.
135
15.3. abra. A megvilagtott fel ulet, nehany fel uleti pont es azokban a fel uleti normalis
15.4. abra. A fel ulet nehany parametervonala
136
15.5. abra. A fel ulet parametervonalakkal
15.6. abra. A fel ulet es a parametervonalaival ekvidisztans gorbek
137
void glujBezierSurface (GLUnurbsObj *nobj, GLint ucp count, GLint vcp count,
GLint u stride, GLint v stride, GLoat *ctrlarray, GLenum type, GLenum mode,
GLint uxed count, GLoat *u xed, GLint vxed count, GLoat *v xed, GLoat
u min, GLoat u max, GLoat v min, GLoat v max, GLoat , int ud, int vd);
Az nobj azonost oj u Bezier-fel ulet kontrollpontjait, kontrollpoligonjat, vagy a
fel uletet kozelto kitolt ott poligonokat, azok hatarat, a fel ulet hatarolo gorbeit je-
lenti meg, vagy a ([u min, u max] [uknt[uorder 1], uknt[uknot count uorder]])
([v min, v max] [vknt[vorder 1], vknt[vknot count vorder]]) tartomany folotti pa-
rametervonalait, pontjait, vagy normalisait abr azolja.
ucp count az u irany u kontrollpontok szama,
vcp count a v irany u kontrollpontok szama,
u stride u iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
v stride v iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
*ctrlarray a kontrollhal o elso pontjanak a cme,
type parameter lehetseges ertekei: GL MAP2 VERTEX 3 nem racionalis B-
spline fel ulet eseten (a pontok harom, vagyis Descartes-fele koordinat aval adottak),
GL MAP2 VERTEX 4 racionalis B-spline fel ulet eseten (a pontok negy, azaz homogen
koordinat aval adottak),
mode a megjelentes modj at rja elo, lehetseges ertekei:
GLUJ CONTROL POLYGON MESH a kontrollh al ot rajzolja meg,
GLUJ CONTROL POINT MESH a kontrollpontokat jelenti meg,
GLUJ ISO LINES a fel uletet parametervonalaival abrazolja, megpedig az
uxed count 0 szam u rogztett u ertekhez tartozo v irany u, es a vxed count 0
szam u rogztett v ertekhez tartozo u irany u parametervonallal. *u xed a rogztett u
ertekeket tartalmazo vektor cme, *v xed a rogztett v ertekeket tartalmazo vektore.
Ha uxed count > 1 es u fixed = NULL, akkor a parametertartom anyban egymast ol
egyenlo tavols agra lev o uxed count darab u erteket rogzt a f uggveny es az ezekhez
tartozo v irany u parametervonalakat jelenti meg. A vxed count es *v xed parameterek
hasznalata ezzel analog.
GLUJ ISO LINES WITH OFFSET a fel uletet parametervonalaival
abr azolja, megpedig ugy, hogy a parametervonalat a fel uletre merolegesen eltolja.
Az uxed count, vxed count, *u xed es *v xed parameterek jelentese megegyezik a
GLUJ ISO LINES modnal lertakkal. u irany u parametervonalak eseten az ertelmezesi
tartomanyt ud egyenlo reszre osztja, az ezekhez tartozo fel uleti pontokat a pontbeli
normalis menten mertekben eltolja es ezeket a pontokat koti ossze egyenes szakaszokkal.
A v irany u parametervonalak letrehoz asa ezzel analog.
GLUJ POINT MESH a fel uletet a megadott u es v ertekekhez tartozo
pontokkal abrazolja. Az uxed count, *u xed, vxed count, *v xed parameterekre a
GLUJ ISO LINES -nal lertak ervenyesek.
GLUJ NORMAL MESH a fel uletnek a megadott u es v ertekekhez tartozo
normalisait abrazolja. Az uxed count, *u xed, vxed count, *v xed parameterekre a
GLUJ ISO LINES -nal lertak ervenyesek. A normalvektorok hosszat es iranytas at az
parameter befolyasolja: fl = 0 eseten a normalvektorok hossza es iranyt asa a kiszamtott
138
lesz, egyebkent a normalizalt normalvektor -szerese,
GLU FILL a fel uletet kozelto kitolt ott poligonokat jelenti meg (mint a
NURBS fel uletek eseten),
GLU OUTLINE POLYGON a fel uletet kozelto poligonok eleit jelenti meg
(mint a NURBS fel uletek eseten),
GLU OUTLINE PATCH a fel ulet hatarol o gorbeit jelenti meg (mint a
NURBS fel uletek eseten).
void glujParamSurface (void (*fn)(oat, oat, oat *), GLenum mode, GLint u-
xed count, GLoat *u xed, GLint vxed count, GLoat *v xed, GLoat u min,
GLoat u max, GLoat v min, GLoat v max, int ud, int vd);
Az fn f uggvennyel lert parameteres fel uletnek az [u min, u max] [v min, v max]
tartomany folotti reszet abr azolja parametervonalaival, pontjaival, haromszogh aloval,
vagy kitolt ott haromszogekkel.
fn a fel ulet egy pontj at kiszamt o f uggveny. A f uggveny prototpusa:
void fn(oat u, oat v, oat p[3] );
mely a fel ulet (u, v) parameter u pontjat kiszamtja es a p vektorban visszaadja.
mode a megjelentes modj at rja elo, lehetseges ertekei:
GLUJ ISO LINES a fel uletet parametervonalaival abrazolja, megpedig az
uxed count 0 szam u rogztett u ertekhez tartozo v irany u, es a vxed count 0,
szam u rogztett v ertekhez tartozo u irany u parametervonallal. *u xed a rogztett u
ertekeket tartalmazo vektor cme, *v xed a rogztett v ertekeket tartalmazo vektore.
Ha uxed count > 1 es u fixed = NULL, akkor a parametertartom anyban egymast ol
egyenlo tavols agra lev o uxed count darab u erteket rogzt a f uggveny es az ezekhez
tartozo v irany u parametervonalakat jelenti meg. A megjelenteshez a parametervonal
ertelmezesi tartomany at vd-1 egyenl o reszre osztja, es az ezekhez tartozo gorbepontokat
egyenes szakaszokkal koti ossze. A vxed count, *v xed es ud parameter hasznalata ezzel
analog.
GLUJ POINT MESH a fel uletet a megadott u es v ertekekhez tartozo pon-
tokkal abr azolja. A uxed count, *u xed, ud, vxed count, *v xed, vd parameterekre a
GLUJ ISO LINES -nal lertak ervenyesek.
GLUJ TESS POLYGON a fel uletet kozelt o haromsz oghal oval abr azolja,
melyet ugy allt elo, hogy a parametertartomanyt u iranyban ud, v iranyban vd egyenlo
reszre osztja.
GLUJ FILL POLYGON a fel uletet kozelt o kitolt ott haromsz ogh aloval
abr azolja. A haromszogh al o eloalltasa a GLUJ TESS POLYGON opcion al lert modon
tortenik.
15.2. Pontok, erintok, normalvektorok
Az itt ismertetendo f uggvenyek nem rajzolnak, csak gorbekre es fel uletekre illeszkedo pon-
tokat, gorbek erint ojet, valamint fel uletek normalvektorat szamtj ak ki. Ezek a f uggvenyek
139
tehat inkabb a geometriai modellezeshez tartoznak, tapasztalatunk szerint azonban sok
esetben sz ukseg van rajuk az igenyesebb szemleltetes soran is.
int glujPointOnNurbsCurve (GLint uknot count, GLoat *uknot, GLint u stride,
GLoat *ctrlarray, GLint uorder, GLoat u, GLoat *pt, int ncoord);
NURBS gorbe adott parameterertekhez tartozo pontjanak koordinatait szamtja ki.
uknot count a csomoertekek szama (uknot count = uorder + a kontrollpontok szama),
*uknot az elso csomoertek cme,
u stride a szomszedos kontrollpontok adatainak tavolsaga GLoat-okban merve,
*ctrlarray a kontrollpoligon elso pontj anak a cme,
uorder a gorbe rendje,
u a kiszamtand o ponthoz tartozo parameterertek,
*pt ebben a vektorban adja vissza a kiszamtott pont koordinatait,
ncoord a kontrollpontok koordinatainak szama: 3, ha a pontok Descartes-fele koor-
dinat aval adottak; 4, ha homogen koordinat aval.
A visszaadott ertek negatv, ha a pont kiszamt asa meghi usult, egyebkent 0.
int glujPointOnBezierCurve (GLint cp count, GLint u stride, GLoat *ctrlarray,
GLoat u, GLoat *pt, int ncoord);
Bezier-gorbe adott parameterertekhez tartozo pontjanak koordinatait szamtja ki.
cp count a kontrollpontok szama,
u stride a szomszedos kontrollpontok adatainak tavolsaga GLoat-okban merve,
*ctrlarray a kontrollpoligon elso pontj anak a cme,
u a kiszamtand o ponthoz tartozo parameterertek,
*pt ebben a vektorban adja vissza a kiszamtott pont koordinatait,
ncoord a kontrollpontok koordinatainak szama: 3, ha a pontok Descartes-fele koor-
dinat aval adottak; 4, ha homogen koordinat aval.
A visszaadott ertek negatv, ha a pont kiszamt asa meghi usult, egyebkent 0.
int glujDerBsplineCurve (GLint uknot count, GLoat *uknot, GLint u stride,
GLoat *ctrlarray, GLint uorder, GLoat u,GLoat *p, int ncoord);
B-spline gorbe derivaltj at (erint ovektor at) szamtja ki az adott pontban.
uknot count a csomoertekek szama (uknot count = uorder + a kontrollpontok szama),
*uknot az elso csomoertek cme,
u stride a szomszedos kontrollpontok adatainak tavolsaga GLoat-okban merve,
*ctrlarray a kontrollpoligon elso pontj anak a cme,
uorder a gorbe rendje,
u az a parameterertek, ahol a derivaltat ki kell szamtani,
*p ebben a vektorban adja vissza a kiszamtott derivalt koordinat ait,
ncoord a kontrollpontok koordinatainak szama: 2 vagy 3.
A visszaadott ertek negatv, ha a pont kiszamt asa meghi usult, egyebkent 0.
140
int glujDerNurbsCurve (GLint uknot count, GLoat *uknot, GLint u stride, GLoat
*ctrlarray, GLint uorder, GLoat u,GLoat *p, int ncoord);
NURBS gorbe derivaltj at (erint ovektor at) szamtja ki az adott pontban.
uknot count a csomoertekek szama (uknot count = uorder + a kontrollpontok szama),
*uknot az elso csomoertek cme,
u stride a szomszedos kontrollpontok adatainak tavolsaga GLoat-okban merve,
*ctrlarray a kontrollpoligon elso pontj anak a cme,
uorder a gorbe rendje,
u az a parameterertek, ahol a derivaltat ki kell szamtani,
*p ebben a vektorban adja vissza a kiszamtott derivalt koordinat ait,
ncoord a kontrollpontok koordinatainak szama: 3, ha a pontok Descartes-fele koor-
dinat akkal adottak (vagyis B-spline gorber ol van szo); 4, ha homogen koordinatakkal
(vagyis a gorbe racionalis).
A visszaadott ertek negatv, ha a pont kiszamt asa meghi usult, egyebkent 0.
int glujPointOnNurbsSurface (GLint uknot count, GLoat *uknot, GLint
vknot count, GLoat *vknot, GLint u stride, GLint v stride, GLoat *ctrlarray,
GLint uorder, GLint vorder, GLoat u, GLoat v, GLoat *pt, int ncoord);
NURBS fel ulet (u, v) parameter u pontj anak koordinat ait szamtja ki.
uknot count a fel ulet u irany u csomoertekeinek szama (uknot count = uorder + az u
irany u kontrollpontok szama),
*uknot az elso u irany u csomoertek cme,
vknot count az v parameter csomoertekeinek szama (vknot count = vorder + az v
irany u kontrollpontok szama),
*vknot az elso v irany u csomoertek cme,
u stride u iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
v stride v iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
*ctrlarray a kontrollhal o elso pontjanak a cme,
uorder a fel ulet u irany u rendje,
vorder a fel ulet v irany u rendje,
u, v a kiszamtand o pont parameterei,
*pt ebben a vektorban adja vissza a kiszamtott pont koordinatait,
ncoord a kontrollpontok koordinatainak szama: 3, ha a pontok Descartes-fele koor-
dinat akkal adottak; 4, ha homogen koordinat akkal.
A visszaadott ertek negatv, ha a pont kiszamt asa meghi usult, egyebkent 0.
int glujIsolineOnNurbsSurface (GLint uknot count, GLoat *uknot, GLint
vknot count, GLoat *vknot, GLint u stride, GLint v stride, GLoat *ctrlarray,
GLint uorder, GLint vorder, int ncoord, int dir, oat val, GLoat *pv);
NURBS fel ulet u vagy v irany u parametervonal anak kontrollpontjait szamtja ki.
141
uknot count a fel ulet u irany u csomoertekeinek szama (uknot count = uorder + az u
irany u kontrollpontok szama),
*uknot az elso u irany u csomoertek cme,
vknot count az v parameter csomoertekeinek szama (vknot count = vorder + az v
irany u kontrollpontok szama),
*vknot az elso v irany u csomoertek cme,
u stride u iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
v stride v iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
*ctrlarray a kontrollhal o elso pontjanak a cme,
uorder a fel ulet u irany u rendje,
vorder a fel ulet v irany u rendje,
ncoord a kontrollpontok koordinatainak szama: 3, ha a pontok Descartes-fele koor-
dinat akkal adottak; 4, ha homogen koordinat akkal.
dir a kiszamtando parametervonal irany at jelzo szam. Ha erteke 1, akkor v irany u
parametervonal kontrollpontjait szamtja ki (azaz egy u ertek rogztett), ha erteke 2,
akkor u irany u parametervonal kontrollpontjait szamtja ki (azaz egy v ertek rogztett).
val a kiszamtando parametervonalhoz tartozo rogztett u vagy v parameterertek, a
dir parameternek megfeleloen.
*pv ebben a vektorban adja vissza a kiszamtott kontrollpontok koordinatait.
A visszaadott ertek negatv, ha a kontrollpontok kiszamt asa meghi usult, egyebkent
0.
int glujNormalOfNurbsSurface (GLint uknot count, GLoat *uknot, GLint
vknot count, GLoat *vknot, GLint u stride, GLint v stride, GLoat *ctrlarray,
GLint uorder, GLint vorder, GLoat u, GLoat v, GLoat *norm, int ncoord);
NURBS fel ulet (u, v) parameter u pontjaban a fel ulet normalisanak koordinatait
szamtja ki.
uknot count a fel ulet u irany u csomoertekeinek szama (uknot count = uorder + az u
irany u kontrollpontok szama),
*uknot az elso u irany u csomoertek cme,
vknot count az v parameter csomoertekeinek szama (vknot count = vorder + az v
irany u kontrollpontok szama),
*vknot az elso v irany u csomoertek cme,
u stride u iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
v stride v iranyban a szomszedos kontrollpontok adatainak tavols aga GLoat-okban
merve,
*ctrlarray a kontrollhal o elso pontjanak a cme,
uorder a fel ulet u irany u rendje,
vorder a fel ulet v irany u rendje,
u, v a kiszamtand o pont parameterei,
*norm ebben a vektorban adja vissza a kiszamtott normalis koordinatait,
ncoord a kontrollpontok koordinatainak szama: 3, ha a pontok Descartes-fele koor-
dinat akkal adottak; 4, ha homogen koordinat akkal.
142
A visszaadott ertek negatv, ha a pont kiszamt asa meghi usult, egyebkent 0.
143
16. fejezet
Kepessegek engedelyezese, letiltasa
es lekerdezese
Az OpenGL-nek szamos olyan kepessege van, amelyet engedelyezhet unk (akti-
vizalhatunk), letilthatunk, illetve lekerdezhetj uk az allapotat.
void glEnable (GLenum cap);
void glDisable (GLenum cap);
cap az engedelyezett, illetve letiltott kepesseget azonost o szimbolikus konstans.
Indulaskor a GL DITHER engedelyezett, az osszes tobbi nem engedelyezett. A rend-
szer egy-egy allapotvaltoz oban tarolja ezen kepessegek kurrens bealltasait, amiket a
glIsEnabled() vagy glGet*() f uggvenyekkel lekerdezhet unk.
A cap parameter lehetseges ertekei es jelentes uk:
GL ALPHA TEST Alfa-vizsgalat,lasd a 11.2. szakaszt.
GL AUTO NORMAL Normalisok automatikus letrehozasa, ha a cs ucspontok
letrehoz asahoz a GL MAP2 VERTEX 3 vagy GL MAP2 VERTEX 4 opciot
hasznaljuk, lasd a 14.2.szakaszt.
GL BLEND A fragmentum es a pixel sznenek alfa szerinti vegytese (atlatsz osag
modellezese), lasd a 8.1. szakaszt.
GL CLIP PLANEi Az i-edik vagosk hasznalata, lasd az 5.2. szakaszt.
GL COLOR LOGIC OP A fragmentum es a pixel sznen logikai m uvelet vegzese,
lasd a 11.5.3. pontot.
GL COLOR MATERIAL Az anyagtulajdonsag hozzakapcsolasa a rajzolasi sznhez,
lasd a 6.4. szakaszt.
GL COLOR TABLE A pixelek sznenek csereje tablazat alapjan.
GL CONVOLUTION 1D A pixelek egydimenzios konvol ucios sz urese.
GL CONVOLUTION 2D A pixelek ketdimenzi os konvol uci os sz urese.
144
GL CULL FACE Hats o lapok elhagyasa, lasd a 3.3.4. pontot.
GL DEPTH TEST Lathat osagi vizsgalat, lasd a 11.4. szakaszt.
GL DITHER Dithering, lasd a 11.5. szakaszt.
GL FOG Kod modellezese, lasd a 8.3. szakaszt.
GL HISTOGRAM Egy kepen a sznek eloszlasar ol statisztika kesztese.
GL INDEX LOGIC OP A fragmentum es a pixel sznindexen logikai m uvelet
vegzese, lasd a 11.5.3. pontot.
GL LIGHTi Az i-edik fenyforr as hasznalata, lasd a 6.2. szakaszt.
GL LIGHTING A megvilagtas hasznalata, lasd a 6.5. szakaszt.
GL LINE SMOOTH Szakaszok hatar anak simtasa, lasd a 8.2.1. pontot.
GL LINE STIPPLE Vonaltpus hasznalata, lasd a 3.3.2. pontot.
GL MAP1 COLOR 4 Az egydimenzios kiertekel o RGBA ertekeket szamoljon, lasd
a 14.1. szakaszt.
GL MAP1 INDEX Az egydimenzios kiertekel o sznindexeket szamoljon, lasd a 14.1.
szakaszt.
GL MAP1 NORMAL Az egydimenzios kiertekel o normalisokat szamoljon, lasd
a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 1 Az egydimenzios kiertekel o a text ura s ertekeit
szamolja, lasd a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 2 Az egydimenzios kiertekel o a text ura s es t
ertekeit szamolja, lasd a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 3 Az egydimenzios kiertekel o a text ura s, t es r
ertekeit szamolja, lasd a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 4 Az egydimenzios kiertekel o a text ura s, t, r es q
ertekeit szamolja, lasd a 14.1. szakaszt.
GL MAP1 VERTEX 3 Az egydimenzios kiertekelo a cs ucspont x, y, es z ertekeit
szamolja, lasd a 14.1. szakaszt.
GL MAP1 VERTEX 4 Az egydimenzios kiertekelo a cs ucspont x, y, z es w ertekeit
szamolja, lasd a 14.1. szakaszt.
GL MAP2 COLOR 4 A ketdimenzi os kiertekelo RGBA ertekeket szamoljon, lasd
a 14.2. szakaszt.
GL MAP2 INDEX A ketdimenzi os kiertekelo sznindexeket szamoljon, lasd a 14.2.
szakaszt.
145
GL MAP2 NORMAL A ketdimenzi os kiertekelo normalisokat szamoljon, lasd
a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 1 A ketdimenzi os kiertekelo a text ura s ertekeit
szamolja, lasd a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 2 A ketdimenzios kiertekel o a text ura s es t
ertekeit szamolja, lasd a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 3 A ketdimenzios kiertekel o a text ura s, t es r
ertekeit szamolja, lasd a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 4 A ketdimenzios kiertekel o a text ura s, t, r es q
ertekeit szamolja, lasd a 14.2. szakaszt.
GL MAP2 VERTEX 3 A ketdimenzi os kiertekel o a cs ucspont x, y, es z ertekeit
szamolja, lasd a 14.2. szakaszt.
GL MAP2 VERTEX 4 A ketdimenzios kiertekelo a cs ucspont x, y, z es w ertekeit
szamolja, lasd a 14.2. szakaszt.
GL MINMAX Pixeltombok sznkomponensei minimum anak, maximum anak
szamtasa.
GL NORMALIZE A normalisok automatikus normalizalasa, lasd a 3.1. szakaszt.
GL POINT SMOOTH Pont hataranak simtasa, lasd a 3.3.1. pontot.
GL POLYGON OFFSET FILL Poligonok kitolt ott megjelentesekor, a fragmentu-
mokhoz egy oset ertek hozzaad asa.
GL POLYGON OFFSET LINE Poligonok hatar anak megjelentesekor, a fragmen-
tumokhoz egy oset ertek hozzaad asa.
GL POLYGON OFFSET POINT Poligonok cs ucspontjainak megjelentesekor, a
fragmentumokhoz egy oset ertek hozzaad asa.
GL POLYGON SMOOTH Poligon hatar anak simtasa, lasd a 3.3.3. pontot es a 8.2.
szakaszt.
GL POLYGON STIPPLE Poligon kitoltese mint aval, lasd a 3.3.5. pontot.
GL POST COLOR MATRIX COLOR TABLE A sznmatrixszal val o transz-
formal as utan tabl azat szerinti szncsre.
GL POST CONVOLUTION COLOR TABLE A konvol ucios sz ures utan tablazat
szerinti szncsre.
GL RESCALE NORMAL A transzformaci ok utan a glNormal*() f uggvennyel
letrehozott normalisokat normalizalja, lasd a 3.1. szakaszt.
GL SEPARABLE 2D Ket egydimenzios konvol uci os sz urore szetv alaszthato
ketdimenzi os konvol ucios sz ur o.
146
GL SCISSOR TEST Kivagasi vizsgalat, lasd a 11.1. szakaszt.
GL STENCIL TEST Stencilvizsgalat, lasd a 11.3. szakaszt.
GL TEXTURE 1D Egydimenzios text uraz as, lasd a 13.1. szakaszt.
GL TEXTURE 2D Ketdimenzi os text ur azas, lasd a 13.1. szakaszt.
GL TEXTURE 3D Haromdimenzi os text ur azas, lasd a 13.1. szakaszt.
GL TEXTURE GEN Q A text ura q koordinat ajat a glTexGen*() f uggveny szerint
hozza letre, lasd a 13.11.3. pontot.
GL TEXTURE GEN R A text ura r koordinat ajat a glTexGen*() f uggveny szerint
hozza letre, lasd a 13.11.3. pontot.
GL TEXTURE GEN S A text ura s koordinat ajat a glTexGen*() f uggveny szerint
hozza letre, lasd a 13.11.3. pontot.
GL TEXTURE GEN T A text ura t koordinat ajat a glTexGen*() f uggveny szerint
hozza letre, lasd a 13.11.3. pontot.
A kovetkez o f uggvennyel azt tudhatjuk meg, hogy egy kepesseg engedelyezett-e.
GLboolean glIsEnabled (GLenum cap);
A f uggveny a GL TRUE erteket adja vissza, ha a cap szimbolikus konstanssal azo-
nostott kepesseg engedelyezett, egyebkent a visszaadott ertek GL FALSE. A kepessegek
alaphelyzetben nem engedelyezettek, kiveve a ditheringet. A cap parameter lehetseges
ertekei:
GL ALPHA TEST, GL AUTO NORMAL, GL BLEND, GL CLIP PLANEi,
GL COLOR MATERIAL, GL CULL FACE, GL DEPTH TEST, GL DITHER,
GL FOG, GL LIGHTi, GL LIGHTING, GL LINE SMOOTH, GL LINE STIPPLE,
GL LOGIC OP, GL MAP1 COLOR 4, GL MAP1 INDEX, GL MAP1 NORMAL,
GL MAP1 TEXTURE COORD 1, GL MAP1 TEXTURE COORD 2,
GL MAP1 TEXTURE COORD 3, GL MAP1 TEXTURE COORD 4,
GL MAP1 VERTEX 3, GL MAP1 VERTEX 4, GL MAP2 COLOR 4,
GL MAP2 INDEX, GL MAP2 NORMAL, GL MAP2 TEXTURE COORD 1,
GL MAP2 TEXTURE COORD 2, GL MAP2 TEXTURE COORD 3,
GL MAP2 TEXTURE COORD 4, GL MAP2 VERTEX 3, GL MAP2 VERTEX 4,
GL NORMALIZE, GL POINT SMOOTH, GL POLYGON SMOOTH,
GL POLYGON STIPPLE, GL SCISSOR TEST, GL STENCIL TEST,
GL TEXTURE 1D, GL TEXTURE 2D, GL TEXTURE GEN Q,
GL TEXTURE GEN R, GL TEXTURE GEN S, GL TEXTURE GEN T.
147
17. fejezet

Allapotvaltozok ertekenek
lekerdezese
Az itt ismertetett f uggvenyekkel a globalis valtoz ok, allapotvaltoz ok kurrens ertekeit
kerdezhetj uk le.
A glGet*() f uggvennyel az OpenGL allapotvaltozoinak, globalis parametereinek az
erteket kerdezhetj uk le. pname a lekerdezendo parametert azonosto szimbolikus konst-
ans. A lekerdezett erteket a params cmen kapjuk meg. Ha nem a valtoz onak megfelelo
f uggvennyel kerdezz uk le az erteket, a rendszer tpuskonverzi ot hajt vegre.
void glGetBooleanv (GLenum pname, GLboolean *params);
void glGetDoublev (GLenum pname, GLdouble *params);
void glGetFloatv (GLenum pname, GLoat *params);
void glGetIntegerv (GLenum pname, GLint *params);
A pname parameter a lekerdezend o valtozot azonost o szimbolikus konstans, a pa-
rams cmen pedig a lekerdezett erteket kapjuk vissza. A lekerdezendo ertek tpus anak
megfelelo f uggvenyt kell hasznalni. Ha a lekerdezend o adat es a meghvott f uggveny tpusa
k ul onbozik, akkor a rendszer konverziot hajt vegre.
Az alabbiakban felsoroljuk pname helyere rhat o szimbolikus konstansokat, valamint
a hatasukra a params cmen visszaadott erteket.
GL ACCUM ALPHA BITS A gy ujt opuerben az alfa komponensek szam ara fennt-
artott bitskok szama, lasd a 10.4. szakaszt.
GL ACCUM BLUE BITS A gy ujt opuerben a kek komponens szamara fenntartott
bitskok szama, lasd a 10.4. szakaszt.
GL ACCUM CLEAR VALUE A gy ujtopuer torlesi sznenek RGBA komponensei,
lasd a 10.4. szakaszt.
GL ACCUM GREEN BITS A gy ujtopuerben a zold komponens szamara fenntar-
tott bitek szama, lasd a 10.4. szakaszt.
148
GL ACCUM RED BITS A gy ujt opuerben a vor os komponens szam ara fenntartott
bitek szama, lasd a 10.4. szakaszt.
GL ACTIVE TEXTURE ARB Az aktv tobbszor os text uraegyseg.
GL ALIASED POINT SIZE RANGE A kisimtott pont alapelemek meretenek mi-
nimuma es maximuma, lasd a 3.3.1. pontot.
GL ALIASED LINE WIDTH RANGE A kisimtott szakasz alapelemek vonalvas-
tagsag anak minimuma es maximuma, lasd a 3.3.2. pontot.
GL ALPHA BIAS A pixelmozgatasok soran az alfa komponensre alkalmazott el-
tolas.
GL ALPHA BITS A sznpuerek hany biten taroljak az alfa komponenst, lasd
a 10.1. szakaszt.
GL ALPHA SCALE A pixelmozgatasok soran az alfa komponensre alkalmazott
skal azas.
GL ALPHA TEST Az alfa-vizsgalat engedelyezett-e, lasd a 11.2. szakaszt.
GL ALPHA TEST FUNC Az alfa-vizsgalathoz hasznalt f uggveny szimbolikus neve,
lasd a 11.2. szakaszt.
GL ALPHA TEST REF Az alfa-vizsgalathoz hasznalt referenciaertek, lasd a 11.2.
szakaszt.
GL ATTRIB STACK DEPTH Az attrib utumverem hasznalatban levo szintjeinek
szama, lasd az 1. fejezetet.
GL AUTO NORMAL A ketdimenzios kiertekel o automatikusan letrehozza-e a
normalisokat, lasd a 14.2. szakaszt.
GL AUX BUFFERS Az opcionalis sznpuerek szama, lasd a 10.1. szakaszt.
GL BLEND Az alfa szerinti sznvegytes engedelyezett-e, lasd a 8.1. szakaszt.
GL BLEND COLOR Az alfa szerinti sznvegyteshez hasznalt egy utthat ok RGBA
komponensei.
GL BLEND DST Alfa szerinti sznvegyteskor a cel kombin alo tenyez ojehez hasznalt
f uggveny azonost oja, lasd a 8.1. szakaszt.
GL BLEND EQUATION A forras es a cel szneinek kombin al asi modj at azonosto
szimbolikus konstans.
GL BLEND SRC Alfa szerinti sznvegyteskor a forras kombin alo tenyezojehez
hasznalt f uggveny azonostoja, lasd a 8.1. szakaszt.
GL BLUE BIAS A pixelmozgatasok soran a kek sznkomponensre alkalmazott el-
tolas.
149
GL BLUE BITS A sznpuerek hany biten taroljak a kek sznkomponenst, lasd
a 10.1. szakaszt.
GL BLUE SCALE A pixelmozgatasok soran a kek sznkomponensre alkalmazott
skal azas.
GL CLIENT ACTIVE TEXTURE ARB A kliens aktv tobbszor os text uraegysege.
GL CLIENT ATTRIBE STACK DEPTH A kliens attrib utumvermeben a
hasznalatban levo szintjeinek szama.
GL CLIP PLANEi Az i-edik opcionalis vag osk engedelyezett-e, lasd az 5.2. sza-
kaszt.
GL COLOR ARRAY A sznt omb engedelyezett-e.
GL COLOR ARRAY SIZE A szntomb hany komponensben tarolja a sznt.
GL COLOR ARRAY STRIDE A sznt ombben az egymast koveto sznek tavolsaga.
GL COLOR ARRAY TYPE A szntomb milyen tpus u valtoz okban tarolja a
sznkomponenseket.
GL COLOR CLEAR VALUE A sznpuerek torlesi sznenek RGBA komponensei,
lasd a 2.1. szakaszt.
GL COLOR LOGIC OP A fragmentumok sznen a logikai m uveletek en-
gedelyezettek-e, lasd a 11.5.3. pontot.
GL COLOR MATERIAL Az anyagtulajdonsagnak a rajzolasi sznhez kapcsolasa
engedelyezett-e, lasd a 6.4. szakaszt.
GL COLOR MATERIAL FACE A poligonok melyik oldalanak anyagtulajdonsaga
van hozzakapcsolva a rajzolasi sznhez, lasd a 6.4. szakaszt.
GL COLOR MATERIAL PARAMETER Melyik anyagtulajdonsag van
hozzakapcsolva a rajzolasi sznhez, lasd a 6.4. szakaszt.
GL COLOR MATRIX A sznmatrix-verem legfelso szintjen tarolt matrix 16 eleme.
GL COLOR MATRIX STACK DEPTH A sznm atrix-verem szintjeinek maximalis
szama.
GL COLOR TABLE A tabl azat szerinti szncsere engedelyezett-e.
GL COLOR WRITEMASK Az R, G, B, A szerinti sznmaszkol as engedelyezett-e,
lasd a 10.7. szakaszt.
GL CONVOLUTION 1D A pixelek egydimenzios konvol uci os sz urese engedelyezett-
e.
GL CONVOLUTION 2D A pixelek ketdimenzi os konvol uci os sz urese engedelyezett-
e.
150
GL CULL FACE A hatso lapok elhagyasa engedelyezett-e, lasd a 3.3.4. pontot.
GL CULL FACE MODE Felenk melyik oldalat mutat o poligonokat kell elhagyni,
lasd a 3.3.4. pontot.
GL CURRENT COLOR A kurrens rajzolasi szn RGBA komponensei, lasd a 4.1.
szakaszt.
GL CURRENT INDEX A kurrens sznindex, lasd a 4.1. szakaszt.
GL CURRENT NORMAL A kurrens normalis x, y, z komponensei, lasd a 3.1.
szakaszt.
GL CURRENT RASTER COLOR A kurrens raszterpozcio sznenek RGBA kom-
ponensei, lasd a 9.2. szakaszt.
GL CURRENT RASTER DISTANCE A kurrens raszterpozcionak a nezopontt ol
mert tavolsaga.
GL CURRENT RASTER INDEX A kurrens raszterpozci o sznindexe, lasd a 9.2.
szakaszt.
GL CURRENT RASTER POSITION A kurrens raszterpozci o x, y, z es w kom-
ponensei: x, y, z ablakkoordinata-rendszerben, w vag o koordinatakban, lasd a 9.2.
szakaszt.
GL CURRENT RASTER POSITION VALID A kurrens raszterpozci o ervenyes-e,
lasd a 9.2. szakaszt.
GL CURRENT RASTER TEXTURE COORDS A kurrens raszterpozci o
text ur ajanak s, r, t es q koordinat ai.
GL CURRENT TEXTURE COORDS A kurrens s, r, t es q text urakoordinatak,
lasd a 13.11. szakaszt.
GL DEPTH BIAS A pixelmozgatasok soran alkalmazott eltolas.
GL DEPTH BITS Hany bitben tarolja a rendszer a pixelek melyseget, lasd a 11.4.
szakaszt.
GL DEPTH CLEAR VALUE A melysegpuer torlesi erteke, lasd a 10.5. szakaszt.
GL DEPTH FUNC A melysegek osszehasonlt asara hasznalt f uggveny szimbolikus
azonost oja, lasd a 11.4. szakaszt.
GL DEPTH RANGE Az ablakkoordinat ak intervalluma, lasd az 5.3. szakaszt.
GL DEPTH SCALE A pixelmozgatasok soran a melysegre alkalmazott skalaz as.
GL DEPTH TEST A melysegvizsgalat engedelyezett-e, lasd a 11.4. szakaszt.
GL DEPTH WRITEMASK A melysegpuer rhato-e, lasd a 10.7. szakaszt.
151
GL DITHER A dithering engedelyezett-e, lasd a 11.5.2. pontot.
GL DOUBLEBUFFER A dupla kepsk hasznalata (pl. animaci ohoz) engedelyezett-
e, lasd a 10.1 szakaszt.
GL DRAW BUFFER Az rhat o sznpuer szimbolikus azonost oja, lasd a 10.6 sza-
kaszt.
GL EDGE FLAG A hatarol o el jelzojenek erteke, lasd a 3.3.6. pontot.
GL EDGE FLAG ARRAY A hatarolo elek tombben valo tarol asa engedelyezett-e.
GL EDGE FLAG ARRAY STRIDE A hatarolo elek tombjeben az egymast kovet o
ertekek tavolsaga.
GL FEEDBACK BUFFER SIZE A visszacsatolasi puer merete, lasd a 12.2 sza-
kaszt.
GL FEEDBACK BUFFER TYPE A visszacsatolasi puer tpusa, lasd a 12.2 sza-
kaszt.
GL FOG A kod eektus engedelyezett-e, lasd a 8.3 szakaszt.
GL FOG COLOR A kod sznenek RGBA komponensei, lasd a 8.3 szakaszt.
GL FOG DENSITY A kod s ur usege, lasd a 8.3 szakaszt.
GL FOG END A linearis kod-interpolaciohoz az end parameter, lasd a 8.3 szakaszt.
GL FOG HINT A kod megvalostas anak pontoss agat azonosto szimbolikus konst-
ans, lasd a 8.2 szakaszt.
GL FOG INDEX A kod sznindexe, lasd a 8.3 szakaszt.
GL FOG MODE A kod kiszamtas anak modja, lasd a 8.3 szakaszt.
GL FOG START A linearis kod-interpolaci ohoz a start parameter, lasd a 8.3 sza-
kaszt.
GL FRONT FACE Milyen iranyt as u poligonokat tekint a rendszer felenk nez onek,
lasd a 3.3.3. pontot.
GL GREEN BIAS A pixelmozgatasok soran a zold sznkomponensre alkalmazott
eltolas.
GL GREEN BITS A sznpuerek hany biten tarolj ak a zold sznkomponenst, lasd
a 10.1. szakaszt.
GL GREEN SCALE A pixelmozgatasok soran a zold sznkomponensre alkalmazott
skal azas.
GL HISTOGRAM A sznek eloszlas arol statisztika kesztese engedelyezett-e.
152
GL INDEX ARRAY A sznindex tomb hasznalata engedelyezett-e.
GL INDEX ARRAY STRIDE A sznindex tomb egymast kovet o elemeinek
tavolsaga.
GL INDEX ARRAY TYPE A sznindex tomb elemeinek tpusa.
GL INDEX BITS A sznpuerek hany biten taroljak a sznindexet, lasd a 10.1.
szakaszt.
GL INDEX CLEAR VALUE A sznpuer torlesere hasznalt sznindexe, lasd a 2.1
szakaszt.
GL INDEX LOGIC OP A sznindexeken a logikai m uveletek engedelyezettek-e, lasd
a 11.5.3. pontot.
GL INDEX MODE A rendszer sznindex modban m ukodik-e, lasd a 4 fejezetet.
GL INDEX OFFSET A pixelmozgatasok soran a szn- es stencilindexhez
hozzaadand o ertek, lasd a 9.7. szakaszt.
GL INDEX SHIFT A pixelmozgatasok soran a szn- es stencilindexek eltolasa, lasd
a 9.7. szakaszt.
GL INDEX WRITEMASK A sznindex puer mely bitjei rhat ok, lasd a 10.7. sz-
akaszt.
GL LIGHTi Az i-edik fenyforr as engedelyezett-e, lasd a 6.2. szakaszt.
GL LIGHTING A megvilagtas engedelyezett-e, lasd a 6.1. szakaszt.
GL LIGHT MODEL AMBIENT A globalis kornyezeti feny RGBA komponensei,
lasd a 6.1. szakaszt.
GL LIGHT MODEL COLOR CONTROL A t ukr oz ott visszaverodes szamtasait a
rendszer elk ul onti-e a normal megvilagtasi szamt asoktol.
GL LIGHT MODEL LOCAL VIEWER A t ukroz ott visszaver odesi szamt asoknal
a tenyleges nezopontot, vagy vegtelen tavoli nezopontot hasznal a rendszer, lasd
a 6.1. szakaszt.
GL LIGHT MODEL TWO SIDE A poligonok k ul onboz o oldalainak k ul onb ozoek-e
az anyagtulajdonsagai, lasd a 6.1. szakaszt.
GL LINE SMOOTH A szakasz alapelemek hataranak simt asa engedelyezett-e, lasd
a 8.2.1. pontot.
GL LINE SMOOTH HINT A szakasz alapelem hataranak simtasa milyen
minoseg u, lasd a 8.2. szakaszt.
GL LINE STIPPLE A vonaltpus hasznalata engedelyezett-e, lasd a 3.3.2. pontot.
GL LINE STIPPLE PATTERN A vonalmint at lero 16 bit, lasd a 3.3.2. pontot.
153
GL LINE STIPPLE REPEAT A vonalminta nagytasi tenyez oje, lasd a 3.3.2. pon-
tot.
GL LINE WIDTH A kurrens vonalvastags ag, lasd a 3.3.2. pontot.
GL LINE WIDTH GRANULARITY A rendszer altal tamogatott vonalvastags agok
kozti k ulonbseg simtott hatar u megjelentesnel, lasd a 3.3.2. pontot.
GL LINE WIDTH RANGE Simtott hatar u szakaszok vonalvastags ag anak mini-
muma es maximuma, lasd a 3.3.2. pontot.
GL LIST BASE A glCallLists() vegrehajtasakor hasznalt oset, lasd a 7.5. sza-
kaszt.
GL LIST INDEX A feltoltes alatt all o display-lista azonostoja, lasd a 7.1. szakaszt.
GL LIST MODE A feltoltes alatt allo display-lista letrehozas anak modja, lasd a 7.1.
szakaszt.
GL LOGIC OP MODE A szneken vegrehajtando logikai m uvelet kodja, lasd
a 11.5.3. pontot.
GL MAP1 COLOR 4 Az egydimenzios kiertekel o szneket hoz-e letre, lasd a 14.1.
szakaszt.
GL MAP1 GRID DOMAIN A glMapGrid1*() f uggveny ertelmezesi tar-
tomanyanak hatarai, lasd a 14.1. szakaszt.
GL MAP1 GRID SEGMENTS A glMapGrid1*() f uggvennyel letrehozando
racspontok szama, lasd a 14.1. szakaszt.
GL MAP1 INDEX Az egydimenzios kiertekelo sznindexeket hoz-e letre, lasd a 14.1.
szakaszt.
GL MAP1 NORMAL Az egydimenzios kiertekel o normalisokat hoz-e letre, lasd
a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 1 Az egydimenzios kiertekelo r
text urakoordinatakat hoz-e letre, lasd a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 2 Az egydimenzios kiertekel o r, s
text urakoordinatakat hoz-e letre, lasd a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 3 Az egydimenzios kiertekel o r, s, t
text urakoordinatakat hoz-e letre, lasd a 14.1. szakaszt.
GL MAP1 TEXTURE COORD 4 Az egydimenzios kiertekel o r, s, t, q
text urakoordinatakat hoz-e letre, lasd a 14.1. szakaszt.
GL MAP1 VERTEX 3 Az egydimenzios kiertekel o a cs ucspontok x, y, z koor-
dinat ait hoz-e letre, lasd a 14.1. szakaszt.
154
GL MAP1 VERTEX 4 Az egydimenzios kiertekelo a cs ucspontok x, y, z, w koor-
dinat ait hoz-e letre, lasd a 14.1. szakaszt.
GL MAP2 COLOR 4 A ketdimenzios kiertekelo szneket hoz-e letre, lasd a 14.2.
szakaszt.
GL MAP2 GRID DOMAIN A glMapGrid2*() f uggveny u, illetve v parameterei
ertelmezesi tartomanyanak hatarai, lasd a 14.2. szakaszt.
GL MAP2 GRID SEGMENTS A glMapGrid2*() f uggvennyel letrehozando
racspontok szama u, illetve v iranyban, lasd a 14.2. szakaszt.
GL MAP2 INDEX A ketdimenzi os kiertekel o sznindexeket hoz-e letre, lasd a 14.2.
szakaszt.
GL MAP2 NORMAL A ketdimenzi os kiertekelo normalisokat hoz-e letre, lasd
a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 1 A ketdimenzi os kiertekelo r
text urakoordinatakat hoz-e letre, lasd a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 2 A ketdimenzi os kiertekel o r, s
text urakoordinatakat hoz-e letre, lasd a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 3 A ketdimenzios kiertekel o r, s, t
text urakoordinatakat hoz-e letre, lasd a 14.2. szakaszt.
GL MAP2 TEXTURE COORD 4 A ketdimenzios kiertekelo r, s, t, q
text urakoordinatakat hoz-e letre, lasd a 14.2. szakaszt.
GL MAP2 VERTEX 3 A ketdimenzios kiertekel o a cs ucspontok x, y, z koordinat ait
hoz-e letre, lasd a 14.2. szakaszt.
GL MAP2 VERTEX 4 A ketdimenzios kiertekelo a cs ucspontok x, y, z, w koor-
dinat ait hoz-e letre, lasd a 14.2. szakaszt.
GL MAP COLOR A pixelmozgatasok soran a sznek es sznindexek tabl azat alapjan
cserelend ok-e, lasd a 9.7. szakaszt.
GL MAP STENCIL A pixelmozgatasok soran a stencilindexek tabl azat alapjan
cserelend ok-e, lasd a 9.7. szakaszt.
GL MATRIX MODE A kurrens matrixverem, lasd az 5.4. szakaszt.
GL MAX 3D TEXTURE SIZE Az OpenGL implement acio altal kezelhet o 3D-s
text ur ak meretenek durva becslese, lasd a 13.6. szakaszt.
GL MAX ATTRIB STACK DEPTH A kliens attrib utumvermeben a szintek ma-
ximalis szama.
GL MAX CLIENT ATTRIB STACK DEPTH Az attrib utumverem szintjeinek ma-
ximalis szama.
155
GL MAX CLIP PLANES Az opcionalis vag oskok maximalis szama, lasd az 5.2.
szakaszt.
GL MAX COLOR MATRIX STACK DEPTH A sznm atrixok vermeben a szintek
maximalis szama.
GL MAX ELEMENTS INDICES A tombben tarolhat o cs ucspontok indexei
szam anak javasolt maximuma.
GL MAX ELEMENTS VERTICES A tombben tarolhat o cs ucspontok szam anak ja-
vasolt maximuma.
GL MAX EVAL ORDER A glMap1*() es glMap2*() kiertekel ok altal kezelt
Bezier-g orbek, es fel uletek rendjenek maximuma, lasd a 14.1. es a 14.2.szakaszokat.
GL MAX LIGHTS A fenyforrasok szamanak maximuma, lasd a 6.2. szakaszt.
GL MAX LIST NESTING A display-listak egymasba agyaz as anak maximalis
szintje, lasd a 7.3. szakaszt.
GL MAX MODELVIEW STACK DEPTH A nezopont-modell transzformaciok
matrixai szamara fenntartott veremben a szintek szam anak maximuma.
GL MAX NAME STACK DEPTH A kivalaszt asi nevverem szintjeinek maximuma,
lasd a 12.1. szakaszt.
GL MAX PIXEL MAP TABLE A tablazat szerinti szncserehez hasznalhat o
tabl azatok szam anak maximuma, lasd a 9.8. szakaszt.
GL MAX PROJECTION STACK DEPTH A vettesi transzformaciok matrixai
szam ara fenntartott veremben a szintek szam anak maximuma.
GL MAX TEXTURE SIZE Az OpenGL implementaci o altal kezelheto text ur ak
meretenek durva becslese, lasd a 13.2. szakaszt.
GL MAX TEXTURE STACK DEPTH A text ur ak matrixai szam ara fenntartott
veremben a szintek szamanak maximuma.
GL MAX TEXTURE UNITS ARB A tamogatott text uraegysegek szama.
GL MAX VIEWPORT DIMS A kepmezo mereteinek maximuma, lasd az 5.3. sza-
kaszt.
GL MINMAX A pixelekhez tarolt ertekek minimumanak es maximumanak
szamtasa engedelyezett-e.
GL MODELVIEW MATRIX A kurrens nez opont-modell transzformaci os matrix 16
eleme.
GL MODELVIEW STACK DEPTH A nez opont-modell transzformaciok matrixai
szam ara fenntartott veremben a szintek pillanatnyi szama.
156
GL NAME STACK DEPTH A kivalaszt asi nevverem szintjeinek pillanatnyi szama,
lasd a 12.1. szakaszt.
GL NORMAL ARRAY A normalisok tomb okben val o tarol asa engedelyezett-e.
GL NORMAL ARRAY STRIDE A normalisok tombjeben az egymast koveto ada-
tok tavols aga.
GL NORMAL ARRAY TYPE A normalisok tombjenek tpusa.
GL NORMALIZE A normalisok automatikus normalizal asa engedelyezett-e, lasd
a 3.1. szakaszt.
GL PACK ALIGNMENT A pixelek adatainak a memoriaba rasa soran a byte-ok
elrendezese, lasd a 9.6. szakaszt.
GL PACK IMAGE HIGHT A pixelek adatainak a memoriaba r asa soran a kep
magassaga, lasd a 9.6. szakaszt.
GL PACK LSB FIRST Az 1 bit/pixel tpus u adatoknak a memoriaba r asa soran
a memoria byte-jainak legkisebb helyiertek u bitjebe kezdi-e az r ast, lasd a 9.6.
szakaszt.
GL PACK ROW LENGTH A pixelek adatainak a memoriaban hasznalt sorhossza,
lasd a 9.6. szakaszt.
GL PACK SKIP IMAGES Az elso pixelek adatainak a memoriaba r asa elott ki-
hagyand o keppixelek szama, lasd a 9.6. szakaszt.
GL PACK SKIP PIXELS Az elso pixelek adatainak a memori aba r asa elott ki-
hagyand o pixelek szama, lasd a 9.6. szakaszt.
GL PACK SKIP ROWS Az elso pixelek adatainak a memori aba rasa elott ki-
hagyand o pixelsorok szama, lasd a 9.6. szakaszt.
GL PACK SWAP BYTES Az pixelek adatainak a memori aba r asa elott a 2 vagy
4 byte-on tarolt adatok felcserelendok-e, lasd a 9.6. szakaszt.
GL PERSPECTIVE CORRECTION HINT A szneknek es text ur aknak a per-
spektv torzt as miatt sz ukseges intepolaci oj ahoz a pontossag, lasd a 8.2. szakaszt.
GL PIXEL MAP A TO A SIZE Az pixelek adatainak a memoriaba r asakor az
alfab ol alfaba tpus u eltolashoz hasznalt tabl azat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP B TO B SIZE Az pixelek adatainak a memoriaba rasakor a
kekb ol kekbe tpus u eltolashoz hasznalt tabl azat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP G TO G SIZE Az pixelek adatainak a memoriaba r asakor a
zoldb ol zoldbe tpus u eltolashoz hasznalt tabl azat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP I TO A SIZE Az pixelek adatainak a memoriaba rasakor az
alfab ol indexbe tpus u eltolashoz hasznalt tablazat merete, lasd a 9.6. szakaszt.
157
GL PIXEL MAP I TO B SIZE Az pixelek adatainak a memori aba r asakor az in-
dexbol kekbe tpus u eltolashoz hasznalt tablazat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP I TO G SIZE Az pixelek adatainak a memori aba rasakor az in-
dexbol zoldbe tpus u eltolashoz hasznalt tablazat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP I TO I SIZE Az pixelek adatainak a memoriaba rasakor az in-
dexbol indexbe tpus u eltolashoz hasznalt tabl azat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP I TO R SIZE Az pixelek adatainak a memori aba r asakor az in-
dexbol voros tpus u eltolashoz hasznalt tabl azat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP R TO R SIZE Az pixelek adatainak a memoriaba r asakor a
vor osbol vorosbe tpus u eltolashoz hasznalt tabl azat merete, lasd a 9.6. szakaszt.
GL PIXEL MAP S TO S SIZE Az pixelek adatainak a memoriaba r asakor a sten-
cilbol stencilbe tpus u eltolashoz hasznalt tabl azat merete, lasd a 9.6. szakaszt.
GL POINT SIZE A pont alapelem merete, lasd a 3.3.1. pontot.
GL POINT SIZE GRANULARITY A rendszer altal tamogatott pontmeretek kozti
k ul onbseg simtott hatar u megjelentesnel, lasd a 8.2.1. pontot.
GL POINT SIZE RANGE Simtott hatar u pontok meretenek minimuma es maxi-
muma, lasd a 8.2.1. pontot.
GL POINT SMOOTH A pont alapelemek hataranak simt asa engedelyezett-e, lasd
a 8.2.1. pontot.
GL POINT SMOOTH HINT A pont alapelem hatar anak simtasa milyen minoseg u,
lasd a 8.2. szakaszt.
GL POLYGON MODE A poligonok ket oldalanak megjelentesi modja
(oldalankent), lasd a 3.3.3. pontot.
GL POLYGON OFFSET FACTOR A poligon osetjenek skalaz as ahoz hasznalt
tenyezo.
GL POLYGON OFFSET UNITS A poligon raszterizal asakor a fragmentumhoz
adando ertek.
GL POLYGON OFFSET FILL Kitolt ott poligonok osettel val o megjelentese en-
gedelyezett-e.
GL POLYGON OFFSET LINE Hatarukkal reprezentalt poligonok osettel valo
megjelentese engedelyezett-e.
GL POLYGON OFFSET POINT Cs ucspontjaival reprezentalt poligonok osettel
val o megjelentese engedelyezett-e.
GL POLYGON SMOOTH A poligonok hatar anak simtasa engedelyezett-e, lasd
a 8.2.2. pontot.
158
GL POLYGON SMOOTH HINT A poligon alapelem hatar anak simtasa milyen
minoseg u, lasd a 8.2. szakaszt.
GL POLYGON STIPPLE A poligonok mint aval val o kitoltese engedelyezett-e, lasd
a 3.3.5. pontot.
GL POST COLOR MATRIX COLOR TABLE A sznmatrixszal val o transz-
formal as utan tabl azat szerinti szncsre engedelyezett-e.
GL POST COLOR MATRIX RED BIAS A sznmatrixszal val o transzformal as
utan a fragmentumokra alkalmazando, voros szerinti eltolas, lasd a 9.7. szakaszt.
GL POST COLOR MATRIX GREEN BIAS A sznmatrixszal val o transzformal as
utan a fragmentumokra alkalmazando, zold szerinti eltolas, lasd a 9.7. szakaszt.
GL POST COLOR MATRIX BLUE BIAS A sznmatrixszal valo transzformal as
utan a fragmentumokra alkalmazando, kek szerinti eltolas, lasd a 9.7. szakaszt.
GL POST COLOR MATRIX ALPHA BIAS A sznm atrixszal valo transzformalas
utan a fragmentumokra alkalmazando, alfa szerinti eltolas, lasd a 9.7. szakaszt.
GL POST COLOR MATRIX RED SCALE A sznmatrixszal valo transzformal as
utan a fragmentumokra alkalmazand o, vor os szerinti skalaz as tenyezoje, lasd a 9.7.
szakaszt.
GL POST COLOR MATRIX GREEN SCALE A sznm atrixszal val o transz-
formal as utan a fragmentumokra alkalmazand o, zold szerinti skalaz as tenyez oje,
lasd a 9.7. szakaszt.
GL POST COLOR MATRIX BLUE SCALE A sznmatrixszal valo transzformalas
utan a fragmentumokra alkalmazand o, kek szerinti skal azas tenyez oje, lasd a 9.7.
szakaszt.
GL POST COLOR MATRIX ALPHA SCALE A sznmatrixszal valo transz-
formal as utan a fragmentumokra alkalmazand o, alfa szerinti skal azas tenyez oje, lasd
a 9.7. szakaszt.
GL POST CONVOLUTION COLOR TABLE A pixelek konvol ucios sz urese utan
tabl azat szerinti szncsre engedelyezett-e.
GL POST CONVOLUTION RED BIAS A pixelek konvol ucios sz urese utan a frag-
mentumokra alkalmazand o, voros szerinti eltolas, lasd a 9.7. szakaszt.
GL POST CONVOLUTION GREEN BIAS A pixelek konvol uci os sz urese utan a
fragmentumokra alkalmazand o, zold szerinti eltolas, lasd a 9.7. szakaszt.
GL POST CONVOLUTION BLUE BIAS A pixelek konvol ucios sz urese utan a
fragmentumokra alkalmazand o, kek szerinti eltolas, lasd a 9.7. szakaszt.
GL POST CONVOLUTION ALPHA BIAS A pixelek konvol uci os sz urese utan a
fragmentumokra alkalmazand o, alfa szerinti eltolas, lasd a 9.7. szakaszt.
159
GL POST CONVOLUTION RED SCALE A pixelek konvol uci os sz urese utan a
fragmentumokra alkalmazand o, vor os szerinti skal az as tenyezoje, lasd a 9.7. sza-
kaszt.
GL POST CONVOLUTION GREEN SCALE A pixelek konvol uci os sz urese utan a
fragmentumokra alkalmazand o, zold szerinti skal az as tenyezoje, lasd a 9.7. szakaszt.
GL POST CONVOLUTION BLUE SCALE A pixelek konvol uci os sz urese utan a
fragmentumokra alkalmazand o, kek szerinti skal azas tenyez oje, lasd a 9.7. szakaszt.
GL POST CONVOLUTION ALPHA SCALE A pixelek konvol uci os sz urese utan a
fragmentumokra alkalmazand o, alfa szerinti skalaz as tenyezoje, lasd a 9.7. szakaszt.
GL PROJECTION MATRIX A kurrens vettesi matrix 16 eleme, lasd az 5.2. sza-
kaszt.
GL PROJECTION STACK DEPTH A vettesi transzformaci ok matrixai szam ara
fenntartott veremben a szintek pillanatnyi szama.
GL READ BUFFER Az olvashato sznpuert azonosto szimbolikus konstans.
GL RED BIAS A pixelmozgatasok soran a voros sznkomponensre alkalmazott el-
tolas.
GL RED BITS A sznpuerek hany biten taroljak a voros sznkomponenst, lasd
a 10.1. szakaszt.
GL RED SCALE A pixelmozgatasok soran a voros sznkomponensre alkalmazott
skal azas.
GL RENDER MODE A megjelentes modj at azonost o szimbolikus konstans, lasd
a 12. fejezetet.
GL RESCALE NORMAL A transzformaciok utan a normalisok normalizal asa en-
gedelyezett-e.
GL RGBA MODE Az OpenGL RGBA modban m uk odik-e.
GL SCISSOR BOX A kivagasi vizsgalatokhoz hasznalt ablak bal also sarkanak ko-
ordinat ai, szelessege, magassaga, lasd a 11.1. szakaszt.
GL SCISSOR TEST A kivag asi vizsgalat engedelyezett-e, lasd a 11.1. szakaszt.
GL SELECTION BUFFER SIZE A kivalasztasi puer merete, lasd a 12.1. sza-
kaszt.
GL SEPARABLE 2D A szetv alaszthato ketdimenzi os konvol uci os sz ur o en-
gedelyezett-e.
GL SHADE MODEL A kurrens arnyal asi modell szimbolikus konstansa, lasd a 4.2.
szakaszt.
160
GL SMOOTH LINE WIDTH RANGE Simtott hatar u szakaszok vonalvas-
tagsag anak minimuma es maximuma, lasd a 3.3.2. pontot.
GL SMOOTH LINE WIDTH GRANUALITY A rendszer altal tamogatott vonal-
vastags agok kozti k ul onbseg simtott hatar u megjelentesnel, lasd a 3.3.2. pontot.
GL SMOOTH POINT SIZE RANGE Simtott hatar u pontok meretenek mini-
muma es maximuma, lasd a 8.2.1. pontot.
GL SMOOTH POINT SIZE GRANUALITY A rendszer altal tamogatott
pontmeretek kozti k ulonbseg simtott hatar u megjelentesnel, lasd a 8.2.1.
pontot.
GL STENCIL BITS A stencilpuer bitskjainak szama, lasd a 11.3. szakaszt.
GL STENCIL CLEAR VALUE A stencilpuer torlesi erteke, lasd a 10.5. szakaszt.
GL STENCIL FAIL Azt a m uveletet azonost o szimbolikus konstans, amit a sten-
cilvizsgalaton fennakado fragmentumokra alkalmaz a rendszer, lasd a 11.3. szakaszt.
GL STENCIL FUNC A stencilvizsgalathoz hasznalt f uggvenyt azonost o szimboli-
kus konstans, lasd a 11.3. szakaszt.
GL STENCIL PASS DEPTH FAIL Azt a m uveletet azonosto szimbolikus konst-
ans, amit a stencilvizsgalaton atmeno, de a melysegvizsg alaton fennakad o fragmen-
tumokra alkalmaz a rendszer, lasd a 11.3. szakaszt.
GL STENCIL PASS DEPTH PASS Azt a m uveletet azonosto szimbolikus konst-
ans, amit a stencilvizsgalaton es a melysegvizsgalaton is atmen o fragmentumokra
alkalmaz a rendszer, lasd a 11.3. szakaszt.
GL STENCIL REF A stencilvizsgalathoz hasznalt referenciaertek, lasd a 11.3. sz-
akaszt.
GL STENCIL TEST A stencilvizsgalat engedelyezett-e, lasd a 11.3. szakaszt.
GL STENCIL VALUE MASK A stencilvizsgalathoz hasznalt maszk, lasd a 11.3.
szakaszt.
GL STENCIL WRITEMASK A stencilpuer maszkol asahoz hasznalt ertek, lasd
a 10.7. szakaszt.
GL STEREO A sztereoszkopikus (bicentr alis) lekepezest tamogatja-e az imple-
ment acio.
GL SUBPIXEL BITS Az alpixelek (amiket a rendszer az ablakkoordinata-
rendszerben a raszterizalt alakzatok pozcional asakor hasznal) felbont asahoz
hasznalt bitek becs ult szama.
GL TEXTURE 1D Az egydimenzios text uralekepezes engedelyezett-e, lasd a 13.5.
szakaszt.
161
GL TEXTURE BINDING 1D A kurrens egydimenzios text uraobjektum azo-
nost oja, lasd a 13.9.2. pontot.
GL TEXTURE 2D A ketdimenzi os text uralekepezes engedelyezett-e, lasd a 13.2.
szakaszt.
GL TEXTURE BINDING 2D A kurrens ketdimenzi os text uraobjektum azo-
nost oja, lasd a 13.9.2. pontot.
GL TEXTURE 3D A haromdimenzi os text uralekepezes engedelyezett-e, lasd a 13.6.
szakaszt.
GL TEXTURE BINDING 3D A kurrens haromdimenzi os text uraobjektum azo-
nost oja, lasd a 13.9.2. pontot.
GL TEXTURE COORD ARRAY A text urakoordinat ak tombjenek hasznalata en-
gedelyezett-e.
GL TEXTURE COORD ARRAY SIZE A text urakoordinatak tombjenek egy-egy
elemeben hany koordinata tarolhato.
GL TEXTURE COORD ARRAY STRIDE A text urakoordinat ak tombjeben az
egymast koveto elemek tavols aga.
GL TEXTURE COORD ARRAY TYPE A text urakoordinatak tombjeben az ele-
mek tpusa.
GL TEXTURE GEN Q A text ur ak q koordinat ajanak automatikus letrehoz asa en-
gedelyezett-e, lasd a 13.11.3. pontot.
GL TEXTURE GEN R A text ur ak r koordinataj anak automatikus letrehoz asa en-
gedelyezett-e, lasd a 13.11.3. pontot.
GL TEXTURE GEN S A text urak s koordinat ajanak automatikus letrehozasa en-
gedelyezett-e, lasd a 13.11.3. pontot.
GL TEXTURE GEN T A text ur ak t koordinat aj anak automatikus letrehozasa en-
gedelyezett-e, lasd a 13.11.3. pontot.
GL TEXTURE MATRIX A kurrens text uram atrix 16 eleme.
GL TEXTURE STACK DEPTH A text uram atrix szintjeinek pillanatnyi szama.
GL UNPACK ALIGNMENT Pixeleknek a memori abol val o olvasasakor a byte-ok
elrendezese, lasd a 9.6. szakaszt.
GL UNPACK IMAGE HIGHT Pixeleknek a memori abol val o olvasasakor a kep ma-
gassaga, lasd a 9.6. szakaszt.
GL UNPACK LSB FIRST Az 1 bit/pixel tpus u adatoknak a memori ab ol valo ol-
vas asa soran a memoria byte-jainak legkisebb helyiertek u bitjebe kezdi-e az rast,
lasd a 9.6. szakaszt.
162
GL UNPACK ROW LENGTH Pixeleknek a memori abol valo olvas asakor hasznalt
sorhossz, lasd a 9.6. szakaszt.
GL UNPACK SKIP IMAGES Az elso pixelek adatainak a memori ab ol valo olvas asa
elott kihagyand o pixelek szama, lasd a 9.6. szakaszt.
GL UNPACK SKIP PIXELS Az elso pixelek adatainak a memori abol val o olvasasa
elott kihagyand o pixelek szama, lasd a 9.6. szakaszt.
GL UNPACK SKIP ROWS Az elso pixelek adatainak a memori abol valo olvasasa
elott kihagyand o pixelsorok szama, lasd a 9.6. szakaszt.
GL UNPACK SWAP BYTES Pixeleknek a memoriab ol valo olvasasakor a 2 vagy
4 byte-on tarolt adatok felcserelendok-e, lasd a 9.6. szakaszt.
GL VERTEX ARRAY A cs ucspontok tombjenek hasznalata engedelyezett-e.
GL VERTEX ARRAY SIZE A cs ucspontokat hany koordinat aval taroljuk a tomb-
ben.
GL VERTEX ARRAY STRIDE A cs ucspontok tombjeben az egymast kovet o ele-
mek tavols aga.
GL VERTEX ARRAY TYPE A cs ucspontok tombjenek tpusa.
GL VIEWPORT A kepmez o bal also sarkanak koordinatai, szelessege es magassaga,
lasd az 5.3. szakaszt.
GL ZOOM X Pixelmozgataskor az x irany u skalaz asi tenyez o, lasd a 9.4.2. pontot.
GL ZOOM Y Pixelmozgataskor az y irany u skalaz asi tenyez o, lasd a 9.4.2. pontot.
void glGetClipPlane (GLenum plane, GLdouble *equation);
A plane parameterrel azonostott opcionalis vagosk nezopontkoordinata-rendszerbeli
implicit alakjanak egy utthatoit adja vissza az equation cmen. A plane parameter erteke
GL CLIP PLANEi lehet, (i = 0, . . . , vagoskok szama1) (lasd az 5.2. szakaszt).
GLenum glGetError (void);
Visszaadja a kurrens hibakodot es torli a hibajelzot (GL NO ERROR). A rendszer
minden altala gyelt hibahoz egy numerikus kodot es egy szimbolikus konstanst ren-
del. Ha a rendszer hibat eszlel, a hibajelzoh oz hozzarendeli a megfelelo erteket es
mindaddig nem rogzt ujabb hibat, mg a hibajelzot ki nem olvassuk a glGetError()
f uggvennyel. A rendszer a hibat okozo f uggveny hvas at gyelmen kv ul hagyja, de nincs
egyeb mellekhat asa a hibanak.
A kovetkezo hibajelzok denialtak:
GL NO ERROR A rendszer nem jegyzett fel hibat.
163
GL INVALID ENUM Rossz szimbolikus konstanssal hvtuk meg valamelyik
f uggvenyt.
GL INVALID VALUE Valamely f uggveny hv asan al olyan numerikus erteket adt-
unk meg, amelyik kv ul esik az ertelmezesi tartomanyon.
GL INVALID OPERATION A vegrehajtando m uvelet nem megengedett a rendszer
pillanatnyi allapotaban.
GL STACK OVERFLOW A meghvott f uggveny verem-t ulcsordul ast okozna.
GL STACK UNDERFLOW A meghvott f uggveny verem-alulcsordul ast okozna.
GL OUT OF MEMORY Nincs eleg memoria a f uggveny vegrehajtasahoz. A rend-
szer tovabbi m uk odese nem meghatarozhat o.
GL TABLE TOO LARGE A megadott tablazat nagyobb, mint az imple-
ment acioban megengedett maximum.
void glGetLightfv (GLenum light, GLenum pname, GLoat *params);
void glGetLightiv (GLenum light, GLenum pname, GLint *params);
A light azonostoj u fenyforras parametereit adja vissza valos szamkent (az elso hv asi
forma), vagy egesz szamkent (a masodik hv asi forma). A light parameter erteke
GL LIGHTi 0 i < GL MAX LIGHTS lehet. A kvant erteket a params cmen kapjuk
vissza.
Ha egesz szamkent kerdez unk le sznkomponenseket, akkor ugy konvert alja a kom-
ponenst, hogy a [1., 1.] intervallumot linearisan lekepezi a rendszer altal abrazolhat o
legkisebb es legnagyobb egesz altal hatarolt intervallumra.
A pname ertekei, es a hatasukra visszakapott ertekek az alabbiak:
GL AMBIENT A fenyforr as kornyezeti fenyosszetev ojenek RGBA komponenseit
adja vissza.
GL DIFFUSE A fenyforras szort fenyosszetev ojenek RGBA komponenseit adja
vissza.
GL SPECULAR A fenyforr as t ukroz ott feny osszetevojenek RGBA komponenseit
adja vissza.
GL POSITION A fenyforras helyenek x, y, z, w koordinatai a nezopontkoordinata-
rendszerben.
GL SPOT DIRECTION A reektorszer u fenyforr as tengelyenek iranya ( x, y, z).
GL SPOT EXPONENT A reektor fenyerejenek csokkenese.
GL SPOT CUTOFF A reektor k upjanak fel nyl asszoge.
164
GL CONSTANT ATTENUATION A feny tompulasanak konstans tagja.
GL LINEAR ATTENUATION A fenytompulas linearis tagjanak egy utthat oja.
GL QUADRATIC ATTENUATION A fenytompul as masodfok u tagjanak egy utt-
hatoja.
void glGetMapdv (GLenum target, GLenum query, GLdouble *values);
void glGetMapfv (GLenum target, GLenum query, GLoat *values);
void glGetMapiv (GLenum target, GLenum query, GLint *values);
A glMap1*() es glMap2*() f uggvenyekkel letrehozott kiertekelok (Bezier-gorbe, il-
letve fel ulet megadasok) parametereit adja vissza a values cmen, a hvott f uggvenynek
megfeleloen double, oat vagy integer ertekkent.
A target parameter lehetseges ertekei:
GL MAP1 COLOR 4, GL MAP1 INDEX, GL MAP1 NORMAL,
GL MAP1 TEXTURE COORD 1, GL MAP1 TEXTURE COORD 2,
GL MAP1 TEXTURE COORD 3, GL MAP1 TEXTURE COORD 4,
GL MAP1 VERTEX 3, GL MAP1 VERTEX 4, GL MAP2 COLOR 4 ,
GL MAP2 INDEX, GL MAP2 NORMAL, GL MAP2 TEXTURE COORD 1,
GL MAP2 TEXTURE COORD 2, GL MAP2 TEXTURE COORD 3,
GL MAP2 TEXTURE COORD 4, GL MAP2 VERTEX 3, GL MAP2 VERTEX 4.
A query parameterrel specikaljuk a lekerdezend o adatokat.

Erteke:
GL COEFF A kontrollpontokat adja vissza homogen koordinat akban (x, y, z, w).
Ketdimenzi os kiertekelo (fel ulet) eseten oszlopfolytonosan adja vissza a kontroll-
pontok tombjet.
GL ORDER A gorbe rendjet, illetve fel ulet eseten az u es v irany u rendeket adja
vissza.
GL DOMAIN A parameter(ek) ertelmezesi tartomanyat (tartomanyait) adja vissza.
void glGetMaterialfv (GLenum face, GLenum pname, GLoat *params);
void glGetMaterialiv (GLenum face, GLenum pname, GLint *params);
A params cmen visszaadja a poligonok face oldalanak a pname parameterrel azo-
nostott anyagtulajdonsagait. Ha egesz szamkent kerdez unk le sznkomponenseket, akkor
ugy konvert alja a komponenst, hogy a [1., 1.] intervallumot linearisan lekepezi a rendszer
altal abr azolhato legkisebb es legnagyobb egesz altal hatarolt intervallumra.
face erteke GL FRONT vagy GL BACK lehet.
pname ertekei:
165
GL AMBIENT Az anyag kornyezeti feny visszaverodesi egy utthatoj anak RGBA
komponenseit adja vissza.
GL DIFFUSE Az anyag szort visszaverodesi egy utthat ojanak RGBA komponenseit
adja vissza.
GL SPECULAR Az anyag t ukroz ott visszaverodesi egy utthat ojanak RGBA kom-
ponenseit adja vissza.
GL EMISSION Az anyag altal kibocsatott feny RGBA komponenseit adja vissza.
GL SHININESS Az anyag ragyogasi egy utthat ojat adja vissza.
GL COLOR INDEXES Az anyag kornyezeti, szort es t ukroz ott visszaverodesi
egy utthat ojanak sznindexeit adja vissza.
void glGetPixelMapufv (GLenum map, GLoat *values);
void glGetPixelMapuiv (GLenum map, GLuint *values);
void glGetPixelMapusv (GLenum map, GLushort *values);
A sznkomponensek map tabl azat szerinti modost as anak beallt asait adja vissza a
values cmen.
map lehetseges ertekei:
GL PIXEL MAP I TO I, GL PIXEL MAP S TO S, GL PIXEL MAP I TO R,
GL PIXEL MAP I TO G, GL PIXEL MAP I TO B, GL PIXEL MAP I TO A,
GL PIXEL MAP R TO R, GL PIXEL MAP G TO G, GL PIXEL MAP B TO B, and
GL PIXEL MAP A TO A.
void glGetPolygonStipple (GLubyte *mask);
A poligonok kitoltesere hasznalt 32 32 mint at adja vissza a mask cmen.
const GLubyte *glGetString (GLenum name);
Az implement aciora vonatkoz o szoveges informaci o cmet adja vissza.
name lehetseges ertekei:
GL VENDOR Az implementaci oert felelos ceg.
GL RENDERER A megjelenteshez hasznalt hardver platform konguraci ojanak
neve.
GL VERSION Az implementalt OpenGL verzi osz ama.
GL EXTENSIONS A tamogatott OpenGL kiegesztesek listaja.
166
void glGetTexEnvfv (GLenum target, GLenum pname, GLoat *params);
void glGetTexEnviv (GLenum target, GLenum pname, GLint *params);
A pname parameterben specikalt text uraf uggveny parametereit adja vissza a params
cmen.
A target parameternek a GL TEXTURE ENV erteket kell adni. pname lehetseges
ertekei:
GL TEXTURE ENV MODE A kombinal as modjat azonost o szimbolikus konstans.
GL TEXTURE ENV COLOR A text uraf uggveny sznenek RGBA komponensei.
void glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params);
void glGetTexGenfv (GLenum coord, GLenum pname, GLoat *params);
void glGetTexGeniv (GLenum coord, GLenum pname, GLint *params);
A glTexGen*() paranccsal megadott text urakoordinat at letrehoz o f uggvenynek a
pname parameterrel megadott jellemzoit adja vissza a params cmen.
coord a text ura koordinat ajat azonostja, erteke GL S, GL T, GL R, vagy GL Q lehet.
pname lehetseges ertekei:
GL TEXTURE GEN MODE A text urakoordinat ak letrehozas ara hasznalt f uggveny
azonost oja.
GL OBJECT PLANE A referenciask objektumkoordinata-rendszerbeli implicit
alakjanak egy utthat oi.
GL EYE PLANE A referenciask nez opontkoordinata-rendszerbeli implicit alakjanak
egy utthat oi.
void glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type,
GLvoid *pixels);
A pixels cmen a target parametertol f ugg oen egy-, ket- vagy haromdimenzi os
text ur at ad vissza. A level 0 parameterrel a lekerdezendo text ura reszletessegenek
szintjet kell megadni. target lehetseges ertekei: GL TEXTURE 1D, GL TEXTURE 2D
es GL TEXTURE 3D. A format parameterrel azt kell megadni, hogy a pixelek ada-
tait milyen formaban akarjuk visszakapni. Lehetseges ertekei: GL RED, GL GREEN,
GL BLUE, GL ALPHA, GL RGB, GL RGBA, GL BGR, GL GBRA, GL LUMINANCE,
GL LUMINANCE ALPHA. A type parameterrel azt adjuk meg, hogy a pixelek adatait
milyen tpus u adatkent taroljuk, lehetseges ertekei:
GL UNSIGNED BYTE, GL BYTE, GL UNSIGNED SHORT, GL SHORT,
GL UNSIGNED INT, GL INT, GL FLOAT, GL UNSIGNED BYTE 3 3 2,
GL UNSIGNED BYTE 2 3 3 REV, GL UNSIGNED SHORT 5 6 5,
GL UNSIGNED SHORT 5 6 5 REV, GL UNSIGNED SHORT 4 4 4 4,
GL UNSIGNED SHORT 4 4 4 4 REV, GL UNSIGNED SHORT 5 5 5 1,
167
GL UNSIGNED SHORT 1 5 5 5 REV, GL UNSIGNED INT 8 8 8 8,
GL UNSIGNED INT 8 8 8 8 REV, GL UNSIGNED INT 10 10 10 2,
GL UNSIGNED INT 2 10 10 10 REV.
void glGetTexParameterfv (GLenum target, GLenum pname, GLoat *params);
void glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
A params cmen a target text ura pname parametereit adja vissza. target lehetseges
ertekei: GL TEXTURE 1D, GL TEXTURE 2D es GL TEXTURE 3D. pname lehetseges
ertekei:
GL TEXTURE MAG FILTER , GL TEXTURE MIN FILTER,
GL TEXTURE MIN LOD, GL TEXTURE MAX LOD,
GL TEXTURE BASE LEVEL, GL TEXTURE MAX LEVEL,
GL TEXTURE WRAP S, GL TEXTURE WRAP T, GL TEXTURE WRAP R,
GL TEXTURE BORDER COLOR,GL TEXTURE PRIORITY,
GL TEXTURE RESIDENT.
168
Targymutat o
arnyal as, 29
i modell, 9, 29
folytonos, 29
Gouroud-fele, 30
konstans, 29
atl atszos ag, 25, 26, 28, 58, 60, 63, 83
ablak torlese, 6
additv sznkeveres, 24
antialiasing, 61
anyagtulajdonsag, 27, 41, 46, 46, 4749,
53
B-spline
gorbe
derivalja, 140
Bezier
fel ulet, 116, 138
gorbe, 113, 130
pontja, 140
bitterkep, 53, 67, 67, 68
csonkak up, 128
derivalt, 140, 141
display-lista, 53, 53, 5456
dithering, 27, 82, 88
egyszer u sokszog, 11
egyszeresen osszef ugg o, 11
feny tompulasa, 45
fragmentum, 27, 5861, 63, 64, 71, 75,
8284, 8688, 94, 107, 110
gomb, 128
glAccum(), 76
glAlphaFunc(), 83
glAreTexturesResident(), 106, 107
glBegin(), 9, 12, 13, 15, 16, 21, 92, 109,
114
glBindTexture(), 105, 106
glBlendFunc(), 59
glCallList(), 55
glCallLists(), 56, 56, 154
glClear(), 6, 7, 79
glClearAccum(), 79
glClearColor(), 6, 6, 78
glClearDepth(), 79
glClearIndex(), 6, 78
glClearStencil(), 79
glClipPlane(), 38
glColor*(), 28, 48, 49, 115
glColorMask(), 80
glColorMaterial(), 48, 49, 50
glCopyPixels(), 69, 70, 72, 80, 97, 99, 101
glCopyTexImage1D(), 100
glCopyTexSubImage1D(), 100
glCopyTexSubImage2D(), 99, 100
glCopyTexSubImage3D(), 101
glCullFace(), 20
glDeleteLists(), 55, 56
glDeleteTextures(), 106
glDepthFunc(), 87
glDepthMask(), 61, 63, 80
glDepthRange(), 39
glDisable(), 4, 18, 38, 44, 49, 83, 85, 86,
88, 95, 144
glDrawBuer(), 79
glDrawPixels(), 69, 69, 71, 72, 96, 97
glEdgeFlag(), 23
glEnable(), 4, 10, 18, 20, 21, 38, 44, 49,
58, 60, 6264, 83, 85, 86, 88, 95,
113, 114, 116, 144
glEnd(), 9, 12, 15, 16, 21, 92, 109, 114
glEndList(), 54
glEvalCoord1*(), 114, 114, 115
glEvalCoord2*(), 116
glEvalMesh1(), 115
169
glEvalMesh2(), 117
glFeedbackBuer(), 55, 90, 92, 92
glFinish(), 8, 54
glFlush(), 7, 54
glFog*(), 64
glFrontFace(), 19
glFrustum(), 35, 36, 40
glGenLists(), 55, 56
glGenTextures(), 105, 105
glGet*(), 4, 16, 17, 26, 38, 40, 44, 54, 55,
68, 75, 83, 85, 87, 88, 90, 91, 98,
144, 148
glGetClipPlane(), 163
glGetError(), 163
glGetLight*(), 164
glGetMap*(), 165
glGetMaterial*(), 165
glGetPixelMap*(), 166
glGetPolygonStipple(), 166
glGetString(), 166
glGetTexEnv*(), 167
glGetTexGen*(), 167
glGetTexImage(), 71, 72, 167
glGetTexLevelParameter*(), 98
glGetTexParameter*(), 106, 168
glHint(), 62, 62, 63, 64
glIndex*(), 28, 115
glIndexMask(), 80
glInitNames(), 91, 91
glIsList(), 55, 56
glIsTexture(), 105
glLight*(), 44, 49
glLightModel*(), 43, 49
glLineStipple(), 18
glLineWidth(), 17
glListBase(), 56, 56
glLoadIdentity, 35, 40
glLoadIdentity(), 39
glLoadMatrix(), 39, 39, 40
glLoadName(), 91
glLogicOp(), 88
glMap1*(), 114, 156, 165
glMap2*(), 116, 116, 156, 165
glMapGrid1*(), 115, 154
glMapGrid2*(), 117, 155
glMaterial*(), 46, 46, 48, 49, 50
glMatrixMode(), 33, 35, 39, 40, 112
glMultMatrix(), 33, 39, 40, 40
glNewList(), 54, 54, 56
glNormal*(), 10, 115, 146
glOrtho(), 37
glPassThrough(), 92
glPixelMap*(), 70, 72, 72
glPixelStore*(), 21, 55, 71, 99
glPixelTransfer*(), 70, 72, 72, 96, 97, 99
glPixelZoom(), 71
glPointSize(), 16
glPolygonMode(), 19, 63
glPolygonStipple(), 21, 71
glPopMatrix(), 40, 40, 55
glPopName(), 91
glPrioritizeTextures(), 106, 107
glPushMatrix(), 40, 40, 55
glPushName(), 91, 91
glReadBuer(), 76, 80, 80
glReadPixels(), 55, 69, 69, 71, 72, 80
glRect(), 11
glRenderMode(), 55, 90
glRotate*(), 34, 34, 40
glScale*(), 34
glScissor(), 83
glSelectBuer(), 55, 91
glShadeModel(), 29
glStencilFunc(), 81, 84
glStencilMask(), 80, 81
glStencilOp(), 84, 84
glTexCoord*(), 109, 115
glTexEnv*(), 107
glTexGen*(), 111, 147, 167
glTexImage1D(), 71, 72, 100
glTexImage2D(), 71, 72, 96, 97102
glTexImage3D(), 101, 101
glTexParameter*(), 103, 103, 105, 107,
110
glTexSubImage1D(), 100
glTexSubImage2D(), 99, 100
glTexSubImage3D(), 101
glTranslate*(), 34, 34
gluBeginCurve(), 118, 121, 130
gluBeginSurface(), 118, 122, 123, 130
gluBeginTrim(), 122, 123
gluBuild1DMipmapLevels(), 103
170
gluBuild1DMipmaps(), 102
gluCylinder(), 126, 128
gluDeleteNurbsRenderer(), 119
gluDeleteQuadric(), 126, 126
gluDisk(), 126, 128
gluEndCurve(), 119, 121, 130
gluEndSurface(), 119, 122
gluEndTrim(), 122, 123
glujBezierCurve(), 130
glujBezierSurface(), 138
glujCircle(), 131
glujDerBsplineCurve(), 140
glujDerNurbsCurve(), 141
glujHermiteSpline(), 131
glujIsolineOnNurbsSurface(), 141
glujNormalOfNurbsSurface(), 142
glujNurbsSurface(), 133, 134
glujParamCurve(), 131
glujParamSurface(), 139
glujPointOnBezierCurve(), 140
glujPointOnNurbsCurve(), 140
glujPointOnNurbsSurface(), 141
glujTrimmedNurbsCurve(), 131
gluLookAt(), 34
gluNewNurbsRenderer(), 118, 119, 130
gluNewQuadric(), 126, 126
gluNurbsCallback(), 118, 124, 124, 125
gluNurbsCallbackData(), 125
gluNurbsCurve(), 118, 121, 121, 122, 123
gluNurbsProperty(), 118, 119, 119, 120,
124, 125, 130
gluNurbsSurface(), 118, 122, 122, 130,
134
gluOrtho2D(), 37
gluPartialDisk(), 126, 128
gluPerspective(), 35, 36
gluPickMatrix(), 92
gluPwlCurve(), 122, 123, 123
gluQuadricCallback(), 126, 126
gluQuadricDrawStyle(), 126, 127
gluQuadricNormals(), 127
gluQuadricOrientation(), 126, 127, 128
gluQuadricTexture(), 126, 128
gluSphere(), 126, 128
glVertex*(), 9, 16, 17, 21, 68, 115
glViewport(), 38
Gouroud, 30
henger, 128
Hermite-spline, 131
kod, 63
kor, 131
korcikk, 129
korgy ur u, 128
korgy ur ucikk, 128
kornyezeti feny, 41, 4345, 47, 49, 50
kep, 67, 68, 69, 71
kepmez o, 38, 67, 68, 77, 82, 86, 92, 101
-transzformaci o, 32, 38, 39
keppuer, 69, 72, 74, 97, 99101
k up, 128
kivalaszt as, 90
kontrollh alo, 133
kontrollpont, 133
konvex burok, 11
megvilagtas, 2, 9, 27, 28, 41, 42, 43, 45,
46, 49, 53, 63, 82, 95, 108, 127
i modell, 43
mipmapping, 102
modellkoordinata-rendszer, 34
modelltranszformaci o, 10, 32, 33, 33, 39
nezesi irany, 33, 3436
nez opont, 33, 34, 36, 38, 39, 4143, 60,
63, 75, 82, 86
koordinata-rendszer, 33, 34, 35, 38,
43, 45, 64, 111, 163
normalis, 9, 127, 134, 142
normalvektor, 9
normalizalt koordinata-rendszer, 38
NURBS, 110, 118
fel ulet, 122, 133
normalisa, 142
parametervonala, 141
pontja, 141
gorbe, 121
derivaltja, 141
pontja, 140
oset, 133
parameteres fel ulet, 139
171
parameteres gorbe, 131
parametervonal, 133, 141
poligon, 11
poligon alapelem
el uls o oldala, 19
elojeles ter ulete, 19
elhagyasa, 20
felenk nez o oldala, 19
hats o oldala, 19
hatarol o ele, 21
kitoltese mint aval, 21
megadasa, 18
pont alapelem
letrehoz asa, 13
merete, 16
ponth al o, 134
puer, 7, 74, 83
gy ujt o, 76
kep, 74
kivalaszt asa, 79
kivalaszt asi , 90
melyseg, 75, 86
maszkolasa, 80
stencil, 75, 84
szn , 74
szn, 88
torlese, 7, 78
visszacsatolasi , 90, 92
ragyogas, 46, 48
raszteres objektum, 6, 67
reektor, 45, 49
simt as, 16, 17, 27, 61, 61, 62, 63, 76, 77,
87
szn
index, 28
keveres, 24
additv, 24
szubtraktv, 24
megadas, 28
megadasi mod, 24
szort feny, 41, 44, 47, 49
szubtraktv sznkeveres, 24
t ukr ozott feny, 42, 42, 43, 44, 46, 4850,
108
text ura, 94
egydimenzios , 100
f uggvenyek, 107
haromdimenzi os , 101
helyettest o, 98
ismetlese, 110
ketdimenzi os , 95
koordinat ak, 108
modostasa, 99
megadasa, 95
objektumok, 104
reszletessegi szintje, 102
sz ur ok, 103
trimmelt
fel ulet, 123
gorbe, 131
vag as, 35, 38
vag osk, 3638, 163
vettesi transzformaci o, 32, 35, 35, 3840,
82, 94
visszacsatolas, 92
vonaltpus, 18
vonalvastags ag, 17
172
Irodalomjegyzek
[1] Foley, J. D., van Dam, A., Feiner, S. K., Hughes, J. F., Computer Graphics: principles
and practice, second edition, Addison-Wesley, Reading, MA, 1990.
[2] Salomon, D., Computer graphics and geometric modeling, Springer, New York, 1999.
[3] Shreiner, D. (edt), OpenGL reference manual, The ocial reference document to
OpenGL, Version 1.2, third edition, Addison-Wesley, Reading, MA, 1999.
[4] Szirmay-Kalos, L., Szamt ogepes graka, ComputerBooks, Budapest, 1999.
[5] Szirmay-Kalos, L., Antal Gy., Csonka F., Haromdimenzios graka, animacio es
jatekfejlesztes, ComputerBooks, Budapest, 2003.
[6] Woo, M., Neider, J., Davis, T., Shreiner, D., OpenGL programming guide, The o-
cial guide to learning OpenGL, Version 1.2, third edition, Addison-Wesley, Reading,
MA, 1999.
[7] http://www.cs.unc.edu/rademach/glui/
[8] http://www.opengl.org/
[9] http://www.sgi.com/software/opengl/
[10] http://www.trolltech.com/
[11] http://www.xmission.com/nate/opengl.html
173

You might also like