JUH

´
ASZ IMRE
OpenGL
mobiDI
´
AK k¨onyvt´ar
Juh´asz Imre
OpenGL
mobiDI
´
AK k¨onyvt´ar
SOROZATSZERKESZT
˝
O
Fazekas Istv´an
JUH
´
ASZ IMRE
egyetemi docens
Miskolci Egyetem
OpenGL
Egyetemi jegyzet
Els˝o kiad´as
mobiDI
´
AK k¨onyvt´ar
Debreceni Egyetem
Lektor
Bancsik Zsolt
Lajos S´andor
Miskolci Egyetem
Copyright c _ Juh´asz Imre, 2003
Copyright c _ elektronikus k¨ozl´es mobiDI
´
AK k¨onyvt´ar, 2003
mobiDI
´
AK k¨onyvt´ar
Debreceni Egyetem
Informatikai Int´ezet
4010 Debrecen, Pf. 12
Hungary
http://mobidiak.inf.unideb.hu/
A m˝ u egy´eni tanulm´ anyoz´ as c´elj´ ara szabadon let¨olthet˝ o. Minden egy´eb
felhaszn´al´as csak a szerz˝o el˝ozetes ´ır´ asbeli enged´ely´evel t¨ort´enhet.
A m˝ u ,,A mobiDI
´
AK ¨onszervez˝o mobil port´al” (IKTA, OMFB-00373/2003))
´es a ,,GNU Iter´ator, a leg´ ujabb gener´aci´ os port´al szoftver”
(ITEM, 50/2003) projektek keret´eben k´esz¨ ult.
Tartalomjegyz´ek
El˝osz´o 1
1. Bevezet´es 2
2. Rajzol´as az OpenGL-ben 6
2.1. Ablak t¨orl´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. A rajzol´as befejez´es´enek kik´enyszer´ıt´ese . . . . . . . . . . . . . . . . . . . . 7
3. Geometriai alapelemek rajzol´asa 9
3.1. Geometriai alapelemek megad´asa . . . . . . . . . . . . . . . . . . . . . . . 9
3.2. Geometriai alapelemek megjelen´ıt´ese . . . . . . . . . . . . . . . . . . . . . 11
3.3. A geometriai alapelemek megjelen´es´et befoly´asol´o t´enyez˝ ok . . . . . . . . . 16
3.3.1. Pont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3.2. Szakasz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3.3. Poligon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3.4. Poligonok elhagy´asa . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3.5. Kit¨olt´es mint´aval . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.6. Poligon hat´arol´ o ´eleinek megjel¨ol´ese . . . . . . . . . . . . . . . . . . 21
4. Sz´ın, ´arnyal´as 24
4.1. Sz´ın megad´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.
´
Arnyal´asi modell megad´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5. Koordin´ata-rendszerek ´es transzform´aci´ ok 32
5.1. N´ez˝opont, n´ez´esi ir´any kiv´alaszt´asa ´es modelltranszform´aci´ ok . . . . . . . . 33
5.1.1. Modelltranszform´aci´ ok megad´as´ at seg´ıt˝o parancsok . . . . . . . . . 33
5.1.2. N´ez˝ opont ´es n´ez´esi ir´any be´all´ıt´ asa . . . . . . . . . . . . . . . . . . 34
5.2. Vet´ıt´esi transzform´aci´ ok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3. K´epmez˝o-transzform´ aci´ o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.4. A transzform´aci´ os m´atrixok kezel´ese . . . . . . . . . . . . . . . . . . . . . . 39
6. Megvil´ag´ıt´as 41
6.1. Megvil´ag´ıt´ asi modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2. F´enyforr´ as megad´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.1. A f´eny sz´ıne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.2. A f´enyforr´ asok helye . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.3. Reflektor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
I
TARTALOMJEGYZ
´
EK II
6.3. Anyagtulajdons´agok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.4. Az anyagtulajdons´agok v´altoztat´asa . . . . . . . . . . . . . . . . . . . . . . 48
6.5. A cs´ ucspontok sz´ın´enek meghat´aroz´ asa megvil´ag´ıt´as eset´en . . . . . . . . . 49
6.6. Megvil´ag´ıt´ as sz´ınindex m´odban . . . . . . . . . . . . . . . . . . . . . . . . 49
7. Display-lista 53
7.1. Display-lista l´etrehoz´asa, v´egrehajt´asa . . . . . . . . . . . . . . . . . . . . 54
7.2. A display-lista tartalma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3. Hierarchikus diplay-list´ ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.4. Display-list´ ak ´es indexek kezel´ese . . . . . . . . . . . . . . . . . . . . . . . 55
7.5. T¨obb lista v´egrehajt´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8. Speci´alis optikai hat´asok 58
8.1.
´
Atl´atsz´ os´ag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2. Sim´ıt´as (antialiasing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.2.1. Pont ´es szakasz sim´ıt´asa . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2.2. Poligonok sim´ıt´ asa . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.3. K¨od (atmoszf´erikus hat´asok) . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9. Raszteres objektumok rajzol´asa 67
9.1. Bitt´erk´epek ´es karakterek . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
9.2. Kurrens raszterpoz´ıci´ o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
9.3. Bitt´erk´ep rajzol´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
9.4. K´epek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
9.4.1. Pixeladatok olvas´asa, ´ır´asa ´es m´asol´asa . . . . . . . . . . . . . . . . 69
9.4.2. K´epek kicsiny´ıt´ese, nagy´ıt´ asa . . . . . . . . . . . . . . . . . . . . . 71
9.5. Pixelek t´arol´ asa, transzform´al´ asa, lek´epez´ese . . . . . . . . . . . . . . . . . 71
9.6. A pixeladatok t´arol´ as´anak szab´alyoz´asa . . . . . . . . . . . . . . . . . . . . 71
9.7. M˝ uveletek pixelek mozgat´asa sor´an . . . . . . . . . . . . . . . . . . . . . . 72
9.8. Transzform´al´ as t´abl´ azat seg´ıts´eg´evel . . . . . . . . . . . . . . . . . . . . . . 72
10.Pufferek 74
10.1. Sz´ınpufferek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
10.2. M´elys´egpuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.3. Stencilpuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.4. Gy˝ ujt˝ opuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
10.4.1. Teljes k´ep kisim´ıt´ asa . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.4.2. Bemozdul´asos ´eletlens´eg (motion blur) . . . . . . . . . . . . . . . . 77
10.4.3. M´elys´eg´eless´eg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.5. Pufferek t¨orl´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
10.6. Az ´ırand´ o ´es olvasand´o pufferek kiv´alaszt´ asa . . . . . . . . . . . . . . . . . 79
10.7. Pufferek maszkol´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
11.A fragmentumokon v´egrehajtott vizsg´alatok ´es m˝ uveletek 82
11.1. Kiv´ag´ asi vizsg´alat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
11.2. Alfa-vizsg´alat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
11.3. Stencilvizsg´alat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
TARTALOMJEGYZ
´
EK III
11.4. M´elys´egvizsg´ alat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
11.5. Sz´ınkombin´al´ as, dithering, logikai m˝ uveletek . . . . . . . . . . . . . . . . . 87
11.5.1. Sz´ınkombin´ al´ as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
11.5.2. Dithering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
11.5.3. Logikai m˝ uveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.Kiv´alaszt´as, visszacsatol´as 90
12.1. Kiv´alaszt´ as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
12.2. Visszacsatol´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
13.Text´ ur´ak 94
13.1. A text´ uralek´epez´es enged´elyez´ese . . . . . . . . . . . . . . . . . . . . . . . 95
13.2. Text´ ura megad´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
13.3. Text´ urahelyettes´ıt˝o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
13.4. Text´ ur´ ak m´odos´ıt´ asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
13.5. Egydimenzi´os text´ ur´ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
13.6. H´aromdimenzi´ os text´ ur´ ak . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
13.7. A text´ ur´ ak r´eszletess´eg´enek szintje (mipmapping) . . . . . . . . . . . . . . 102
13.7.1. Automatikus l´etrehoz´as . . . . . . . . . . . . . . . . . . . . . . . . . 102
13.8. Sz˝ ur˝ ok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
13.9. Text´ uraobjektumok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
13.9.1. A text´ uraobjektumok elnevez´ese . . . . . . . . . . . . . . . . . . . . 105
13.9.2. Text´ uraobjektumok l´etrehoz´ asa, haszn´alata . . . . . . . . . . . . . 105
13.9.3. Text´ uraobjektumok t¨orl´ese . . . . . . . . . . . . . . . . . . . . . . . 106
13.9.4. Rezidens text´ ur´ak munkacsoportja . . . . . . . . . . . . . . . . . . 106
13.9.5. Text´ uraobjektumok priorit´asa . . . . . . . . . . . . . . . . . . . . . 107
13.10.Text´ uraf¨ uggv´enyek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
13.11.Text´ urakoordin´at´ ak megad´asa . . . . . . . . . . . . . . . . . . . . . . . . . 108
13.11.1.A megfelel˝o text´ urakoordin´at´ ak kisz´amol´asa . . . . . . . . . . . . . 109
13.11.2.Text´ ur´ ak ism´etl´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
13.11.3.Text´ urakoordin´at´ak automatikus l´etrehoz´ asa . . . . . . . . . . . . . 110
13.12.Text´ uram´atrix-verem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
14.G¨orb´ek ´es fel¨ uletek rajzol´asa 113
14.1. B´ezier-g¨ orbe megjelen´ıt´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
14.2. B´ezier-fel¨ ulet megjelen´ıt´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
14.3. Racion´alis B-spline (NURBS) g¨orb´ek ´es fel¨ uletek megjelen´ıt´ese . . . . . . . 118
14.3.1. NURBS g¨orb´ek rajzol´asa . . . . . . . . . . . . . . . . . . . . . . . . 121
14.3.2. NURBS fel¨ uletek megjelen´ıt´ese . . . . . . . . . . . . . . . . . . . . 122
14.3.3. Trimmelt fel¨ uletek . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
14.3.4. Hibakezel´es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
14.3.5. A NURBS objektumokat k¨ozel´ıt˝ o adatok visszanyer´ese . . . . . . . 124
14.4. G¨omb, k´ up ´es k¨orgy˝ ur˝ u rajzol´asa . . . . . . . . . . . . . . . . . . . . . . . 125
15.A gluj f¨ uggv´enyk¨onyvt´ar 130
15.1. G¨orb´eket ´es fel¨ uleteket megjelen´ıt˝o f¨ uggv´enyek . . . . . . . . . . . . . . . . 130
15.1.1. G¨orb´ek rajzol´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
15.1.2. Fel¨ uletek szeml´eltet´ese . . . . . . . . . . . . . . . . . . . . . . . . . 133
15.2. Pontok, ´erint˝ok, norm´alvektorok . . . . . . . . . . . . . . . . . . . . . . . . 139
16.K´epess´egek enged´elyez´ese, letilt´asa ´es lek´erdez´ese 144
17.
´
Allapotv´altoz´ ok ´ert´ek´enek lek´erdez´ese 148
T´argymutat´ o 168
Irodalomjegyz´ek 173
IV
El˝osz´o
Ez a le´ır´ as a [3] ´es [6] k¨onyvek, valamint a rendszer haszn´alata sor´an szerzett tapasztalatok
alapj´an k´esz¨ ult. Az ut´obbi tev´ekenys´eg sor´an sz¨ uletett az OpenGL g¨orbe- ´es fel¨ uletrajzol´o
szolg´altat´ asainak kieg´esz´ıt´es´ere a GLUJ f¨ uggv´enyk¨ onyvt´ ar. Mivel ez saj´at fejleszt´es˝ u, a
f¨ uggv´enyk¨onyvt´art ´es a kapcsol´od´ o header f´ajlt mell´ekelt¨ uk.
Tapasztalataink szerint egy grafikus rendszer megismer´es´ehez el˝osz¨or a k¨ovetkez˝ o
k´erd´esekre c´elszer˝ u a v´alaszokat megkeresni:
1. Milyen alapelemekb˝ol ´ep´ıthetj¨ uk fel a k´epeket?
2. Hogyan lehet megadni ezeket a k´epelemeket?
3. Milyen transzform´aci´ okon mennek ´at a k´epelemek a megad´asukt´ ol a megjelen´es¨ ukig?
4. Az alapelemek megjelen´es´enek milyen tulajdons´agai adhat´ok meg?
5. Milyen tov´abbi szolg´altat´asai vannak a rendszernek?
Ezeket a szempontokat ´es sorrendet aj´anljuk az olvas´ onak is annak ´erdek´eben, hogy a
rendszerr˝ol ´atfog´ o k´epet kapjanak. Az OpenGL nagyon sok ”tov´abbi szolg´altat´ast” ny´ ujt,
de ezek meg´ert´es´ehez ´es haszn´alat´ ahoz az 1.-4. k´erd´esekre adott v´alaszok elker¨ ulhetetle-
nek.
Vannak le´ır´asok, amelyek arra v´allalkoznak, hogy a minden el˝oismeret n´elk¨ uli
rem´enybeli felhaszn´al´ okat is bevezetik az OpenGL rejtelmeibe. Mi erre a feladatra nem
v´allalkozunk. Ennek a le´ır´asnak a meg´ert´es´ehez - egy´ebk´ent az OpenGL haszn´alat´ ahoz is
- alapvet˝ o sz´am´ıt´ astechnikai ´es matematikai (f˝oleg geometriai) ismeretekre van sz¨ uks´eg.
Ezt a le´ır´ ast azok forgathatj´ak legnagyobb haszonnal, akik az OpenGL-el kapcsolatos
el˝oad´ asokat hallgatnak, illetve akik m´ar ismernek m´as grafikus rendszert (rendszereket).
A megismer´est ´es meg´ert´est hivatottak szolg´alni a mell´ekelt demonstr´aci´os pro-
gramok. Ezek a programok a GLUT ([11]), GLUI ([7]) ´es a GLUJ (15. feje-
zet) f¨ uggv´enyk¨onyvt´arakat haszn´alj´ ak. A futtat´asukhoz sz¨ uks´eges glut32.dll f´ajlt is
mell´ekelt¨ uk.
1
1. fejezet
Bevezet´es
A Silicon Graphics (SG) kifejlesztette a Graphics Library (GL) rendszert, ami az ´altaluk
gy´artott munka´allom´ asok grafikus lehet˝os´egeinek min´el hat´ekonyabb kihaszn´al´ as´ara ki-
alak´ıtott koncepci´o. A GL t¨obb programoz´asi nyelvb˝ ol el´erhet˝ o f¨ uggv´enyk¨onyvt´ arakon
kereszt¨ ul. Az SG munka´ allom´asok k¨ozismert el˝onye a gyors ´es ig´enyes grafika, amit hard-
ver oldalr´ol a grafikus k´arty´aba ´ep´ıtett egy vagy t¨obb geometriai t´arsprocesszor (SG ter-
minol´ogi´ aval geometry engine) t´amogat. Ez a koncepci´o olyan sikeresnek bizonyult, hogy
vezet˝o hardver- ´es szoftvergy´ art´ o c´egek – t¨obbek k¨oz¨ott a DEC, IBM, Intel, Microsoft
´es Silicon Graphics – ¨osszefog´ as´aval l´etrehoztak egy munkacsoportot, amely ez alapj´an
specifik´alta az OpenGL-t.
Az OpenGL teljesen hardverf¨ uggetlen, f˝o c´elja az ig´enyes, t´erbeli objektumok
´abr´ azol´as´ ara is alkalmas (un. 3D-s), interakt´ıv, sz´ınes, raszteres grafik´at ig´enyl˝ o al-
kalmaz´asok l´etrehoz´ as´ anak t´amogat´asa. Az OpenGL-t ´ ugy tervezt´ek, hogy h´al´ ozati
k¨ornyezetben is hat´ekonyan m˝ uk¨odj¨ on, m´eg akkor is, ha az alkalmaz´ast futtat´o (kli-
ens) sz´am´ıt´ og´ep t´ıpusa elt´er az eredm´enyt megjelen´ıt˝o (szerver) sz´am´ıt´ og´ep t´ıpus´at´ ol.
A legt¨obb munka´allom´ as kateg´ori´ aj´ u sz´am´ıt´og´ep t´amogatja az OpenGL-t, de a PC-
s vil´agban haszn´alt WIN’95, WIN’98, Windows NT, Windows 2000 ´es Windows XP
oper´aci´os rendszerek alatt az IBM PC (´es vele kompatibilis) g´epeken is futtathatunk
ilyen alkalmaz´ asokat. Term´eszetesen a UNIX oper´aci´ os rendszernek a PC-ken haszn´alatos
k¨ ul¨ onb¨oz˝ o v´altozatai (pl. Linux) is t´amogatj´ ak az OpenGL alkalmaz´asok futtat´as´ at.
Az egyes grafikus k´arty´ak elt´er˝o k´epess´eg˝ uek a be´ep´ıtett geometriai t´arsprocesszorok
(grafikai gyors´ıt´ok) t´ıpus´at´ ol ´es sz´am´ at´ol f¨ ugg˝ oen. Az OpenGL alkalmaz´ asok porta-
bilit´asa ´erdek´eben ezzel nem kell t¨or˝odnie a programoz´onak, ugyanis az alkalmaz´as
eredm´eny´et megjelen´ıt˝ o szerver g´ep megfelel˝o programja vizsg´alja meg, hogy az adott
funkci´ot t´amogatja-e a grafikus k´artya hardver szinten, ´es ennek megfelel˝oen hajtja v´egre
azt. Ezt a felhaszn´al´ o csak a sebess´eg alapj´an ´erz´ekeli, ugyanis a hardver ´altal nem
t´amogatott funkci´okat szoftverrel kell megval´ os´ıtani, ami term´eszetesen id˝oig´enyesebb.
Az OpenGL platformt´ ol ´es alkalmaz´ ast´ol f¨ uggetlen rendszer, a felhaszn´al´ as sz´eles
sk´al´ aj´at t´amogatja, a pixelm˝ uveleteket ig´enyl˝ o k´epfeldolgoz´ ast´ol a bonyolultabb fel¨ ule-
tek ig´enyes megjelen´ıt´es´et (l´athat´ os´ag, megvil´ag´ıt´ as, text´ ura) is megk¨ovetel˝o CAD alkal-
maz´asokon ´at a gyors k´epv´alt´ asokra ´ep¨ ul˝o val´os idej˝ u anim´aci´oig. A rendszer alkot´ oi a
t¨ok´eletes hardverf¨ uggetlens´egre t¨orekedtek, ez´ert a t¨obb mint 100 parancs k¨oz¨ ott nincs
olyan, amely a felhaszn´al´oi grafikus adatbevitelt, vagy az ablakkezel´est t´amogatn´a. (Ez
az anyag nem tartalmazza az ¨osszes OpenGL parancs le´ır´ as´at.) Ezen funkci´ ok meg-
2
val´os´ıt´ as´ara az OpenGL implement´ aci´okhoz kapcsol´od´o kieg´esz´ıt˝ o f¨ uggv´enyk¨ onyvt´arak
biztos´ıtanak lehet˝os´eget. Sz´amos ilyen k¨onyvt´ ar van, k¨ozt¨ uk olyan is, amely lehet˝ov´e
teszi az alkalmaz´ asok forr´asnyelvi szint˝ u portabilit´as´ at munka´allom´ asok ´es PC-k k¨oz¨ ott.
Ez egy rendk´ıv¨ ul fontos eredm´enynek tekinthet˝ o a soksz´ın˝ u, hihetetlen¨ ul gyorsan v´altoz´ o
hardver-szoftver k¨ornyezetet figyelembe v´eve. Az OpenGL is folyamatos fejleszt´es alatt
´all, jelen le´ır´as az 1.2 verzi´ot ismerteti.
Nagyon fontos azt is tudnunk, hogy mit ne v´arjunk az OpenGL-t˝ol. Mindenekel˝ott: az
OpenGL nem geometriai modellez˝orendszer, teh´at nincsenek benne ¨osszetett geometriai
objektumok megad´as´ ara, manipul´al´as´ ara alkalmas parancsok. Az OpenGL nem inter-
akt´ıv rajzol´o- vagy grafikus rendszer. Az OpenGL azonban rendk´ıv¨ ul alkalmas a geo-
metriai modellez˝orendszerek, CAD rendszerek, grafikus rendszerek, de m´eg az interakt´ıv
j´at´ekprogramok grafikai ig´enyeinek kiel´eg´ıt´es´ere is. Ennek k¨osz¨onhet˝ oen sz´eles k¨orben el-
terjedt. Az OpenGL-t haszn´al´o alkalmaz´asok t¨obb g´ept´ıpuson, ´ıgy minden munka´allom´ as
kateg´ori´ aj´ u g´epen ´es a n´alunk legn´epszer˝ ubb PC-ken is futtathat´ok, m´eg a programok
forr´asnyelvi szint˝ u portabilit´asa is megoldhat´o. Val´osz´ın˝ uleg az ´ori´ asi j´at´ekprogram-
piacnak k¨osz¨onhet˝ oen egyre t¨obb grafikus k´artya hardverb˝ol t´amogatja az OpenGL-t,
ami jelent˝ osen megn¨oveli a sebess´eget.
Az OpenGL szintaxisa
Le´ır´asunkban az OpenGL C nyelvi felhaszn´al´oi fel¨ ulet´et haszn´aljuk. Az egyes paran-
csokat a megfelel˝o f¨ uggv´eny h´ıv´ as´aval aktiviz´alhatjuk. A f¨ uggv´enyek neve mindig gl-el
kezd˝odik, amit a v´egrehajtand´o funkci´o angol megnevez´ese k¨ovet. A megnevez´esben az
egyes szavak nagybet˝ uvel kezd˝odnek, pl. glPolylineMode().
A le´ır´as sor´an alkalmazott szintaxis
1.1. t´abl´ azat. A param´eterek lehets´eges t´ıpusai
r¨ovid´ıt´es adatt´ıpus a megfelel˝o C
nyelvi t´ıpus
az OpenGL-ben defini´alt t´ıpus
b 8 bites eg´esz signed char GLbyte
s 16 bites eg´esz short GLshort
i 32 bites eg´esz long GLint, GLsizei
f 32 bites lebeg˝opontos float GLfloat, GLcampf
d 64 bites lebeg˝opontos double GLdouble, GLclampd
ub 8 bites eg´esz unsigned char GLubyte, GLboolean
us 16 bites eg´esz unsigned short GLushort
ui 32 bites eg´esz unsigned long GLuint, GLenum,GLbitfield
A kapcsos z´ar´ ojelek ¦¦ k¨oz¨ ott felsorolt lehet˝os´egek k¨oz¨ ul pontosan egyet k¨otelez˝o
v´alasztani, a sz¨ogletes z´ar´ ojelek [ ] k¨oz¨ ott felsoroltakb´ol pedig legfeljebb egyet lehet.
Ilyen helyzettel a f¨ uggv´enyek nev´enek v´eg´en tal´alkozunk, ahol is a funkci´ ot le´ır´o sza-
vak ut´an sz´am ´es bet˝ u szerepelhet, melyek arra utalnak, hogy h´any darab, milyen t´ıpus´ u
vagy milyen m´odon adhat´o meg a f¨ uggv´eny param´etere, ugyanis egy-egy adategy¨ uttest
t¨obbf´elek´eppen is megadhatunk. P´eld´aul
glVertex ¦234¦¦sifd¦[v]();
ami azt jelenti, hogy a cs´ ucspontot megadhatjuk 2,3 vagy 4 koordin´at´ aj´aval, ezek
3
t´ıpusa lehet short, integer, float vagy double; tov´ abb´a felsorolhatjuk a koordin´at´ akat
egyenk´ent, vagy ´atadhatjuk a koordin´at´ akat tartalmaz´o vektor c´ım´et is. Teh´ at a
glVertex3f(1.,2.,3.);
´es a
float p[] = ¦1.,2.,3.¦;
glVertex3fv(p);
programr´eszletek ugyanazt eredm´enyezik.
Ha a le´ır´as sor´an puszt´an a f¨ uggv´eny nev´ere akarunk hivatkozni, ´es a param´eterek
megad´as´ anak m´odja a t´argyalt probl´ema megold´asa szempontj´ab´ ol l´enyegtelen, akkor a *
karakterrel helyettes´ıtj¨ uk a megad´asi m´odot le´ır´ o karaktereket. A glVertex*(); p´eld´ aul
az ¨osszes lehets´eges megad´asi m´odot jel¨oli. A param´eterek lehets´eges t´ıpusainak list´aj´at
az 1.1. t´abl´azat tartalmazza.
Az OpenGL-ben defini´alt konstansok neve GL-el kezd˝ odik ´es a n´evben szerepl˝o szavak
nagybet˝ uvel ´ırand´ok. Ha a megnevez´es t¨obb sz´ob´ol ´all, akkor a szavakat az al´ah´ uz´as
karakterrel v´alasztjuk el, pl. GL TRIANGLE STRIP.
´
Allapotv´altoz´ ok
A rendszerben sz´amos glob´alis param´eter, ´ ugynevezett ´allapot- vagy glob´alis v´altoz´ o
van, melyek kurrens ´ert´eke szerint hajtja v´egre a rendszer a parancsokat. Ilyen pl. az
objektumok sz´ıne, ami azt eredm´enyezi, hogy nem kell minden egyes rajzol´asi parancs
el˝ott a rajzol´as sz´ın´et is be´all´ıtanunk, hanem a rendszer az ´allapotv´altoz´ oban t´arolt ´ert´eket
haszn´alja. Ez cs¨okkenti a felhaszn´al´ oi program m´eret´et, ´es n¨oveli a program v´egrehajt´asi
sebess´eg´et.
T¨obb ´allapotv´altoz´ o valamilyen m´odra, lehet˝os´egre utal. Ezeket a glEnable()
paranccsal lehet enged´elyezni ´es a glDisable() paranccsal le lehet tiltani. Minden
´allapotv´altoz´ onak van alap´ertelmez´ese, tov´ abb´a kurrens ´ert´ek¨ uk mindig lek´erdezhet˝o a
lek´erdezend˝ o adat t´ıpus´ at´ol f¨ ugg˝ oen a glGet*() f¨ uggv´enyek valamelyik´evel. A glGet*()
f¨ uggv´eny r´eszletes le´ır´ asa ´es az ´allapotv´altoz´ ok teljes list´aja a 17. fejezetben tal´alhat´o.
A kurrens ´allapotv´altoz´ok a glPushAttrib() paranccsal t´arolhat´ ok az att-
rib´ utumveremben (stackben), majd a glPopAttrib() paranccsal ´ ujra bet¨olthet˝ ok onnan.
Az attrib´ utumverem haszn´alata sokkal hat´ekonyabb, mint egy saj´at t´arol´asi rendszer ki-
alak´ıt´ asa.
Az OpenGL nagyon hat´ekony, de csak egyszer˝ u rajzol´asi ´es azt seg´ıt˝o parancsokat tar-
talmaz, ez´ert ¨osszetett alakzatok ´abr´ azol´ as´ara, speci´alis grafikai probl´em´ ak megold´as´ ara
saj´at f¨ uggv´enyeket kell ´ırnunk. Mindenk´eppen sz¨ uks´eg¨ unk van olyan f¨ uggv´enyk¨onyvt´ arra,
amely az ablakkezel´est, ´es a grafikus adatbevitelt lehet˝ov´e teszi. Ilyen c´el´ u paran-
csok ugyanis nincsenek az OpenGL-ben, mivel ezek megval´os´ıt´asa nagym´ert´ekben hard-
verf¨ ugg˝ o.
Minden OpenGL implement´aci´ o r´esz´et k´epezi a GLU (OpenGL Utility) k¨onyvt´ar,
mely a t´ernek s´ıkra val´o lek´epez´es´eben, valamint g¨orb´ek ´es fel¨ uletek ´abr´azol´ as´aban ny´ ujt
seg´ıts´eget. A m´asik, minden¨ utt megtal´alhat´o k¨onyvt´ ar a GLX (az OpenGL kiterjeszt´ese
az X Window rendszerre), mely az ablakkezel´est ´es a grafikus adatbevitelt teszi lehet˝ov´e.
Annak ellen´ere, hogy a GLX minden OpenGL implement´aci´ onak r´esze, a GLX helyett mi
a hasonl´o c´el´ u GLUT (OpenGL Utility Toolkit) f¨ uggv´enyk¨ onyvt´ art prefer´aljuk, mivel ez
egy szabadon haszn´alhat´ o szoftver ([11]), melynek m´eg a forr´ask´ odja is rendelkez´esre ´all.
A GLUT haszn´alata eset´en programunk forr´asnyelvi szinten port´abilis lesz a k¨ ul¨ onb¨oz˝ o
platformok, pl. a UNIX ´es WINDOWS oper´aci´os rendszerek k¨oz¨ ott.
4
Ugyanez ´erhet˝o el a Qt rendszerrel is ([10]), ennek egyetlen h´atr´ anya, hogy nem szaba-
don haszn´alhat´o.
5
2. fejezet
Rajzol´as az OpenGL-ben
Az OpenGL-ben h´arom rajzol´asi alapm˝ uvelet van:
• ablak t¨orl´ese;
• geometriai objektum rajzol´asa;
• raszteres objektum rajzol´asa.
Ebben a fejezetben csak az ablak t¨orl´es´evel foglalkozunk, a geometriai alapelemek
rajzol´as´aval a 3. fejezetben, a raszteres objektumok rajzol´as´aval pedig a 9. fejezetben.
K´etf´ele rajzol´asi m´od van: a k¨ozvetlen (azonnali) rajzol´asi m´od (immediate mode), ez
az alap´ertelmez´es; ´es lehet˝os´eg van a rajzol´asi parancsoknak display-list´an val´o t´arol´ as´ara
a k´es˝obbi, hat´ekony felhaszn´al´ as ´erdek´eben.
2.1. Ablak t¨orl´ese
Az ablak t¨orl´ese az ablakot k´epvisel˝ o t´eglalapnak a h´att´ersz´ınnel val´ o kit¨olt´es´et jelenti,
sz¨ovegszerkeszt˝ o eset´en pl. a pap´ır sz´ın´et jelent˝ o feh´er, vagy a szemet kev´esb´e irrit´al´o
halv´anysz¨ urke a szok´asos h´att´ersz´ın.
Az ablak t¨orl´es´ehez a glClearColor() paranccsal ´all´ıthatjuk be a h´att´er sz´ın´et, mag´at
a t¨orl´est pedig a glClear(GL COLOR BUFFER BIT) paranccsal hajthatjuk v´egre. A
h´att´ersz´ınt egy ´allapotv´altoz´ oban t´arolja a rendszer, vagyis nem kell minden t¨orl´es el˝ott
megadnunk.
void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
A t¨orl´esi sz´ın kurrens ´ert´ek´et ´all´ıtja be RGBA sz´ınmegad´ asi m´od eset´en. A
sz´ınmegad´ asi m´od kiv´alaszt´ asa hardverf¨ ugg˝ o, ez´ert erre nincs OpenGL parancs. Erre a
GLX vagy GLUT k¨onyvt´ arban tal´alunk f¨ uggv´enyt. A param´etereket a rendszer a [0., 1.]
intervallumra lev´agja. A t¨orl´esi sz´ın alap´ertelmez´ese (0., 0., 0., 0.), ami teljesen ´atl´atsz´ o,
fekete h´att´ersz´ınt eredm´enyez.
void glClearIndex (GLfloat c);
A t¨orl´esi sz´ınindex kurrens ´ert´ek´et ´all´ıtja be sz´ınindex-m´ od eset´en.
6
Az OpenGL-ben a glClear() paranccsal lehet a puffereket t¨or¨olni.
void glClear (GLbitfield mask);
T¨orli a megadott puffert (puffereket) a megfelel˝o ´allapotv´altoz´o kurrens ´ert´eke szerint.
T¨obb puffer egyidej˝ u t¨orl´ese eset´en a pufferek azonos´ıt´oj´ at a bitenk´enti VAGY m˝ uvelettel
(C nyelvben a [ oper´atorral) kell ¨osszekapcsolni. A t¨or¨olhet˝ o pufferek teljes list´aja a 2.1.
t´abl´ azatban tal´alhat´o.
2.1. t´abl´azat. Az OpenGL pufferei
puffer azonos´ıt´ oja az OpenGL-ben
sz´ınpuffer GL COLOR BUFFER BIT
m´elys´egpuffer GL DEPTH BUFFER BIT
gy˝ ujt˝ opuffer GL ACCUM BUFFER BIT
stencilpuffer GL STENCIL BUFFER BIT
A t¨orl´es id˝oig´enyes feladat, mivel az ablak minden pixel´ere (ezek sz´ama a milli´ot is
meghaladhatja) el kell v´egezni a megfelel˝o m˝ uveletet. Sz´amos grafikus hardver eset´en
hat´ekonyabb a pufferek egyidej˝ u t¨orl´ese, mint az egyenk´enti t¨orl´es, ´es biztos, hogy az
egyidej˝ u t¨orl´es egyetlen hardver eset´en sem lass´ıtja a folyamatot.
2.2. A rajzol´as befejez´es´enek kik´enyszer´ıt´ese
A rajzol´asi parancs kiad´as´ at´ol az objektum megjelen´es´eig sok minden t¨ort´enik (transz-
form´aci´ ok, v´ag´ as, sz´ınez´es, ´arnyal´as, text´ uralek´epez´es) ezt megjelen´ıt´esi l´ancnak (graphics
pipeline) nevezz¨ uk. Ezeket a m˝ uveleteket ´altal´aban m´as-m´as, az adott c´elra kifejlesztett
speci´alis hardver hajtja v´egre, ´es ilyenkor a CPU csak elk¨ uldi a parancsot ´es nem v´ar a
k¨ovetkez˝ o parancs kiad´as´ aig arra, hogy az el˝oz˝ o v´egigmenjen a m˝ uveleti soron. H´al´ozati
k¨ornyezetben, ha a kliens ´es a szerver k¨ ul¨onb¨oz˝ o g´epeken van, akkor az adat´atvitel csoma-
gokban t¨ort´enik. Az adat´atvitel hat´ekonys´ aga ´erdek´eben a rendszer csak akkor k¨ uldi el a
csomagot, ha az – a sz´am´ ara fenntartott puffer – m´ar megtelt. Adott esetben hossz´ u ideig
v´arhatunk arra, hogy megteljen a csomag. A csomagok elk¨ uld´es´et a glFlush() paranccsal
k´enyszer´ıthetj¨ uk ki.
void glFlush (void);
Kik´enyszer´ıti a kor´abban kiadott OpenGL parancsok v´egrehajt´as´ anak megkezd´es´et,
´es garant´ alja, hogy a v´egrehajt´as v´eges id˝on bel¨ ul befejez˝odik.
Az anim´aci´okor haszn´alt puffer-cser´el˝ o parancs (swap buffer) automatikusan kiadja a
glFlush() parancsot.
Van olyan eset, amikor nem el´eg puszt´an kik´enyszer´ıteni a grafikus parancsok
v´egrehajt´as´ anak megkezd´es´et, hanem arr´ol is meg kell gy˝oz˝odni, hogy a grafikus hard-
ver ezeket az utas´ıt´ asokat v´egre is hajtotta, vagyis a v´egrehajt´as nyugt´ az´as´ at v´arjuk (pl.
7
biztosak akarunk lenni abban, hogy a k´ep megjelent a k´eperny˝ on, miel˝ott felhaszn´al´ oi
interakci´ot enged´elyezn´enk). Ennek megold´as´ ara szolg´al a glFinish() parancs.
void glFinish (void);
Kik´enyszer´ıti a kor´abban kiadott OpenGL parancsok v´egrehajt´as´at, ´es nem adja vissza
a vez´erl´est a kor´abban kiadott parancsok teljes v´egrehajt´as´anak befejez´es´eig.
Ezen parancs t´ ul gyakori haszn´alata a grafikus teljes´ıtm´eny (rajzol´asi sebess´eg) jelent˝os
cs¨okken´es´et eredm´enyezheti.
8
3. fejezet
Geometriai alapelemek rajzol´asa
Ebben a fejezetben azt ´ırjuk le, hogy az OpenGL-ben egy-egy ¨osszetett geometriai alak-
zatot milyen egyszer˝ u ´ep´ıt˝ok¨ ovekb˝ ol - geometriai alapelemekb˝ol - ´all´ıthatunk el˝o. Sz´o lesz
m´eg ezen alapelemek megjelen´es´et meghat´aroz´o tulajdons´agok megad´as´ ar´ ol is.
3.1. Geometriai alapelemek megad´asa
A geometriai alapelemeket cs´ ucspontok seg´ıts´eg´evel lehet le´ırni. A cs´ ucspontokat 2, 3 vagy
4 koordin´at´aval lehet megadni, azaz megadhatjuk s´ıkbeli (x, y), t´erbeli (x, y, z) der´eksz¨ og˝ u
Descartes–f´ele koordin´at´akkal, vagy t´erbeli (x, y, z, w) homog´en koordin´at´ akkal. Az
OpenGL a h´aromdimenzi´ os projekt´ıv t´er homog´en koordin´at´aival v´egez minden bels˝o
sz´am´ıt´ast, ez´ert a megadott koordin´at´akat minden esetben t´erbeli projekt´ıv koordin´at´ akk´a
eg´esz´ıti ki az al´abbiak szerint: (x, y) → (x, y, 0., 1.) ; (x, y, z) → (x, y, z, 1.).
Ne feledj¨ uk, hogy amennyiben (x, y, z, w) homog´en koordin´at´ akkal adunk meg egy
pontot, w ,= 0 eset´en (x/w, y/w, z/w) alakban ´all´ıthatjuk el˝o a pont Descartes–f´ele koor-
din´at´ ait! K¨ ul¨ on¨osen ¨ ugyelj¨ unk erre a NURBS g¨orb´ek ´es fel¨ uletek megad´as´ an´al (l´asd a 14.
fejezetet)!
Cs´ ucspontokat a glVertex*() paranccsal adhatunk meg.
void glVertex¦234¦¦sifd¦ (TYPE coords);
void glVertex¦234¦¦sifd¦v (const TYPE *coords);
Geometriai objektumok le´ır´as´ ahoz sz¨ uks´eges cs´ ucspont megad´as´ara szolg´al.
V´alaszt´ ast´ol f¨ ugg˝ oen megadhatjuk 2, 3 vagy 4 koordin´at´aval, melyek t´ıpusa short, in-
teger, float vagy double lehet; tov´abb´ a felsorolhatjuk a koordin´at´akat egyenk´ent, vagy
´atadhatjuk a koordin´at´ akat tartalmaz´o vektor c´ım´et (a m´asodik forma). Ha a z koor-
din´at´ at nem adjuk meg, akkor annak ´ert´eke automatikusan 0. lesz, a meg nem adott w
´ert´eke pedig 1. Ezt a parancsot csak akkor hajtja v´egre a rendszer, ha a glBegin() ´es
glEnd() parancsp´ar k¨oz¨ ott adtuk ki. A TYPE jel¨ol´es azt jelenti, hogy a kiv´alasztott
t´ıpus´ u (eset¨ unkben s, i, f vagy d) v´altoz´ okat, konstansokat vagy c´ımet kell megadni.
A vektor haszn´alata ´altal´ aban hat´ekonyabb, ugyanis gyors´ıtja a param´eterek ´atad´ as´ at.
A m´asik fontos defini´al´o adat a norm´alvektor, vagy r¨oviden norm´alis. A
norm´alvektorokra kit¨olt¨ ott poligonok ig´enyes szeml´eltet´ese sor´an az ´arnyal´ asi, meg-
vil´ag´ıt´asi sz´am´ıt´asokn´ al van sz¨ uks´eg. Egy fel¨ ulet valamely pontj´ aban vett norm´alis´ an azt
9
a vektort ´ertj¨ uk, mely az adott pontban mer˝oleges a fel¨ uletre, azaz a fel¨ ulet ´erint˝ os´ıkj´ ara.
Az s (u, v) param´eteres form´aban adott fel¨ ulet (u
0
, v
0
) pontj´ aban vett norm´alisa a

∂u
s (u
0
, v
0
)

∂v
s (u
0
, v
0
)
vektor, az F (x, y, z) = 0 implicit form´aban adott´e pedig a
_

∂x
F,

∂y
F,

∂z
F
_
.
A fel¨ uletek legelterjedtebb ´abr´ azol´asi m´odja, hogy a fel¨ uletet poligonokkal, t¨obb-
nyire h´aromsz¨ ogekkel k¨ozel´ıtj¨ uk, ´es a k¨ozel´ıt˝o poligonokat jelen´ıtj¨ uk meg valamilyen meg-
vil´ag´ıt´asi rendszer figyelembe v´etel´evel. Annak ´erdek´eben, hogy a k´epen k¨ozel´ıt˝o poli´eder
´elei ne l´atszanak, a cs´ ucsponthoz a pontban tal´alkoz´ o lapok norm´alisainak az ´atlag´ at
rendelj¨ uk norm´alisk´ent. A norm´alisok ir´any´ıt´as´ anak konzisztensnek kell lenni, ´altal´aban
a z´art fel¨ uletb˝ ol kifel´e mutatnak. Az OpenGL-ben csak ir´any´ıthat´o fel¨ uletek kezelhet˝ ok.
Ezeknek a fel¨ uleteknek k´et oldala k¨ ul¨ onb¨oztethet˝ o meg. A norm´alisok ir´any´ıt´ as´at ezeknek
megfelel˝oen kell ´erteni, azaz a norm´alisok a fel¨ uletnek ugyanazon oldal´an legyenek. Ny´ılt
fel¨ ulet eset´en a kifel´e ´es befel´e jelz˝oknek nincs sok ´ertelme, csak az egys´eges t´argyal´ asm´od
´erdek´eben haszn´aljuk.
A rendszer minden ´ ujonnan l´etrehozott cs´ ucsponthoz a kurrens (az utolj´ara megadott)
norm´alist rendeli hozz´a. Az OpenGL-ben minden cs´ ucsponthoz legfeljebb egy norm´alist
rendelhet¨ unk, ´es t¨obb cs´ ucsponthoz is hozz´arendelhetj¨ uk ugyanazt a norm´alist. A kurrens
norm´alist a glNormal*() paranccsal adhatjuk meg.
void glNormal3¦bsifd¦ (TYPE nx, TYPE ny, TYPE nz );
void glNormal3¦bsifd¦v (const TYPE *v);
A kurrens norm´alvektort ´all´ıtja be a param´eterekkel megadott ´ert´ekre. A b, s, i
v´altozat eset´en a rendszer a param´etereket line´arisan lek´epezi a [−1., 1.] intervallumra.
A norm´alisoknak csak az ir´any´ara ´es ir´any´ıt´ as´ara van sz¨ uks´eg, a hosszuk k¨oz¨ omb¨ os. A
megvil´ag´ıt´asi sz´am´ıt´asok sor´an azonban a rendszer azt felt´etelezi, hogy a norm´alvektorok
hossza egys´egnyi (ezek seg´ıts´eg´evel sz´am´ıtja a sz¨ogeket), ez´ert c´elszer˝ u egys´egnyi
hossz´ us´ ag´ u (´ un. normaliz´alt) norm´alvektorokat megadni. Mint l´atni fogjuk, (l´asd az 5.
fejezetet) a geometriai alapelemek, vagyis az ˝oket meghat´aroz´ o cs´ ucspontok ´es norm´alisok
k¨ ul¨ onb¨oz˝ o modelltranszform´aci´okon mennek ´at. Amennyiben a transzform´aci´ ok valame-
lyike nem egybev´ag´ os´ag (pl. sk´al´ az´as), a norm´alvektorok hossza megv´altozhat. Ez´ert ab-
ban az esetben, ha nem egys´egnyi norm´alvektorokat adunk meg, vagy nem egybev´ag´os´ agi
modelltranszform´aci´onak vetj¨ uk al´a alakzatunkat, enged´elyezn¨ unk kell, hogy az OpenGL
automatikusan normaliz´alja a norm´alisokat. Ezt a glEnable(GL NORMALIZE) paran-
ccsal tehetj¨ uk meg. Ha egys´egnyi hossz´ us´ ag´ u norm´alisokat adunk meg, ´es a modellt csak
hasonl´os´ agi transzform´aci´ onak (x, y ´es z ir´anyban azonos m´ert´ek˝ u sk´al´ az´asnak) vetj¨ uk
al´a, akkor a glEnable(GL RESCALE NORMAL) paranccsal c´elszer˝ u enged´elyen¨ unk
a norm´alisok ´ ujrask´ al´ az´as´ at, vagyis azt, hogy a rendszer a n´ez˝opont-modell transz-
form´aci´ ob´ol kisz´am´ıtott konstanssal megszorozza a norm´alisok transzform´altj´ at, hogy
azok ´ ujra egys´egnyi hossz´ uak legyenek. A rendszer alap´ertelmez´esk´ent nem enged´elyezi
10
sem az automatikus normaliz´al´ ast sem az ´ ujrask´ al´az´ ast. Elk´epzelhet˝o, hogy n´emely
OpenGL implement´aci´ oban az automatikus normaliz´al´ as cs¨okkenti a hat´ekonys´ agot, az
´ ujrask´al´ az´as viszont ´altal´ aban hat´ekonyabb, mint az ´altal´ anos normaliz´al´ as.
3.2. Geometriai alapelemek megjelen´ıt´ese
Az OpenGL-ben a cs´ ucspontok seg´ıts´eg´evel pont, szakasz ´es poligon geometriai alap-
elemek rajzolhat´ok. A t´eglalap, mint gyakran el˝ofordul´ o alakzat, rajzol´as´ ara k¨ ul¨on
f¨ uggv´enyt hoztak l´etre, mellyel az (x, y) koordin´atas´ıkban ´atl´oinak v´egpontjaival adott,
koordin´atatengelyekkel p´arhuzamos oldal´ u t´eglalap rajzolhat´o. Ez az egyetlen kiv´etel,
amikor geometriai alapelemet nem cs´ ucspontjaival (nem a glVertex*() paranccsal) ad-
hatunk meg.
void glRect¦sifd¦ (TYPE x1, TYPE y1, TYPE x2, TYPE y2);
void glRect¦sifd¦v (TYPE *v1, TYPE *v2);
Az (x, y) koordin´atas´ıkon az x ´es y tengelyekkel p´arhuzamos oldal´ u t´eglalapot rajzol,
mely egyik ´atl´ oj´anak v´egpontjai (x1,y1) ´es (x2,y2), illetve vektoros megad´as eset´en a v1
´es v2 vektorok tartalmazz´ak a v´egpontok koordin´at´ait.
A pont ´es az egyenes szakasz alapelemek a geometri´aban megszokottakat jelentik, azzal
a k¨ ul¨ onbs´eggel, hogy a megrajzol´as sor´an term´eszetesen mindkett˝ onek van kiterjed´ese,
illetve vastags´ aga, amit be´all´ıthatunk. A sz´am´ıt´og´epi grafik´aban a g¨orb´eket t¨obbnyire
egyenes szakaszokkal k¨ozel´ıtj¨ uk, azaz a g¨orb´ebe ´ırt t¨or¨ottvonallal.
Az OpenGL poligonon z´art t¨or¨ottvonal ´altal hat´arolt ter¨ uletet ´ert, amit t¨obbnyire a
ter¨ ulet kifest´es´evel jelen´ıt meg, b´ar m´as lehet˝os´egek is vannak. Az OpenGL csak kon-
vex s´ıkbeli poligonokat tud helyesen megjelen´ıteni, vagyis konk´ av, nem egyszeresen ¨oss-
zef¨ ugg˝ o, vagy nem egyszer˝ u poligonok megrajzol´as´ aval gondok lehetnek m´eg akkor is, ha
azok s´ıkbeliek.
Egy s´ıktartom´any egyszeresen ¨osszef¨ ugg˝ o, ha a benne fekv˝o b´armely z´art s´ıkg¨ orbe egy
pontra h´ uzhat´ o ¨ossze ´ ugy, hogy k¨ozben mindig a tartom´anyban marad. Szeml´eletesen
azt mondhatjuk, hogy az egyszeresen ¨osszef¨ ugg˝ o s´ıktartom´anyban nem lehetnek lyukak.
A 3.1. ´abr´an nem egyszeresen ¨osszef¨ ugg˝ o alakzatot l´athatunk.
Egy soksz¨oget egyszer˝ unek nevez¨ unk, ha valamennyi cs´ ucsa k¨ ul¨ onb¨oz˝ o, egyik cs´ ucs
sem bels˝o pontja a soksz¨og valamely oldal´anak, ´es az oldalak nem metszik egym´ast bels˝o
pontban. A 3.2. ´abr´ an p´eld´ akat l´athatunk nem egyszer˝ u soksz¨ogekre.
Ezekre a megszor´ıt´ asokra c´elszer˝ u odafigyelni, ugyanis b´armilyen poligont megadha-
tunk cs´ ucspontjaik felsorol´as´aval, a rendszer nem v´egez ´erv´enyess´egi vizsg´alatokat, ez´ert
csak a nem v´art eredm´eny figyelmeztet benn¨ unket arra, hogy a megadott poligont nem
tudja kezelni a rendszer. Ilyen nem v´art eredm´eny lehet egy konk´ av poligon eset´en a
poligon konvex burk´anak megjelen´ese.
Ponthalmaz konvex burk´an a halmazt tartalmaz´o konvex ponthalmazok metszet´et
´ertj¨ uk. S´ıkbeli v´eges ponthalmaz konvex burka konvex poligon ´altal hat´arolt s´ıktartom´any.
Ezt illusztr´alja a 3.3. ´abra.
Nagyon fontos megszor´ıt´ as, hogy csak s´ıkbeli (nem csak koordin´atas´ıkbeli) poligont
tud a rendszer helyesen megjelen´ıteni. M´ar egy nem s´ıkbeli egyszer˝ u n´egysz¨ og eset´en
11
3.1. ´abra. Poligonok ´altal hat´arolt nem egyszeresen ¨osszef¨ ugg˝ o s´ıktartom´ any
3.2. ´abra. Nem egyszer˝ u soksz¨ogek
is el˝ofordulhat, hogy a k¨ ul¨onb¨ oz˝ o transzform´aci´ok k¨ovetkezt´eben a n´egysz¨og k´epe nem
egyszer˝ u n´egysz¨ og lesz, pl. a szemk¨ozti oldalak metszik egym´ast. A 3.4. ´abr´an ilyen
csokornyakkend˝ o szer˝ u alakzatot l´atunk ´eleivel ´abr´ azolva, illetve kit¨oltve. Az ut´obbin
j´ol ´erz´ekelhet˝o a probl´ema. Ez s´ıkbeli konvex, egyszeresen ¨osszef¨ ugg˝o poligonnal nem
fordulhat el˝o. Ez´ert abban az esetben, ha g¨orb¨ ult fel¨ uleteket k¨ozel´ıt¨ unk poligonokkal,
c´elszer˝ u h´aromsz¨ogeket alkalmaznunk.
Az OpenGL-ben a geometriai alapelemeket a glBegin() ´es glEnd() parancsok k¨oz¨ ott
felsorolt cs´ ucspontokkal hozhatunk l´etre. A glBegin() param´eter´evel azt adjuk meg, hogy
a felsorolt cs´ ucspontokat milyen geometriai alapelemk´ent kell ´ertelmezni.
void glBegin (GLenum mode);
A mode t´ıpus´ u geometriai alapelemet le´ır´ o cs´ ucspontok list´aj´ anak kezdet´et jel¨oli. A
mode param´eter lehets´eges ´ert´ekeit a 3.1. t´abl´ azat tartalmazza.
void glEnd ();
Geometriai alapelemeket le´ır´ o cs´ ucspontok list´aj´anak v´eg´et jel¨oli.
12
3.3. ´abra. Konvex burok
3.4. ´abra. Nem komplan´ aris cs´ ucspont´ u n´egysz¨ og vet¨ uletei; a bal oldali ´abr´ an az ´eleivel,
a jobb oldalin mindk´et oldal´at kifestve ´abr´ azolva
Az al´abbiakban a glBegin() param´eter´enek r´eszletes le´ır´ asa k¨ovetkezik. A le´ır´ as sor´an
azt felt´etelezz¨ uk, hogy n cs´ ucspont adott, ´es ezekre a v
0
, v
1
, . . . , v
n−1
jel¨ol´essel hivatko-
zunk. A geometriai alapelemeket szeml´elteti 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 egym´ast k¨ovet˝ o p´aros ´es
p´aratlan index˝ u cs´ ucspontokat, szakasszal k¨oti ¨ossze. Ha n p´aratlan, akkor az utols´o
pontot figyelmen k´ıv¨ ul hagyja.
GL LINE STRIP A cs´ ucspontokat megad´asuk sorrendj´eben egyenes szakaszokkal k¨oti
¨ossze a rendszer, azaz egy n − 1 oldal´ u t¨or¨ottvonalat rajzol. n < 2 eset´en nem t¨ort´enik
semmi.
GL LINE LOOP A cs´ ucspontokat megad´asuk sorrendj´eben egyenes szakaszokkal k¨oti
¨ossze a rendszer, majd a v´egpontot ¨osszek¨oti a kezd˝ oponttal, vagyis a v
n−1
, v
0
szakaszt
is megrajzolja. Ez ut´obbi az egyetlen elt´er´es a GL LINE STRIP opci´o hat´as´at´ ol. Teh´at
egy n oldal´ u z´art t¨or¨ottvonalat rajzol, n < 2 eset´en nem t¨ort´enik semmi.
GL POLYGON A cs´ ucspontok ´altal meghat´arozott poligont rajzolja meg. n < 3
eset´en nem rajzol semmit. Ha a poligon nem egyszer˝ u vagy nem konvex, az eredm´eny
meghat´arozatlan.
GL TRIANGLES Egym´ashoz nem kapcsol´od´ o h´aromsz¨ ogeket rajzol a
v
0
, v
1
, v
2
; v
3
, v
4
, v
5
; . . . cs´ ucspontok alapj´an. Ha n nem h´arom t¨obbsz¨ or¨ose, akkor
a fennmarad´o egy, vagy k´et cs´ ucspontot figyelmen k´ıv¨ ul hagyja a rendszer.
13
3.5. ´abra. Az OpenGL geometriai k´epelemei
14
3.1. t´abl´azat. Az OpenGL geometriai alapelemei
´ert´ek jelent´ese
GL POINTS egyedi pontok
GL LINES az egym´ast k¨ovet˝ o cs´ ucspontp´ arokat egyedi sza-
kaszk´ent ´ertelmezi a rendszer
GL POLYGON egyszer˝ u, konvex poligon hat´ara
GL TRIANGLES az egym´ast k¨ovet˝ o cs´ ucsponth´ armasokat
h´aromsz¨ ogk´ent ´ertelmezi a rendszer
GL QUADS az egym´ast k¨ovet˝ o cs´ ucspontn´egyeseket
n´egysz¨ ogk´ent ´ertelmezi a rendszer
GL LINE STRIP t¨or¨ ottvonal
GL LINE LOOP z´art t¨or¨ottvonal, azaz az utols´o cs´ ucspontot az
els˝ovel ¨osszek¨ oti
GL TRIANGLE STRIP egym´ashoz kapcsol´od´o h´aromsz¨ ogekb˝ ol ´all´o szalag
GL TRIANGLE FAN legyez˝oszer˝ uen egym´ashoz kapcsol´od´o
h´aromsz¨ ogek
GL QUAD STRIP egym´ashoz kapcsol´od´ o n´egysz¨ ogekb˝ol ´all´o szalag
GL TRIANGLE STRIP Egym´ashoz kapcsol´od´ o h´aromsz¨ogeket (h´aromsz¨ ogekb˝ol ´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
; . . . (l´asd a 3.5. ´abr´at)
cs´ ucspontok felhaszn´al´ as´ aval. A cs´ ucspontok sorrendje biztos´ıtja, hogy a h´aromsz¨ ogek
ir´any´ıt´asa megegyez˝o legyen, vagyis az ´ıgy l´etrehozott szalag egy fel¨ uletdarab korrekt
le´ır´ as´at adja. Ha n < 3 nem rajzol semmit.
GL QUADS Egym´ashoz nem kapcsol´od´o n´egysz¨ogeket rajzol a rendszer a
v
0
, v
1
, v
2
, v
3
; v
4
, v
5
, v
6
, v
7
; . . . cs´ ucspontok alapj´an. Ha n nem t¨obbsz¨ or¨ose n´egynek, akkor
a fennmarad´o cs´ ucspontokat figyelmen k´ıv¨ ul hagyja a rendszer.
GL QUAD STRIP Egym´ashoz kapcsol´od´ o n´egysz¨ogeket (n´egysz¨ogekb˝ ol ´all´o szalagot)
rajzol a rendszer a v
0
, v
1
, v
3
, v
2
; v
2
, v
3
, v
5
, v
4
; . . . (l´asd a 3.5. ´abr´ at) cs´ ucspontok fel-
haszn´al´ as´aval. A cs´ ucspontok sorrendje biztos´ıtja, hogy a n´egysz¨ ogek ir´any´ıt´asa meg-
egyez˝o legyen, vagyis az ´ıgy l´etrehozott szalag egy fel¨ uletdarab korrekt le´ır´as´ at adja. Ha
n < 4 nem rajzol semmit, ha pedig n p´aratlan, akkor az utols´o pontot figyelmen k´ıv¨ ul
hagyja.
GL TRIANGLE FAN A GL TRIANGLE STRIP opci´ohoz hasonl´o, az egyetlen elt´er´es
a cs´ ucspontok figyelembe v´etel´enek sorrendj´eben van, most a v
0
, v
1
, v
2
; v
0
, v
2
, v
3
; . . . (l´asd
a 3.5. ´abr´at) a sorrend.
A glBegin() ´es glEnd() z´ar´ojelp´ ar k¨oz¨ ott a cs´ ucspontok megad´as´ an k´ıv¨ ul m´as
OpenGL parancsok is kiadhat´ok, mint pl. sz´ın, norm´alis vagy text´ ura megad´asa. A
kiadhat´o parancsok teljes list´aj´ at a 3.2. t´abl´azat tartalmazza.
Ezeken k´ıv¨ ul b´armely m´as OpenGL parancs kiad´asa hib´at eredm´enyez. Ez a megs-
zor´ıt´ as csak az OpenGL parancsokra vonatkozik, nem k¨oti meg a kez¨ unket a programoz´asi
nyelv vez´erl´esi szerkezeteinek, utas´ıt´ asainak tekintet´eben, vagyis tetsz˝oleges vez´erl´esi szer-
kezetek (ciklusok, felt´eteles kifejez´esek) vagy f¨ uggv´enyh´ıv´ asok szerepelhetnek, felt´eve,
hogy a h´ıvott f¨ uggv´enyek is csak megengedett OpenGL parancsokat tartalmaznak.
15
3.2. t´abl´azat. A glBegin() ´es glEnd() k¨oz¨ ott kiadhat´o OpenGL parancsok
parancs hat´asa
glVertex*() cs´ ucspont-koordin´at´ak megad´asa
glColor*() a kurrens sz´ın megad´asa
glIndex*() a kurrens sz´ınindex megad´asa
glNormal*() norm´alvektor-koordin´at´ ak megad´asa
glEvalCoord*() koordin´at´ ak l´etrehoz´ asa
glCallList(), glCallLists() display-lista(´ak) v´egrehajt´asa
glTexCoord*() text´ ura-koordin´at´ak megad´asa
glEdgeFlag*() a hat´arol´o ´elek megjel¨ol´ese
glMaterial*() anyagtulajdons´ag megad´asa
A glVertex*() parancsnak csak akkor van hat´asa, ha glBegin(), glEnd() z´ar´ojelp´ ar
k¨oz¨ ott jelenik meg. Ez vonatkozik a display-list´ an t´arolt glVertex*() parancsokra is,
teh´at akkor lehet b´armilyen hat´asuk, ha a list´at egy glBegin(), glEnd() z´ar´ ojelp´ ar k¨oz¨ ott
hajtjuk v´egre.
A glVertex*() parancs megh´ıv´as´ aval l´etrehozott cs´ ucsponthoz a rendszer hozz´arendeli
a cs´ ucsponthoz kapcsolt attrib´ utumok kurrens ´ert´ek´et, ´ıgy a kurrens sz´ınt, norm´alist ´es
text´ urakoordin´at´at.
3.3. A geometriai alapelemek megjelen´es´et be-
foly´asol´o t´enyez˝ ok
Ha m´ask´ent nem rendelkez¨ unk, akkor a pont k´epe egyetlen pixel lesz a k´eperny˝ on, a
szakasz egy folytonos, egy pixel sz´eless´eg˝ u pixelsor, a poligon pedig kit¨olt¨ ott (kifestett)
lesz. A geometriai alapelemek megjelen´es´enek m´odja term´eszetesen befoly´asolhat´o a fel-
haszn´al´ o ´altal.
3.3.1. Pont
void glPointSize (GLfloat size);
Ezzel a paranccsal a pontot reprezent´al´ o pixelt¨omb m´eret´et lehet megadni a size pa-
ram´eterrel. A megadott m´eretnek 0.-n´al nagyobbnak kell lennie, az alap´ertelmez´es 1.
Ha az antialiasing (kisim´ıt´ as) nem enged´elyezett – ami az alap´ertelmez´es –, a rend-
szer a megadott float ´ert´eket eg´eszre kerek´ıti ´es ennek megfelel˝o (size x size) m´eret˝ u
pixelt¨ombbel ´abr´ azolja a pontot. Ha az antialiasing enged´elyezett, a rendszer nem ke-
rek´ıti a megadott ´ert´eket, ´es egy size ´atm´er˝oj˝ u k¨or alak´ u pixelcsoporttal szeml´elteti a
pontot. Ezt szeml´elteti a 3.6. ´abra.
A GL POINT SIZE RANGE param´eterrel kiadott glGetFloatv() paranccsal
lek´erdezhetj¨ uk, hogy az OpenGL ´altalunk haszn´alt implement´ aci´oj´ aban mekkora lehet
16
3.6. ´abra. Pontok szeml´eltet´ese; a bal oldali k´epen a sim´ıt´ as nem enged´elyezett, a jobb
oldali enged´elyezett
a pont maxim´alis m´erete. A pont sz´ıne a pont hely´et meghat´aroz´ o glVertex*() parancs
kiad´asakor ´erv´enyben l´ev˝ o sz´ın lesz.
3.3.2. Szakasz
Szakasz eset´en lehet˝os´eg¨ unk van a szakasz sz´ın´enek, vonalvastags´ag´ anak ´es vonalt´ıpus´anak
el˝o´ır´as´ ara. A szakasz sz´ın´et k´et t´enyez˝o befoly´asolja: az ´erv´enyben l´ev˝o ´arnyal´asi modell
´es a szakasz v´egpontjainak megad´asakor kurrens sz´ın. Ezt b˝ovebben a sz´ın megad´as´aval
foglalkoz´o 4. fejezet tartalmazza.
A vonalvastags´ag megad´asa
void glLineWidth (GLfloat width);
A vonal vastags´ ag´ anak pixelekben m´ert ´ert´ek´et ´all´ıtja be, width ≥ 0., alap´ertelmez´es 1.
A t´enyleges vonalvastags´ag f¨ ugg m´eg att´ol is, hogy az antialiasing enged´elyezett vagy sem.
Ha az antialiasing nem enged´elyezett, akkor a rendszer a width ´ert´eket eg´eszre kerek´ıti,
vagyis a vastags´ ag 1, 2, . . . pixel lehet. Ilyen esetben a k´eperny˝ on a vonalvastags´ agot azon-
ban nem a szakaszra mer˝olegesen m´erj¨ uk, hanem az x, illetve y tengelyek ir´any´ aban, att´ol
f¨ ugg˝ oen, hogy az egyenes ir´anytangense (az x tengellyel bez´art sz¨og´enek tangense) 1-n´el
nagyobb vagy kisebb. Ha az alakzatok hat´ar´ anak kisim´ıt´ asa (antialiasing) enged´elyezett,
a rendszer nem kerek´ıti a vonalvastags´agot, hanem kit¨olt¨ ott t´eglalapk´ent jelen´ıti meg a
szakaszt. A GL LINE WIDTH RANGE param´eterrel kiadott glGetFloatv() paranccsal
lek´erdezhetj¨ uk az OpenGL implement´ aci´onkban haszn´alhat´o maxim´alis vonalvastags´ agot.
Ne feledj¨ uk, hogy az ´altalunk l´atott szakasz t´enyleges vastags´ aga a k´eperny˝ o pixel´enek
fizikai m´eret´et˝ol is f¨ ugg! M´eg nagyobb lehet az elt´er´es, ha ugyanazt a vonalvastags´ agot
(pl. 1 pixel) haszn´aljuk grafikus display-n ´es nagyfelbont´as´ u tintasugaras plotteren vagy
17
l´ezernyomtat´on. Az ut´obbiakon az 1 pixelnek megfelel˝o 1 dot sz´eless´eg˝ u szakasz alig lesz
l´athat´ o.
A vonalt´ıpus megad´asa
A vonalt´ıpus v´altoztat´ as´ ahoz el˝obb enged´elyezn¨ unk kell a vonalt´ıpus v´altoztat´ast (a vonal
mint´az´ as´at) a glEnable(GL LINE STIPPLE) paranccsal, majd a glLineStipple*() pa-
ranccsal meg kell adni a vonalt´ıpus mint´aj´ at, amit a rendszer egy ´allapotv´altoz´ oban t´arol.
A vonalt´ıpus v´altoztat´ as´ at a glDisable(GL LINE STIPPLE) paranccsal tilthatjuk le,
ennek kiad´asa ut´an a vonalt´ıpus az alap´ertelmez´es, azaz folytonos lesz.
void glLineStipple (GLint factor,GLushort pattern);
A vonalt´ıpus mint´aj´ anak megad´as´ara szolg´al. A pattern param´eterrel azt a mint´ at
´ırhatjuk le 16 biten, amit a rendszer ism´etel a szakaszok rajzol´asakor. A mint´ aval pixelsort
´ırunk le, 1 a rajzolnak, 0 a nem rajzolnak felel meg. A factor param´eterrel a minta
nagy´ıt´ as´at (az intervallumok ny´ ujt´ as´ at) ´ırhatjuk el˝o. A factor ´ert´ek´et a rendszer az [1, 255]
intervallumra lev´agja.
3.7. ´abra. A vonalminta ism´etl´ese
Ha egym´ashoz kapcsol´od´o szakaszokat, azaz t¨or¨ottvonalat (GL LINE STRIP,
GL LINE LOOP) rajzolunk, akkor a cs´ ucspontokn´ al a m´ar megkezdett mintaelem fo-
lytat´odik, m´ıg egyedi szakaszok rajzol´as´an´ al (GL LINES) minden cs´ ucspontn´ al az els˝o
mintaelemmel kezd˝odik a rajzol´as (l´asd a 3.7. ´abr´ at).
3.3.3. Poligon
A poligon alapelem megjelenhet egy kit¨olt¨ ott s´ıkidomk´ent, a hat´ar´ at reprezent´ al´o z´art
t¨or¨ ottvonalk´ent vagy a cs´ ucspontjait jel¨ol˝ o pontsorozatk´ent is. A rendszer minden poli-
gonnak megk¨ ul¨ onb¨oztet el¨ uls˝o ´es h´ats´ o oldal´at. A k¨ ul¨onb¨oz˝ o oldalak k¨ ul¨ onb¨oz˝ o m´odon
jelen´ıthet˝ ok meg. Alaphelyzetben a rendszer mindk´et oldalt azonos m´odon jelen´ıti meg.
A fenti param´etereket a glPolygonMode() paranccsal ´all´ıthatjuk be.
18
void glPolygonMode (GLenum face, GLenum mode);
A poligonok el¨ uls˝ o ´es h´ats´ o oldal´anak megjelen´ıt´esi m´odj´ at ´all´ıtja be. A face param´eter
´ert´eke GL FRONT AND BACK, GL FRONT vagy GL BACK lehet. A mode ´ert´eke
pedig GL POINT, GL LINE vagy GL FILL, mely azt jelzi, hogy a poligonnak csak a
cs´ ucspontjait kell megrajzolni, a hat´ar´at kell megrajzolni vagy a belsej´et ki kell t¨olteni.
Ha m´ask´ent nem rendelkez¨ unk, akkor mindk´et oldalt kit¨oltve jelen´ıti meg a rendszer.
Az el¨ uls˝ o ´es h´ats´ o oldal ´ertelmez´es´evel r´eszletesebben kell foglalkoznunk. Minden
ir´any´ıthat´o fel¨ ulet (a gyakorlatban haszn´alt fel¨ uletek t´ ulnyom´ o t¨obbs´ege – pl. g¨omb, k´ up,
henger, t´orusz – ilyen, de pl. a Klein–f´ele palack vagy a M¨obius szalag nem) k¨ozel´ıthet˝o
konzisztens ir´any´ıt´ as´ u poligonokkal (poligonh´al´ oval). Teh´at a k¨ozel´ıt˝o poligonok min-
degyike vagy pozit´ıv (az ´oramutat´o j´ar´ as´ aval ellent´etes) vagy negat´ıv (az ´oramutat´ o
j´ar´ as´aval egyez˝o) k¨or¨ ulj´ ar´ asi ir´any´ u a fel¨ uletnek ugyanarr´ol az oldal´ar´ol n´ezve. A
glFrontFace() parancs seg´ıts´eg´evel be´all´ıthatjuk, hogy a pozit´ıv vagy negat´ıv ir´any´ıt´ ast
kell el¨ uls˝o – fel´enk n´ez˝ o – oldalnak tekinteni.
void glFrontFace (GLenum mode);
A mode param´eter GL CCW ´ert´eke eset´en a poligon akkor tekintend˝ o fel´enk n´ez˝onek,
ha vet¨ ulet´enek k¨or¨ ulj´ ar´asi ir´anya pozit´ıv, GL CW eset´en pedig, ha negat´ıv. Az
alap´ertelmez´es GL CCW. Azt, hogy a k´eps´ıkon (k´eperny˝ on) egy poligonnak az el¨ uls˝o
vagy h´ats´o oldala l´atszik a fenti be´all´ıt´as ´es a poligon k´ep´enek k¨or¨ ulj´ar´ asi ir´anya hat´arozza
meg. A poligon vet¨ ulet´enek k¨or¨ ulj´ar´ asi ir´any´ at a rendszer a poligon el˝ojeles ter¨ ulet´evel
hat´arozza meg. A k´eps´ıkra illeszked˝ o p
0
, p
1
, . . . , p
n
cs´ ucspont´ u poligon el˝ojeles 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 szorzat´anak
harmadik komponense) ´es p
n+1
= p
0
, vagyis az ¨osszeg tagjai az orig´o ´es a poligon oldalai
´altal meghat´arozott h´aromsz¨ogek el˝ojeles ter¨ uletei. Ezek alapj´an a 3.3. t´abl´ azat szerint
d¨onthetj¨ uk el, hogy melyik oldal´at l´atjuk a poligonnak.
3.3. t´abl´ azat. A poligonok l´athat´ o oldal´anak meghat´aroz´ asa
T > 0 T < 0
GL CCW el¨ uls˝ o h´ats´ o
GL CW h´ats´ o el¨ uls˝ o
Ennek a probl´em´ anak van sokkal szeml´eletesebb, t´erbeli megk¨ozel´ıt´ese is. Mint a
norm´alisok megad´as´ an´al m´ar sz´oltunk r´ola, a fel¨ uleteket le´ır´ o poligonok cs´ ucspontjaiban
a norm´alisokat konzisztens m´odon kell megadni: a norm´alisok a fel¨ ulet ugyanazon oldal´an
legyenek. A poligonok ´es norm´alisok ir´any´ıt´as´ at ¨ossze kell hangolni. Pozit´ıv ir´any´ıt´as´ u po-
ligonok norm´alisa kifel´e mutat, a negat´ıv´e befel´e. Ezeket a poligonokat a t´er egy pontj´ ab´ ol
n´ezz¨ uk, ´es vizsg´aljuk, hogy a poligonok mely oldal´at l´atjuk (felt´etelezz¨ uk, hogy az egyes
19
poligonok s´ıkbeliek). Egy poligon tetsz˝oleges pontj´ab´ ol a n´ez˝ opontba mutat´ o vektor ´es
a poligon norm´alisa ´altal bez´art α sz¨og alapj´an eld¨onthet˝o, hogy a poligon mely oldal´at
l´atjuk. Ha α < π/2, akkor azt az oldal´at amerre a norm´alis mutat – ekkor azt mondjuk,
hogy a poligon fel´enk n´ez –, α = π/2 eset´en a poligon ´elben l´atszik (a k´epe szakasz lesz),
ha pedig α > π/2, akkor a norm´alis ´altal megjel¨olttel ellent´etes oldal´at l´atjuk, ´es azt
mondjuk, hogy a poligon h´ats´o oldala l´atszik. Nem kell term´eszetesen mag´at a sz¨oget
meghat´arozni, ugyanis n-el jel¨olve a norm´alvektort, s-el a n´ez˝ opontba mutat´o vektort
cos α =
n s
[n[ [s[
,
teh´at csak ennek az el˝ojel´et kell vizsg´alni. A 3.8. ´abr´ an egy has´abon szeml´eltetj¨ uk ezt a
vizsg´alatot. Az ´abra szerinti n
1
s
1
> 0, vagyis a lap fel´enk n´ez˝o; n
2
s
2
< 0, vagyis a lap
h´ats´ o oldal´at l´atjuk; n
3
s
3
= 0, vagyis a lap ´elben l´atszik.
3.8. ´abra. Fel´enk n´ez˝o ´es h´ats´o poligonok ´ertelmez´ese
3.3.4. Poligonok elhagy´asa
Konzisztens ir´any´ıt´as´ u poligonokkal le´ırt z´art fel¨ uletek (pl. egy g¨omb¨ ot k¨ozel´ıt˝ o poli´eder)
eset´en a nem fel´enk n´ez˝o poligonokat nem l´athatjuk. Ez´ert a feldolgoz´as gyors´ıt´ asa
´erdek´eben az ilyen poligonokat c´elszer˝ u elhagyni m´eg a k´eps´ıkra vet´ıt´es el˝ott, mivel ezek
k´epe nem lesz r´esze a v´egs˝ o k´epnek, hiszen m´as poligonok eltakarj´ak. Ennek ´erdek´eben
enged´elyezni kell a poligonok elhagy´as´ at a glEnable(GL CULL FACE) paranccsal, ´es
meg kell mondanunk, hogy milyen helyzet˝ u poligonokat akarunk elhagyni. Ez ut´obbit a
glCullFace() paranccsal tehetj¨ uk meg.
void glCullFace (GLenum mode);
Seg´ıts´eg´evel be´all´ıthatjuk, hogy milyen helyzet˝ u poligonok hagyhat´ok el m´eg a
k´eperny˝ o-koordin´at´ akra val´o transzform´al´as el˝ott, felt´etelezve, hogy a poligonok elhagy´asa
20
enged´elyezett. A mode param´eter GL BACK ´ert´eke eset´en azokat, amelyeknek a h´ats´ o
oldal´at l´atjuk; GL FRONT eset´en a fel´enk n´ez˝ o oldal´ uakat; GL FRONT AND BACK
eset´en pedig minden poligont.
Ny´ılt fel¨ ulet eset´en a poligonok elhagy´asa helytelen eredm´enyre vezethet, miut´an ilyen-
kor a fel¨ ulet mindk´et oldal´at l´athatjuk – n´emely poligonnak az el¨ uls˝ o oldal´at, m´asoknak a
h´ats´ o oldal´at –, ez´ert a h´ats´ o oldalukat mutat´ o poligonok elhagy´asa eset´en a fel¨ ulet k´ep´en
lyukak keletkezhetnek. Teh´ at ny´ılt fel¨ uletek eset´en ne haszn´aljuk ezt a funkci´ot!
Z´art fel¨ ulet eset´en is csak akkor eredm´enyez korrekt, l´athat´os´ ag szerinti k´epet, ha
egyetlen konvex poli´edert ´abr´ azolunk. T¨obb, egym´ast legal´abb r´eszben takar´o poli´eder,
vagy ak´ar csak egyetlen konk´av poli´eder eset´en az algoritmus alkalmaz´ asa ut´an is ma-
radhatnak nem l´athat´o, fel´enk n´ez˝ o lapok. Ilyen a 3.8. ´abr´ an az n
4
norm´alis´ u lap. Z´art
fel¨ ulet eset´en azonban c´elszer˝ u ezt a funkci´ ot aktiviz´alni, ugyanis ez a vizsg´alat gyors,
ez´ert j´o el˝osz˝ ur˝ oje a lapoknak l´athat´os´ agi vizsg´alatokhoz, ami az OpenGL eset´en a z-
puffer algoritmus.
3.3.5. Kit¨olt´es mint´aval
Ha m´ask´epp nem rendelkez¨ unk, a rendszer a poligonok belsej´et az ´erv´enyben l´ev˝o ´arnyal´asi
modellnek (l´asd a 4.2. szakaszt) megfelel˝oen kisz´ınezi. Lehet˝os´eg van azonban arra is,
hogy a poligonokat az ablak koordin´ata-rendszer´ehez kapcsolt 32 32-es bitt¨ombbel me-
gadott mint´aval t¨olts¨ uk ki. (Ez nem t´evesztend˝ o ¨ossze a text´ ur´aval, ezt a mint´ at ugyanis
a vet¨ uletre teszi a rendszer, nem pedig a t´erbeli modellre!) Ehhez enged´elyezni kell a po-
ligon mint´ aval val´ o kit¨olt´es´et a glEnable(GL POLIGON STIPPLE) paranccsal ´es meg
kell adni a mint´at.
void glPolygonStipple (const GLubyte *mask);
Poligonkit¨ olt´esi mint´at lehet vele megadni. A mask param´eter a kit¨olt´esi mint´ at pi-
xelenk´ent le´ır´ o 32 32-es bitt¨omb c´ıme. A t¨ombben az 1 a rajzol´ast, a 0 a nem raj-
zol´ast jelenti. Ezen parancs v´egrehajt´as´ ara a glPixelStore*(GL UNPACK*) paranccsal
be´all´ıtott m´od is hat´assal van. A poligonok k¨ ul¨onb¨ oz˝ o megjelen´esi m´odjait szeml´elteti
a 3.9. ´abra.
3.3.6. Poligon hat´arol´ o ´eleinek megjel¨ol´ese
Az OpenGL csak konvex poligonokat tud helyesen megrajzolni, a gyakorlatban viszont
nem sz´am´ıt kuri´ozumnak a konk´av poligon. Ezeket ´ ugy tudjuk a siker rem´eny´eben
´abr´ azolni, hogy ´ uj oldalak hozz´aad´ as´aval konvex poligonokra, t¨obbnyire h´aromsz¨ogekre,
bontjuk. Ha az ´ıgy felbontott poligont GL LINE m´odban ´abr´azoljuk, a felbont´ashoz be-
vezetett ´ uj ´elek is megjelennek, holott mi csak a poligon hat´ar´ at szeretn´enk l´atni. Ezen
probl´ema kik¨ usz¨ob¨ ol´ese ´erdek´eben az OpenGL a poligonok cs´ ucspontjaihoz egy bitben
t´arolja, hogy a cs´ ucspontot k¨ovet˝o ´el hat´arol´ o ´el vagy sem. Ezt a jelz˝ot a glBegin() ´es
glEnd() parancsok k¨oz¨ott, a cs´ ucspontokat le´ır´ o glVertex*() parancs kiad´asa el˝ott lehet
be´all´ıtani a glEdgeFlag() paranccsal.
21
3.9. ´abra. Poligon k¨ ul¨onb¨ oz˝ o megjelen´ıt´ese
22
void glEdgeFlag (GLboolean flag);
void glEdgeFlagv (const GLboolean *flag);
Seg´ıts´eg´evel be´all´ıthatjuk, hogy a k¨ovetkez˝o cs´ ucspont egy hat´arol´ o ´el kezd˝ opontja,
vagy sem. A flag param´eter GL TRUE ´ert´ek´evel azt jelezz¨ uk, hogy hat´arol´o ´el lesz, a
GL FALSE ´ert´ekkel pedig azt, hogy nem. Az alap´ertelmez´es GL TRUE. Ezt a be´all´ıt´ast
nem kell minden cs´ ucspont l´etrehoz´asa el˝ott elv´egezn¨ unk, mert a rendszer mindig a jelz˝o
kurrens ´ert´eket rendeli az ´ ujonnan l´etrehozott cs´ ucsponthoz.
Ennek a parancsnak csak egyedi poligon, h´aromsz¨ og ´es n´egysz¨og (GL POLYGON,
GL TRIANGLES, GL QUADS) rajzol´asa eset´en van hat´asa, h´aromsz¨og- ´es n´egysz¨ ogsor
(GL TRIANGLE STRIP, GL QUAD STRIP, GL TRIANGLE FAN) eset´en nincs.
23
4. fejezet
Sz´ın, ´arnyal´as
A sz´ıneket legc´elszer˝ ubb egy h´aromdimenzi´ os t´er pontjaik´ent felfogni. A t´er egy b´azis´ anak
(koordin´ata-rendszer´enek) r¨ogz´ıt´ese ut´an minden sz´ınt egy sz´amh´ armas seg´ıts´eg´evel lehet
azonos´ıtani. A sz´am´ıt´og´epi grafik´aban k´et sz´ınmegad´ asi (sz´ınkever´esi) m´od, k´etf´ele b´azis
terjedt el. Az egyik a sz´ınes grafikus display-n´el haszn´alt addit´ıv (hozz´aad´ o) sz´ınkever´es,
a m´asik a sz´ınes nyomtat´okn´ al haszn´at szubtrakt´ıv (kivon´ o).
Addit´ıv sz´ınkever´es eset´en azt ´ırjuk el˝o, hogy mennyi v¨or¨ os (Red), z¨old (Green) ´es
k´ek (Blue) sz´ınkomponenst adjunk a fekete sz´ınhez, a fekete k´eperny˝ oh¨oz. A sz´ınteret az
egys´egkock´ aval szeml´eltetj¨ uk, mivel a sz´ınkomponensek ´ert´eke ´altal´aban a [0., 1.] interval-
lumon v´altoztathat´o a k¨ ul¨onb¨ oz˝ o grafikus rendszerekben, bele´ertve az OpenGL-t is. Ezt a
sz´ınel˝ o´all´ıt´asi m´odot RGB sz´ınrendszernek szok´as nevezni. A (0., 0., 0.) sz´amh´ armas a fe-
kete, az (1., 1., 1.) a feh´er sz´ınnek, a leg¨osszetettebb sz´ınnek, felel meg (l´asd a 4.1. ´abr´ at).
A sz´ınes raszteres grafikus display-k m˝ uk¨ od´ese ezzel ¨osszhangban van, hiszen a k´eperny˝ o
minden egyes pixele k¨ ul¨ onb¨oz˝ o intenzit´ as´ u v¨or¨os, z¨old ´es k´ek sz´ınt tud kibocs´atani. Az
RGB sz´ınmegad´ as az emberi szem m˝ uk¨od´es´evel is ¨osszhangban van. Az emberi szem
retin´aj´ aban a vil´agoss´agl´ at´ast lehet˝ov´e tev˝o ´erz´ekel˝ o sejtek, az un. p´alcik´ ak, tov´ abb´a a
sz´ınl´ at´ast lehet˝ov´e tev˝o ´erz´ekel˝ o sejtek, az un. csapok tal´alhat´ ok. A csapok h´arom fajt´aja
k¨ ul¨ onb¨oztethet˝ o meg aszerint, hogy milyen hull´amhossz´ u f´eny ingerli ˝oket legink´abb. Ez
a h´arom hull´ amhossz ´eppen a v¨or¨os, z¨old ´es k´ek sz´ın´e, vagyis leegyszer˝ us´ıtve azt mond-
hatjuk, hogy az emberi szemben RGB ´erz´ekel˝ ok vannak, ´es a k¨ ul¨ onb¨ oz˝o ar´anyban ´erz´ekelt
sz´ınkomponensek ¨osszegz´ese ´ utj´ an ´all el˝o az ´altalunk l´atott sz´ın.
Szubtrakt´ıv sz´ınkever´es eset´en azt ´ırjuk el˝o, hogy mennyi t¨ urkiz (Cyan), b´ıbor
(Magenta) ´es s´arga (Yellow) sz´ınt kell kivonnunk a leg¨osszetettebb sz´ınb˝ ol, a feh´erb˝ ol
(a pap´ır sz´ıne) a k´ıv´ ant sz´ın el˝o´all´ıt´asa ´erdek´eben (l´asd a 4.2. ´abr´at). Ezt r¨oviden CMY
sz´ınrendszernek nevezz¨ uk.
A grafikai hardver ´altal haszn´alt sz´ınkever´esen k´ıv¨ ul m´as m´odok is lehets´egesek, m´as
b´azis is felvehet˝ o a sz´ınt´erben. Ilyen pl. a k´epz˝ om˝ uv´eszek ´altal haszn´alt sz´ın´ arnyalat,
f´enyess´eg ´es tel´ıtetts´eg (HLS) sz´ınmeghat´ aroz´as. Err˝ol, ´es a sz´ınnel kapcsolatos egy´eb
probl´em´ akr´ol a [4], [1], [2] k¨onyvekben r´eszletesebben olvashatunk.
A sz´am´ıt´og´epek grafikus alaprendszereiben a sz´ınek megad´asa ´altal´ aban k´etf´elek´eppen
t¨ort´enhet. Az egyik sz´ınmegad´asi m´od eset´en k¨ozvetlen¨ ul megadjuk a k´ıv´ ant sz´ın
RGB komponenseit, a m´asik eset´en csup´an egy indexszel hivatkozunk egy sz´ınt´ abl´ azat
(sz´ınpaletta) valamely elem´ere. Term´eszetesen a paletta sz´ınei a felhaszn´al´ o ´altal
megv´altoztathat´ ok, vagyis ugyanahhoz a sz´ınindexhez m´as sz´ınt rendelhet¨ unk hozz´a.
24
4.1. ´abra. A sz´ınkocka az RGB koordin´ata-rendszerben
Az OpenGL-ben az RGB komponensek mellett egy negyedik, un. alfa (A) komponenst
is megadhatunk, ez´ert itt RGBA m´odr´ ol besz´el¨ unk. Az alfa komponens term´eszetesen
nem a sz´ın defini´al´ as´ ahoz kell, ahhoz pontosan h´arom komponens sz¨ uks´eges, vele az
´atl´ atsz´os´ agot adhatjuk meg, vagyis azt kontroll´ alhatjuk, hogy az adott sz´ınnel kifestend˝o
pixelen csak az ´ uj sz´ın l´atsszon, vagy a pixel r´egi ´es ´ uj sz´ın´eb˝ ol egy¨ uttesen ´alljon el˝o a
pixel v´egs˝o sz´ıne. Alfa 1. ´ert´eke eset´en a sz´ın nem ´atl´ atsz´ o, 0. eset´en teljesen ´atl´ atsz´o, a
k¨ozb¨ uls˝o ´ert´ekek eset´en pedig a pixel r´egi ´es ´ uj sz´ın´et keveri a rendszer az el˝o´ırt ar´anyban.
A sz´ınes grafikus hardver egyr´eszt felbont´ asban – a k´eperny˝ o pixeleinek sz´am´ aban –,
m´asr´eszt a pixeleken megjelen´ıthet˝o sz´ınek sz´am´ aban k¨ ul¨ onb¨ ozik. E kett˝ ot a monitor ´es a
grafikus k´artya min˝os´ege, ´es azok ¨osszhangja hat´arozza meg. J´o min˝os´eg˝ u, val´ oszer˝ u k´epek
el˝o´ all´ıt´ as´ahoz nem elegend˝o a felbont´ ast n¨ovelni, ugyanis viszonylag alacsony felbont´ as
mellett nagysz´am´ u sz´ın eset´en szinte t¨ok´eletes k´epet hozhatunk l´etre. Gondoljunk pl.
a TV k´esz¨ ul´ekekre, melyek felbont´ asa el´eg kicsi (a PAL rendszer˝ u k´esz¨ ul´ekek 625 soron
jelen´ıtik meg a k´epet) a mai monitorok felbont´ as´ahoz k´epest, de a megjelen´ıthet˝ o sz´ınek
sz´ama – ezt szok´as sz´ınm´elys´egnek is nevezni – gyakorlatilag korl´atlan.
A sz´am´ıt´ og´epekben, pontosabban azok grafikus k´arty´ aj´an, a k´eperny˝o minden pi-
xel´ehez ugyanannyi mem´oria tartozik, melyben a pixelek sz´ın´et t´arolja a g´ep. A pixelek
sz´ın´enek t´arol´ as´ara haszn´alt mem´ori´at sz´ınpuffernek nevezz¨ uk. A puffer m´eret´et azzal
jellemezz¨ uk, hogy pixelenk´ent h´any bit ´all rendelkez´esre a sz´ınek t´arol´ as´ara. 8 bit/pixel
25
4.2. ´abra. A sz´ınkocka a CMY koordin´ata-rendszerben
eset´en a megjelen´ıthet˝ o sz´ınek sz´ama 2
8
= 256. A manaps´ag haszn´alatos grafikus k´arty´ak
sokkal t¨obb sz´ınt tudnak megjelen´ıteni, a 24 bit/pixel kezd standardd´a v´alni, m´ar a 16
bit/pixel is kihal´oban van. A legjobbnak mondhat´o k´arty´ak eset´en 32 bit/pixel (az RGBA
¨osszetev˝ ok mindegyik´ere 8, vagyis 16.77 milli´o sz´ın plusz az ´atl´ atsz´os´ ag, az ilyen grafikus
k´arty´ akat szok´as true colornak is nevezni) ´es akkora a mem´oria, hogy ilyen sz´ınpufferb˝ ol
k´et darabot tud haszn´alni (erre pl. anim´aci´ o eset´en van sz¨ uks´eg¨ unk), teh´at ezt felfoghat-
juk 64 bit/pixelk´ent is.
A pixelenk´enti biteket a rendszerek ´altal´ aban egyenletesen osztj´ak el a
sz´ınkomponensek k¨oz¨ ott, b´ar vannak kiv´etelek. Azt, hogy az ´altalunk haszn´alt
rendszerben h´any bit ´all rendelkez´es¨ unkre az egyes sz´ınkomponensek, illetve az alfa
´ert´ek t´arol´ as´ara, tov´ abb´a, hogy az egyes sz´ınindexekhez milyen RGB ´ert´ekek tartoz-
nak a glGetIntegerv() parancs GL RED BITS, GL GREEN BITS, GL BLUE BITS,
GL ALPHA BITS, illetve GL INDEX BITS param´eterrel val´ o megh´ıv´ as´ aval kapjuk meg.
Az RGBA ´es sz´ınindex m´odok k¨oz¨otti v´alaszt´asra nincs OpenGL parancs, mivel ez
hardverf¨ ugg˝ o param´eter. Erre szolg´al´ o f¨ uggv´enyt az OpenGL-hez kapcsolt, ablakoz´ ast
´es felhaszn´al´oi interakci´okat lekezel˝o f¨ uggv´enyk¨ onyvt´ arakban tal´alhatunk, pl. a minden
OpenGL implement´ aci´o r´esz´et k´epez˝o GLX-ben, vagy az ´altalunk prefer´alt GLUT-ben.
Sz´ınindex m´od eset´en el˝ofordulhat, hogy saj´at sz´ınpalett´ at akarunk megadni.
Term´eszetesen erre sincs OpenGL parancs, erre is a fent eml´ıtett kieg´esz´ıt˝o k¨onyvt´arakban
tal´alhatunk f¨ uggv´enyeket. Sz´ınpaletta defini´al´ asa eset´en ¨ ugyeln¨ unk kell arra, hogy az em-
26
ber ´altal egyenletesen v´altoz´onak ´erz´ekelt intenzit´ asv´altoz´ as nem ´ ugy ´erhet˝ o el, hogy az
RGB ´ert´ekeket line´arisan v´altoztatjuk. P´eld´ aul a csak k´ek komponens˝ u sz´ınt a [0., 1.]
intervallumon tekintve, a 0.1-r˝ol a 0.11-re v´alt´ast sokkal jelent˝osebbnek ´erz´ekelj¨ uk, mint
a 0.5-r˝ol a 0.51-re v´alt´ast. A 0.55 ´ert´ekkel sokkal jobb hat´ast ´er¨ unk el. Hasonl´ok a
tapasztalatok a f´enyer˝ o ´erz´ekel´ese kapcs´an is, 50 W ´es 100 W k¨oz¨ott – m´armint ilyen tel-
jes´ıtm´eny˝ u villany´eg˝ok k¨oz¨ ott – nagyobb ugr´ast ´eszlel¨ unk, mint 100 W ´es 150 W k¨oz¨ ott.
A line´aris sk´ala helyett sokkal jobb a logaritmikus sk´ala, b´ar ez a probl´ema er˝osen hard-
verf¨ ugg˝ o. Monitorok eset´en ennek a probl´em´ anak a megold´as´ at gamma-korrekci´ onak ne-
vezik (tov´abbi inform´aci´ ok [4]-ban tal´alhat´ok).
A felhaszn´al´oi programban d¨onten¨ unk kell a sz´ınmegad´ as m´odj´ar´ ol, ´es ez a
tov´abbiakban nem v´altoztathat´o meg, teh´at egy alkalmaz´asban vagy v´egig RGBA
m´odban, vagy sz´ınindex m´odban kell dolgoznunk. A rajzol´as sz´ın´enek kiv´alaszt´asa nem
jelenti felt´etlen¨ ul azt, hogy az adott objektum a kiv´alasztott sz´ınnel fog megjelenni a
k´eperny˝ on, ugyanis sok m´as hat´ast is figyelembe vesz a rendszer, pl. megvil´ag´ıt´ast,
´arnyal´ ast vagy text´ ur´ at. A pixelek v´egs˝o sz´ıne egy hossz´ u m˝ uveletsor eredm´enyek´ent
´all el˝o.
A rendszer a sz´ınt a cs´ ucspontokban sz´amolja ki. A cs´ ucsponthoz rendeli a kurrens ra-
jzol´asi sz´ınt. Ha a megvil´ag´ıt´as enged´elyezett, akkor a f´enyforr´ as(ok) sz´ıne, ´es az ´arnyal´ asi
modellt˝ol f¨ ugg˝oen (l´asd a 4.2. szakaszt) a transzform´alt cs´ ucspontbeli norm´alis, tov´abb´ a
az anyagtulajdons´agok (l´asd a 6.3. szakaszt) is befoly´asolj´ ak a v´egs˝ o sz´ınt. Ilyen esetben
a rajzol´asi sz´ın hat´astalan. A rendszer a megjelen´ıt˝o transzform´aci´os l´anc v´eg´en az ob-
jektumot a k´epmez˝ okoordin´ata-rendszerbe transzform´alja, majd raszterekk´e konvert´ alja,
vagyis meghat´arozza, hogy mely pixelek esnek az alakzat k´ep´ere. Ezekhez a raszterekhez
hozz´arendeli az alakzat megfelel˝o r´esz´enek sz´ın´et, m´elys´eg´et ( z koordin´ata) ´es text´ ura
koordin´at´ ait. A raszter ´es a hozz´arendelt ´ert´ekek egy¨ uttes´et fragmentumnak nevezz¨ uk az
OpenGL-ben. Miut´an a fragmentumokat l´etrehozta a rendszer, ezekre alkalmazza a k¨od,
text´ ura, sim´ıt´asi effektusokat, ha azok haszn´alata enged´elyezett. V´eg¨ ul az ´ıgy m´odos´ıtott
fragmentumra ´es a k´eperny˝o pixeleire v´egrehajtja az el˝o´ırt alfa sz´ınkever´est, ditheringet
´es a bitenk´enti logikai m˝ uveleteket – ha ezek enged´elyezettek, illetve el˝o´ırtak –, ´es az ´ıgy
kapott sz´ınnel fel¨ ul´ırja a megfelel˝o pixel sz´ın´et.
Ha a bit/pixel sz´am alacsony, pl. csak 4 vagy 8, akkor t¨obb sz´ınt ´ ugy ´erz´ekeltethet¨ unk,
hogy n´egyzetes pixelt¨omb¨ ok pixeleit k¨ ul¨ onb¨ oz˝o elrendez´esben festj¨ uk ki a rendelkez´esre
´all´ o sz´ınekkel. Ez´altal ´ uj sz´ınhat´ as´ u pixelt¨omb¨ ok j¨onnek l´etre. Term´eszetesen csak akkor
j´o a hat´as, ha a pixelek el´eg kicsik, illetve el´eg messzir˝ol n´ezz¨ uk a k´epet. Ezt a tech-
nik´at ditheringnek nevezz¨ uk. Ezzel gyakorlatilag a felbont´as cs¨okkent´ese r´ev´en n¨ovelj¨ uk
a sz´ınek sz´am´ at. Haszn´alata a nyomtat´ okn´ al sz´eles k¨orben elterjedt, de sz¨ uks´eg lehet r´a
gyeng´ebb grafikus k´arty´ ak (pl. 24 bit/pixel) eset´en is, ha anim´alunk, azaz mozg´o k´epet
hozunk l´etre. Ilyenkor ugyanis k´et azonos m´eret˝ u sz´ınpuferre van sz¨ uks´eg, teh´at az ere-
deti 24 bit/pixelb˝ol csak 12 bit/pixel lesz, ami m´ar nem alkalmas un. true color k´epek
el˝o´ all´ıt´ as´ara.
Sz´ınindex m´od eset´en a rendszer csak a sz´ınpalett´ aba mutat´o indexet t´arolja pixe-
lenk´ent, nem pedig mag´at a sz´ınt. A paletta a sz´ınek RGB komponenseit tartalmazza.
A paletta sz´ıneinek a sz´ama 2 hatv´anya, ´altal´aban 2
8
= 256-t´ol 2
12
= 4036-ig szokott
terjedni. RGBA m´odban a pixelek sz´ıne teljesen f¨ uggetlen egym´ast´ ol, vagyis, ha egy pi-
xel sz´ın´et megv´altoztatjuk, annak nincs hat´asa a t¨obbi pixel sz´ın´ere. Sz´ınindex m´odban
viszont a paletta valamely sz´ın´enek megv´altoztat´ asa eset´en a r´a mutat´o index˝ u pixelek
27
mindegyik´enek megv´altozik a sz´ıne. Ezt haszn´aljuk ki az un. sz´ınanim´ aci´o sor´an.
Felmer¨ ul a k´erd´es, hogy mikor haszn´aljunk RGBA ´es mikor sz´ınindex m´odot. Ezt
alapvet˝oen a rendelkez´esre ´all´ o hardver, ´es a megoldand´o feladat hat´arozza meg. Legt¨obb
rendszerben RGBA m´odban t¨obb sz´ın jelen´ıthet˝ o meg a k´eperny˝on, mint sz´ınindex
m´odban. Sz´amos speci´alis effektus, mint pl. az ´arnyal´as, megvil´ag´ıt´ as, text´ ura-lek´epez´es,
atmoszf´erikus hat´asok, antialiasing ´es ´atl´atsz´ os´ag RGBA m´odban sokkal eredm´enyesebben
val´os´ıthat´ o meg.
A sz´ınindex m´odnak is vannak azonban el˝onyei. C´elszer˝ u sz´ınindex m´odot
v´alasztanunk,
• ha egy olyan programot kell ´at´ırnunk OpenGL-be, amely m´ar ezt a m´odot haszn´alta;
• ha kevesebb sz´ınt akarunk haszn´alni, mint a sz´ınpuffer ´altal k´ın´ alt maximum;
• ha a bit/pixel ´ert´ek alacsony, azaz kev´es sz´ın jelen´ıthet˝ o meg, ugyanis RGBA
m´odban az ´arnyal´as durv´abb lehet;
• ha olyan speci´alis tr¨ ukk¨ oket akarunk megval´ os´ıtani, mint a sz´ınanim´ aci´o, vagy a
r´etegekbe rajzol´as;
• ha pixelenk´enti logikai m˝ uveleteket akarunk a sz´ıneken v´egrehajtani.
4.1. Sz´ın megad´asa
RGBA m´odban a kurrens sz´ınt a glColor*() paranccsal adhatjuk meg.
void glColor3¦bsifdubusui¦ (TYPE r,TYPE g,TYPE b);
void glColor4¦bsifdubusui¦ (TYPE r,TYPE g,TYPE b,TYPE a);
void glColor¦34¦¦bsifdubusui¦v (const TYPE *v);
A kurrens sz´ınt az RGB(A) komponensekkel defini´alja. A v-vel v´egz˝ od˝o nev˝ u paran-
csok eset´en a param´etereket tartalmaz´o vektor c´ım´et adja ´at. Ha alfa ´ert´ek´et nem adjuk
meg, a rendszer automatikusan 1.-nek veszi. Lebeg˝opontos param´eterek – f ´es d opci´ok
– eset´en a rendszer a megadott ´ert´eket a [0., 1.] intervallumra lev´agja, az el˝ojel n´elk¨ uli
eg´esz param´etereket – ub, us, ui opci´ok– line´arisan lek´epezi a [0., 1.] intervallumra (l´asd
a 4.1. t´abl´ azatot), az el˝ojeles eg´eszeket pedig ugyancsak line´arisan k´epezi le a [−1., 1.]
intervallumra. A rendszer csak a sz´ıninterpol´al´ as ´es a sz´ınpufferbe val´o be´ır´ as el˝ott v´egzi
el a lev´ag´ ast.
Sz´ınindex m´odban a glIndex*() paranccsal v´alaszthatjuk ki a kurrens sz´ınindexet.
void glIndex¦sifd¦ (TYPE c);
void glIndex¦sifd¦v (TYPE c);
A kurrens sz´ınindexet a v´alasztott opci´onak megfelel˝o m´odon megadott ´ert´ekre ´all´ıtja
be.
28
4.1. t´abl´azat. A sz´ınkomponensek lek´epez´ese
jel adatt´ıpus megadhat´o ´ert´ekek intervalluma amire lek´epezi
b 8 bites eg´esz [−128, 127] [−1., 1.]
s 16 bites eg´esz [−32768, 32767] [−1., 1.]
i 32 bites eg´esz [−2147483648, 2147483647] [−1., 1.]
ub el˝ojel n´elk¨ uli 8 bites eg´esz [0, 255] [0., 1.]
us el˝ojel n´elk¨ uli 16 bites eg´esz [0, 65535] [0., 1.]
ui el˝ojel n´elk¨ uli 32 bites eg´esz [0, 4294967295] [0., 1.]
4.2.
´
Arnyal´asi modell megad´asa
A szakasz ´es poligon alapelemeket megrajzolhatjuk egyetlen sz´ınnel, vagy sok
k¨ ul¨ onb¨oz˝ ovel. Az els˝o esetet konstans ´arnyal´ asnak (flat shading), a m´asodikat pedig foly-
tonos vagy sima ´arnyal´ asnak (smooth shading) nevezz¨ uk. A glShadeModel() paranccsal
v´alaszthatunk a k´et ´arnyal´ asi technika k¨oz¨ ott.
void glShadeModel (GLenum mode);
Az ´arnyal´ asi modell kiv´alaszt´as´ ara szolg´al. A mode param´eter ´ert´eke GL SMOOTH
vagy GL FLAT lehet, alap´ertelmez´es a GL SMOOTH.
Konstans ´arnyal´as eset´en a rendszer egyetlen cs´ ucspont sz´ın´evel sz´ınezi ki az eg´esz
objektumot. T¨or¨ ottvonal eset´en ez a v´egpont sz´ıne, poligon eset´en pedig a 4.2. t´abl´azat
szerinti. A t´abl´ azat azt mutatja, hogy az i-edik poligont mely cs´ ucspont sz´ın´evel rajzoljuk
meg, felt´etelezve, hogy a cs´ ucspontok ´es poligonok sz´amoz´ asa 1-el kezd˝ odik. Ezeket a
szab´alyokat k¨ovetkezetesen betartja a rendszer, de a legbiztosabb, ha konstans ´arnyal´ asn´al
csak egy sz´ınt adunk meg az alapelem l´etrehoz´ asakor.
4.2. t´abl´azat. A poligon sz´ın´enek meghat´aroz´asa
poligon fajta az i-edik poligon melyik
cs´ ucspont szerint lesz kisz´ınezve
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 ´arnyal´as eset´en a cs´ ucspontok sz´ın´et – pontosabban RGBA m´odban a sz´ınt
komponensenk´ent, sz´ınindex m´odban az indexeket – line´arisan interpol´alja a rendszer a
szakaszok bels˝o pontjai sz´ın´enek kisz´am´ıt´as´ ahoz. Poligon hat´ar´anak megrajzol´asakor is ez
az elj´ar´as, a poligon belsej´enek kisz´ınez´esekor pedig kett˝ os line´aris interpol´aci´ot hajt v´egre.
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
alapj´an, majd a p bels˝o pont sz´ın´et az a ´es b pontok sz´ın´enek line´aris interpol´aci´oj´ aval
hat´arozza meg. Ezt az ´arnyal´ast Gouroud–f´ele ´arnyal´ asnak is nevezz¨ uk.
4.3. ´abra. Gouroud-f´ele ´arnyal´ as
Folytonos ´arnyal´ as alkalmaz´as´ aval el tudjuk t¨ untetni a k´epr˝ol a g¨orb¨ ult fel¨ uleteket
k¨ozel´ıt˝o poligonh´al´ o ´eleit. Ezt illusztr´alja a 4.4. ´abra, ahol egy g¨omb¨ot l´athatunk konstans
(fels˝o k´ep) ´es folytonos (als´o k´ep) ´arnyal´ assal.
Sz´ınindex m´od eset´en meglepet´esek ´erhetnek benn¨ unket, ha a szomsz´edos
sz´ınindexekhez tartoz´o sz´ınek nagyon elt´er˝ oek. Ez´ert ha sz´ınindex m´odban folytonosan
akarunk ´arnyalni, akkor el˝obb c´elszer˝ u a megfelel˝o sz´ınpalett´ at l´etrehoznunk.
30
4.4. ´abra. G¨omb konstans ´es folytonos ´arnyal´assal
31
5. fejezet
Koordin´ata-rendszerek ´es
transzform´aci´ok
A geometriai alapelemek t¨obb transzform´aci´on mennek kereszt¨ ul mire v´eg¨ ul megjelen-
nek a k´eperny˝ on (ha egy´altal´an). Nagym´ert´ek˝ u anal´ogia mutathat´o ki a m˝ utermi
f´enyk´epk´esz´ıt´es, bele´ertve a pap´ırra vitelt is, ´es az OpenGL-el val´ o k´epalkot´ as k¨oz¨ ott.
Ez az anal´ogia a k¨ovetkez˝ o f˝o l´ep´esekre ´ep¨ ul (z´ar´ ojelben az OpenGL megfelel˝o transz-
form´aci´ oja szerepel):
• A f´enyk´epez˝og´ep elhelyez´ese, r´air´any´ıt´ asa a lef´enyk´epezend˝o t´err´eszre (n´ez˝ opontba
transzform´al´ as).
• A lef´enyk´epezend˝o objektumok elhelyez´ese a k´ıv´ ant poz´ıci´ oba (modelltransz-
form´aci´ o).
• A megfelel˝o lencse kiv´alaszt´asa, zoom be´all´ıt´ asa (vet´ıt´esi transzform´aci´ o).
• Az elk´esz¨ ult negat´ıvr´ ol megfelel˝o m´eret˝ u pap´ırk´ep k´esz´ıt´ese (k´epmez˝ o-
transzform´aci´ o).
Ahhoz, hogy az OpenGL-el k´epet hozzunk l´etre, a fenti transzform´aci´okat kell meg-
adnunk. Az al´abbiakban ezen transzform´aci´ok megad´as´ar´ ol, az egyes transzform´aci´ ok
hat´as´ ar´ol, m˝ uk¨ od´es¨ uk le´ır´as´ ar´ol, a transzform´aci´ okat le´ır´ o m´atrixokr´ ol ´es azok t´arol´as´ ar´ol
lesz sz´o.
Az OpenGL koordin´ata-rendszerei der´eksz¨ og˝ u Descartes–f´ele koordin´ata-rendszerek,
de a bels˝o sz´am´ıt´ asokat homog´en koordin´at´ akban hajtja v´egre a rendszer, ´es a koordin´ata-
rendszerek k¨ozti transzform´aci´ okat 4 4-es val´os elem˝ u m´atrixszal ´ırja le ´es t´arolja. Az
egyes transzform´aci´ ok megad´as´ ara OpenGL parancsok ´allnak rendelkez´es¨ unkre, de arra
is lehet˝os´eg van, hogy a felhaszn´al´o mag´at a transzform´aci´ot le´ır´o m´atrixot adja meg
k¨ozvetlen¨ ul. Az ut´obbi esetben k¨ ul¨ on¨ os figyelmet kell ford´ıtani arra, hogy a megadott
m´atrixok illeszkedjenek az OpenGL transzform´aci´ os l´anc´aba.
A transzform´aci´ okat p/ = Mp alakban ´ırhatjuk fel, ahol p a transzform´aland´ o pont,
p/ a transzform´alt pont homog´en koordin´at´ait, M pedig a transzform´aci´ot le´ır´ o 4 4-
es m´atrixot jel¨oli. Ha a p pontra el˝obb az M
1
, majd az M
2
m´atrix´ u transzform´aci´ ot
alkalmazzuk, akkor p/ = M
1
p, p// = M
2
p = M
2
(M
1
p) = (M
2
M
1
) p miatt az ered˝o
32
transzform´aci´ o az M = M
2
M
1
m´atrixszal ´ırhat´ o le. A sorrend nem k¨oz¨ omb¨ os, mivel a
m´atrixok szorz´asa nem kommutat´ıv (nem felcser´elhet˝ o) m˝ uvelet!
Az OpenGL t´arolja a kurrens transzform´aci´ os m´atrixot ´es ezt megszorozza a meg-
felel˝o OpenGL paranccsal l´etrehozott ´ uj transzform´aci´o m´atrix´ aval, de nem balr´ol, ha-
nem jobbr´ol. Ez´ert az OpenGL sz´am´ ara sajnos ´eppen ford´ıtott sorrendben kell megadni
a transzform´aci´ okat! Teh´at az el˝oz˝o p´elda v´egeredm´eny´ehez el˝obb az M
2
, majd az M
1
transzform´aci´ ot kell megadni. Ez nem t´ ul szerencs´es, de nem tudunk rajta v´altoztatni,
alkalmazkodnunk kell hozz´a.
5.1. N´ez˝ opont, n´ez´esi ir´any kiv´alaszt´asa ´es modell-
transzform´aci´ok
Az ´abr´azoland´ o alakzatot elmozgathatjuk a koordin´ata-rendszerhez k´epest, vagy ak´ar
alakjukat ´es m´eretar´ anyaikat is megv´altoztathatjuk. Ezeket a transzform´aci´ okat az
OpenGL terminol´ogi´ aja szerint modelltranszform´aci´onak nevezz¨ uk.
A n´ez˝ opont ´es a n´ez´esi ir´any kiv´alaszt´as´ aval azt hat´arozzuk meg, hogy az alakza-
tot honnan ´es milyen ir´anyb´ol n´ezz¨ uk, vagyis azt, hogy az alakzat mely r´esz´et l´atjuk.
Alap´ertelmez´es szerint – ha nem adunk meg k¨ ul¨on n´ez˝ opontot ´es n´ez´esi ir´anyt – az orig´ob´ol
n´ez¨ unk a negat´ıv z tengely ir´any´ aba. A n´ez˝ opont, n´ez´esi ir´any ´es tov´ abbi felt´etelek
seg´ıts´eg´evel egy ´ uj koordin´ata-rendszert, az un. n´ez˝opontkoordin´ata-rendszert hozzuk
l´etre. Ennek alap´ertelmez´ese teh´at az objektumkoordin´ata-rendszer.
Nyilv´anval´ o, hogy a n´ez˝opont ´es n´ez´esi ir´any be´all´ıt´asa el´erhet˝ o a modell megfelel˝o
transzform´aci´ oj´aval is. Egy t´argyat k¨or¨ ulj´ arva ugyanazt l´atjuk, mintha egy helyben ma-
radva a t´argyat forgatn´ank k¨orbe. M´ıg a val´os´ agban a t´argyak nem mindig forgathat´ok
k¨orbe – pl. m´eret¨ uk miatt –, sz´am´ıt´og´epi modell eset´en ez nem jelent gondot. E k´et
transzform´aci´ o szoros kapcsolata ´es helyettes´ıthet˝os´ege miatt az OpenGL egyetlen k¨oz¨ os
m´atrixban t´arolja a n´ez˝ opont- ´es modelltranszform´aci´ot. Ez a k¨oz¨os m´atrix teh´at a k´et
komponenstranszform´aci´ o m´atrixainak szorzata. Miut´an az OpenGL mindig jobbr´ol szo-
rozza meg a kurrens m´atrixot az ´ ujjal, el˝obb a n´ez˝ opontba transzform´al´ ast kell megadni,
majd a modelltraszform´aci´o(ka)t, ha azt akarjuk, hogy el˝obb a modelltranszform´aci´okat
hajtsa v´egre a rendszer.
A n´ez˝ opont- ´es modelltranszform´aci´ ok megad´asa el˝ott a glMatrix-
Mode(GL MODELVIEW) parancsot ki kell adni, amivel jelezz¨ uk, hogy ezt a
m´atrixot fogjuk m´odos´ıtani (l´asd az 5.4. pontot). Az al´abbiakban a n´ez˝opont- ´es
modelltranszform´aci´ok megad´as´at seg´ıt˝ o OpenGL parancsokat ismertetj¨ uk.
5.1.1. Modelltranszform´aci´ok megad´as´at seg´ıt˝o parancsok
Az OpenGL sz´am´ ara a felhaszn´al´ o k¨ozvetlen¨ ul megadhatja a transzform´aci´ o 4 4-es
m´atrix´ at ´es a glLoadMatrix() parancsot haszn´alva ezzel fel¨ ul´ırhatja, a glMultMatrix()
parancs seg´ıts´eg´evel megszorozhatja a kurrens transzform´aci´ os m´atrixot. Az OpenGL
transzform´aci´ ok megad´as´ at seg´ıt˝ o parancsai el˝obb kisz´am´ıtj´ak a transzform´aci´ o 4 4-es
m´atrix´ at, majd ezzel megszorozz´ak a kurrens m´atrixot.
33
Eltol´as
void glTranslate¦fd¦ (TYPE x, TYPE y,TYPE z );
El˝o´all´ıtja az [x, y, z, 1.]
T
vektorral val´o eltol´as m´atrix´ at, ´es megszorozza vele a kurrens
m´atrixot.
Elforgat´as
void glRotate¦fd¦ (TYPE angle, TYPE x,TYPE y, TYPE z );
El˝o´all´ıtja a t´er pontjait az orig´on ´athalad´o, [x, y, z]
T
ir´anyvektor´ u egyenes k¨or¨ ul angle
sz¨oggel elforgat´o m´atrixot, ´es megszorozza vele a kurrens m´atrixot. A sz¨og el˝ojeles, ´es
fokban kell megadni.
Sk´al´az´as ´es t¨ ukr¨oz´es
void glScale¦fd¦ (TYPE λ, TYPE µ, TYPE ν);
El˝o´all´ıtja annak a transzform´aci´onak a m´atrix´ at, amely az x tengely ment´en λ, az
y tengely ment´en µ, a z tengely ment´en pedig ν m´ert´ek˝ u kicsiny´ıt´est vagy nagy´ıt´ ast,
valamint az el˝ojelt˝ol f¨ ugg˝ oen esetleg koordin´atas´ık(ok)ra vonatkoz´ o t¨ ukr¨ oz´est hajt v´egre,
´es megszorozza vele a kurrens m´atrixot. Ez teh´at egy speci´alis affin transzform´aci´ o, mely
az alakzatok m´eret´et, m´eretar´anyait (pl. sz´eless´eg / magass´ag) ´es ir´any´ıt´ as´at is meg tudja
v´altoztatni. Az 1.-n´el nagyobb abszol´ ut ´ert´ek˝ u t´enyez˝o az adott tengely menti nagy´ıt´ast,
az 1.-n´el kisebb abszol´ ut ´ert´ek˝ u kicsiny´ıt´est, a negat´ıv t´enyez˝ o pedig az el˝oz˝ oek mellett
az adott tengelyre mer˝oleges koordin´atas´ıkra vonatkoz´o t¨ ukr¨ oz´est is eredm´enyez.
5.1.2. N´ez˝ opont ´es n´ez´esi ir´any be´all´ıt´asa
Alap´ertelmez´es szerint a n´ez˝ opont a modellkoordin´ata-rendszer orig´oja, a n´ez´esi ir´any pe-
dig a negat´ıv z tengely. Egy ´ uj n´ez˝ opont ´es n´ez´esi ir´any be´all´ıt´as´ aval egyen´ert´ek˝ u, ha
az objektumot mozgatjuk el ellent´etes ir´anyban. Ezt az el˝oz˝oekben ismertetett glTrans-
late*() ´es glRotate*() parancsokkal tehetj¨ uk meg. Ez azonban nem mindig k´enyelmes,
a felhaszn´al´ o gondolkod´as´ahoz nem felt´etlen¨ ul illeszked˝ o elj´ar´as. Ha az ´ uj n´ez˝ opontot ´es
n´ez´esi ir´anyt, ez´altal ´ uj n´ez˝opontkoordin´ata-rendszert explicite akarunk megadni, akkor
a GLU f¨ uggv´enyk¨ onyvt´ar gluLookAt() f¨ uggv´eny´et haszn´aljuk!
void gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez,GLdouble centerx,
GLdouble centery, GLdouble centerz,GLdouble upx, GLdouble upy, GLdouble
upz );
Egy ´ uj n´ez˝opontot ´es n´ez´esi ir´anyt megad´o m´atrixot hoz l´etre, ´es ezzel megszorozza a
kurrens m´atrixot. Az (eyex, eyey, eyez ) sz´amh´ armas az ´ uj n´ez˝ opontot – az ´ uj orig´ot –,
34
a (centerx, centery, centerz ) sz´amh´ armas az ´ uj n´ez´esi ir´anyt – az ´ uj z tengely ir´any´at –,
az (upx, upy, upz ) sz´amh´ armas pedig a felfel´e ir´anyt – az ´ uj y tengely ir´any´ at – ´ırja el˝o
(l´asd az 5.1. ´abr´at).
5.1. ´abra. Az ´ uj n´ez˝opont ´es n´ez´esi ir´any megad´asa a modellkoordin´ata-rendszerben a
gluLookAt( ) f¨ uggv´ennyel
Ezzel a f¨ uggv´ennyel teh´at azt adjuk meg, hogy honnan (eyex, eyey, eyez ) hov´a (cen-
terx, centery, centerz ) n´ez¨ unk, ´es a k´epen mely t´erbeli ir´any (upx, upy, upz ) k´epe legyen
f¨ ugg˝ oleges.
5.2. Vet´ıt´esi transzform´aci´ok
Az OpenGL 3D-s grafikus rendszer, vagyis t´erbeli alakzatok ´abr´azol´ as´ ara is alkalmas.
Ez´ert sz¨ uks´eg van olyan transzform´aci´ okra, melyek a teret s´ıkra – a k´eperny˝ o is s´ıkbeli
tartom´anynak tekintend˝o – k´epezik le. A rendszer erre k´et lehet˝os´eget k´ın´al: a centr´ alis
´es a mer˝oleges vet´ıt´est. A vet´ıt´es m´odj´anak kiv´alaszt´as´ ahoz a n´ez˝ opontkoordin´ata-
rendszerben meg kell adnunk azt a t´err´eszt, amit ´abr´ azolni szeretn´enk. Ez centr´alis vet´ıt´es
eset´en csonka g´ ula, mer˝oleges vet´ıt´esn´el t´eglatest. A k´epen csak azok az alakzatok, il-
letve az alakzatok azon r´eszei jelennek meg, melyek az el˝oz˝ o testeken bel¨ ul vannak, ami
azt jelenti, hogy az ebb˝ol kil´og´ o r´eszeket a rendszer elt´avol´ıtja, vagyis a vet´ıt˝ o poli´eder
lapjaival lev´agja. Ez a v´ag´ as a vet´ıt´esi transzform´aci´ o ut´an, az un. v´ag´ o koordin´at´ akban
t¨ort´enik. A vet´ıt´esi transzform´aci´ o nem s´ıkbeli k´epet eredm´enyez – ezt v´arhatn´ank el –,
hanem a vet´ıtend˝o t´err´eszt (csonka g´ ul´ at, t´eglatestet) egy kock´ ara k´epezi le.
A vet´ıt´es m´odj´anak kiv´alaszt´ as´at ´es az ´abr´ azoland´o t´err´esz kijel¨ol´es´et egyetlen pa-
ranccsal hajthatjuk v´egre. Centr´ alis vet´ıt´esn´el a glFrustum() vagy gluPerspective(),
mer˝oleges vet´ıt´esn´el pedig a glOrtho() vagy gluOrtho2D() parancsokkal. Centr´alis
(perspekt´ıv) vet´ıt´est akkor alkalmazunk, ha val´oszer˝ u k´epet szeretn´enk l´etrehozni (az
emberi l´at´ as is ´ıgy m˝ uk¨ odik), mer˝oleges vet´ıt´est pedig m´eret- vagy m´eretar´any-helyes
k´epek l´etrehoz´ asakor. Ezen parancsok el˝ott ne felejts¨ uk el kiadni a glMatrix-
Mode(GL PROJECTION); ´es glLoadIdentity(); parancsokat! Az els˝ovel megadjuk,
hogy a vet´ıt´esi m´atrixot akarjuk m´odos´ıtani (azt tessz¨ uk kurrenss´e), a m´asodikkal
bet¨oltj¨ uk az egys´egm´atrixot. A rendszer ugyanis az ´ ujonnan l´etrehozott vet´ıt´esi
m´atrixokkal megszorozza a kurrens m´atrixot.
35
void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far);
Az 5.2. ´abra szerinti csonka g´ ul´ aval meghat´arozott centr´ alis vet´ıt´es m´atrix´at ´all´ıtja
el˝o, ´es megszorozza vele a kurrens m´atrixot. A near ´es far ´ert´ekek a k¨ozeli ´es t´avoli
v´ag´ os´ıknak a n´ez˝opontt´ ol (a n´ez˝ opont koordin´ata-rendszer´enek orig´oj´ at´ol) m´ert t´avols´ag´ at
jelentik, mindig pozit´ıvak. A csonka g´ ula fed˝olapj´an az egyik ´atl´ o v´egpontj´ anak koor-
din´at´ ai (left, bottom, −near) ´es (right, top, −near).
5.2. ´abra. A glFrustum( ) f¨ uggv´eny param´etereinek jelent´ese
Az ´ıgy megadott csonka g´ ul´anak nem kell felt´etlen¨ ul egyenes g´ ul´ ab´ol sz´armaznia –
a z
s
tengely ´es a fed˝olap metsz´espontja nem felt´etlen¨ ul esik egybe a fed˝olap ´atl´ oinak
metsz´espontj´ aval –, vagy m´ask´ent megk¨ozel´ıtve: az (z
s
, s
s
) ´es (y
s
, z
s
) koordin´atas´ıkok
nem felt´etlen¨ ul szimmetrias´ıkjai a csonka g´ ul´ anak.
A gluPerspective() f¨ uggv´ennyel szimmetrikus csonka g´ ul´at (´abr´ azoland´o t´err´eszt)
adhatunk meg a l´at´ osz¨og (a fels˝o ´es als´o v´ag´os´ıkok sz¨oge), a k´ep sz´eless´eg´enek ´es ma-
gass´ag´ anak ar´any´aval, valamint a k¨ozeli ´es t´avoli v´ag´os´ıkoknak a n´ez˝opontt´ ol m´ert
t´avols´ ag´aval.
void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble
far);
Az 5.3. ´abra szerinti szimmetrikus csonka g´ ul´ aval meghat´arozott centr´alis vet´ıt´es
m´atrix´ at ´all´ıtja el˝o, ´es megszorozza vele a kurrens m´atrixot. Az fovy ∈ [0., 180.] l´at´ osz¨og
az (y, z) s´ıkban m´erend˝ o. Az optim´alis l´at´osz¨ oget a szem¨ unknek a k´eperny˝ot˝ ol val´ o
t´avols´ ag´ab´ ol ´es annak az ablaknak a m´eret´eb˝ ol kapjuk meg, melyen megjelen´ıtj¨ uk a k´epet.
Pontosabban, azt a sz¨oget kell meghat´arozni, amely alatt az ablakot l´atjuk. A near ´es far
´ert´ekek a k¨ozeli ´es t´avoli v´ag´ os´ıknak a n´ez˝opontt´ ol (a n´ez˝ opont koordin´ata-rendszer´enek
orig´oj´ at´ol) m´ert t´avols´ag´ at jelentik, mindig pozit´ıvak.
Mer˝oleges vet´ıt´es megad´as´ ara is k´et lehet˝os´eg¨ unk van. Ilyen esetben term´eszetesen a
n´ez˝ opont helye gyakorlatilag k¨oz¨omb¨ os, csak a n´ez´esi ir´any sz´am´ıt.
36
5.3. ´abra. A gluPerspective( ) f¨ uggv´eny param´etereinek jelent´ese
void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far);
Az 5.4. ´abra szerinti t´eglatesttel meghat´arozott mer˝oleges vet´ıt´es m´atrix´at ´all´ıtja el˝o,
´es megszorozza vele a kurrens m´atrixot. A near ´es far param´eterek negat´ıvok is lehetnek.
5.4. ´abra. A glOrtho( ) f¨ uggv´eny param´etereinek jelent´ese
Az (x, y) koordin´atas´ıkra illeszked˝ o alakzatok ´abr´ azol´as´ at k¨onny´ıti meg a k¨ovetkez˝o
f¨ uggv´eny.
void gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
Ennek hat´asa csak abban k¨ ul¨ onb¨ozik a glOrtho() parancs´et´ ol, hogy nem kell a k¨ozeli
´es t´avoli v´ag´os´ıkokat megadni, a rendszer automatikusan a z ∈ [−1., 1.] koordin´at´ aj´ u
pontokat veszi csak figyelembe, vagyis ezek lesznek a k¨ozeli ´es t´avoli v´ag´ os´ıkok.
37
A fenti parancsokkal megadott poli´ederek oldallapjaival a rendszer lev´agja az alak-
zatokat, teh´at csak a poli´ederen (csonka g´ ul´an, illetve t´eglatesten) bel¨ uli r´eszt k´epezi le.
Ezt a v´ag´ ast a vet´ıt´esi transzform´aci´ o ut´an hajtja v´egre a rendszer, vagyis a csonka g´ ula
vagy t´eglatest lapjai helyett a nekik megfelel˝o kocka lapjaival. Ezen v´ag´ os´ıkok mellett
legal´abb tov´ abbi hat v´ag´ os´ık adhat´o meg b´armely OpenGL implement´ aci´oban, melyek
seg´ıts´eg´evel tov´ abb sz˝ uk´ıthetj¨ uk az ´abr´azoland´ o t´err´eszt. Ez a lehet˝os´eg felhaszn´alhat´ o
pl. csonkolt alakzatok ´abr´ azol´ as´ara is. A GL MAX CLIP PLANES param´eterrel kiadott
glGetIntegerv() parancs megadja, hogy az ´altalunk haszn´alt implement´aci´ oban h´any
v´ag´ os´ık adhat´o meg.
void glClipPlane (GLenum plane, const GLdouble *equation);
Ezzel a paranccsal egy v´ag´ os´ıkot adhatunk meg. A plane param´eter ´ert´eke
GL CLIP PLANEi lehet (i = 0, . . . , v´ag´os´ıkok sz´ama−1), ami az ´ uj v´ag´os´ık azonos´ıt´ oja.
Az *equation param´eter a s´ık Ax + By + Cz + D = 0 implicit alakj´anak egy¨ utthat´oit
tartalmaz´o vektor c´ıme. A rendszer az ´ uj v´ag´os´ıkot a kurrens n´ez˝opont-modell transzfor-
m´aci´ onak veti al´a. A v´ag´ast a n´ez˝ opontkoordin´ata-rendszerben hajtja v´egre, ´ ugy, hogy a
transzform´alt s´ık pozit´ıv oldal´an l´ev˝o pontokat hagyja meg, vagyis azokat az (x
s
, y
s
, z
s
, w
s
)
koordin´at´ 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 n´ez˝opontba transzform´alt v´ag´os´ık egy¨ utthat´ oit jel¨oli.
Az i-edik v´ag´ os´ıkra t¨ort´en˝o v´ag´ ast a glEnable(GL CLIP PLANEi); paranccsal en-
ged´elyezhetj¨ uk, ´es a glDisable(GL CLIP PLANEi); paranccsal tilthatjuk le.
5.3. K´epmez˝ o-transzform´aci´o
A vet´ıt´esi transzform´aci´ o ut´an a csonka g´ ul´ab´ ol ´es a t´eglatestb˝ ol egyar´ant kocka lesz.
Ha a homog´en koordin´at´ akr´ol ´att´er¨ unk Descartes–f´ele koordin´at´ 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 normaliz´alt koordin´at´ aknak nevezz¨ uk az OpenGL-ben.
A k´epmez˝o a k´eperny˝ o ablak´anak az a t´eglalap alak´ u pixelt¨ombje, amire rajzolunk. A
k´epmez˝ o oldalai az ablak oldalaival p´arhuzamosak. A k´epmez˝ o-transzform´aci´ o az el˝obb
defini´alt kock´ at k´epezi le arra a t´eglatestre, melynek egyik lapja a k´epmez˝ o. A k´epmez˝ot
a glViewport() paranccsal adhatjuk meg.
void glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
A k´eperny˝ o ablak´aban azt az ablak oldalaival p´arhuzamos t´eglalapot adja meg, mely-
ben a v´egs˝o k´ep megjelenik. Az (x, y) koordin´atap´ arral a k´epmez˝ o bal als´o sark´at, a width
param´eterrel a sz´eless´eg´et, a height param´eterrel pedig a magass´ag´ at kell megadnunk pi-
xelekben. A param´eterek alap´ertelmez´ese (0, 0, winWidth, winHeight), ahol winWidth ´es
winHeigh az ablak sz´eless´eg´et ´es magass´ag´ at jel¨oli.
A normaliz´alt koordin´ata-rendszerbeli kock´ at egy sk´al´ az´ assal arra a t´eglatestre k´epezi
le a rendszer, melynek egy lapja a k´epmez˝o, a r´a mer˝oleges ´el hossza pedig 1. Az ´ıgy
kapott koordin´at´ akat ablakkoordin´at´ aknak nevezz¨ uk. Az ablakkoordin´at´ak is t´erbeliek, a
rendszer ebben v´egzi el a l´athat´ os´agi vizsg´alatokat. Az ablakkoordin´at´ ak z
a
komponense
38
alap´ertelmez´es szerint a [0., 1.] intervallumon v´altozik. Ezt az intervallumot a glDep-
thRange() paranccsal sz˝ uk´ıthetj¨ uk.
void glDepthRange (GLclamped near, GLclamped far);
Az ablakkoordin´at´ ak z
a
komponens´enek minim´alis ´es maxim´alis ´ert´ek´et ´ırhatjuk
el˝o. A megadott ´ert´ekeket a rendszer a [0., 1.] intervallumra lev´agja, ami egyben az
alap´ertelmez´es is.
A k´epmez˝o-transzform´ aci´o m´atrix´at nem lehet explicite megadni, ´es nincs sz´am´ ara
verem fenntartva.
5.4. A transzform´aci´ os m´atrixok kezel´ese
A transzform´aci´ os m´atrixok l´etrehoz´ asa, manipul´al´ asa el˝ott a glMatrixMode() paranc-
csal meg kell adnunk, hogy a m˝ uveletek melyik transzform´aci´ ora vonatkozzanak. Az ´ıgy
kiv´alasztott m´atrixot kurrensnek nevezz¨ uk.
void glMatrixMode (GLenum mode);
Seg´ıts´eg´evel be´all´ıthatjuk, hogy melyik transzform´aci´ ot akarjuk m´odos´ıtani. A mode
param´eter lehets´eges ´ert´ekei: GL MODELVIEW, GL PROJECTION, GL TEXTURE,
alap´ertelmez´ese GL MODELVIEW. A kurrens m´atrix alap´ert´eke mindh´arom m´odban az
egys´egm´ atrix.
void glLoadIdentity (void);
A kurrens m´atrixot az egys´egm´ atrixszal fel¨ ul´ırja. Ez a parancs az´ert fontos, mert a
transzform´aci´ os m´atrixokat el˝o´all´ıt´o OpenGL parancsok mindig megszorozz´ak a kurrens
m´atrixot, teh´at ´ uj transzform´aci´o megad´as´ an´al c´elszer˝ u el˝obb az egys´egm´atrixot bet¨olteni.
A felhaszn´al´onak lehet˝os´ege van saj´at m´atrixok megad´as´ ara a n´ez˝ opontba transz-
form´al´ ashoz, a modelltranszform´aci´ ohoz ´es a vet´ıt´esi transzform´aci´ ohoz, vagyis nem kell
felt´etlen¨ ul az ilyen c´el´ u OpenGL parancsokat haszn´alni. A felhaszn´al´ o ´altal l´etrehozott
4 4-es m´atrixokat egy 16 elem˝ u vektorban kell ´atadni, teh´at a m´atrixot vektorr´ a kell
konvert´ alni, m´egpedig a C nyelv konvenci´ oj´aval ellent´etben 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 m´atrixokat a glLoadMatrix() ´es glMultMatrix() parancsokkal tudjuk
beilleszteni az OpenGL transzform´aci´os l´anc´aba. A 4 4-es val´ os elem˝ u m´atrixokkal
tetsz˝oleges t´erbeli projekt´ıv transzform´aci´ok le´ırhat´ ok, nemcsak az OpenGL parancsok
´altal felk´ın´ alt legfeljebb affin modelltranszform´aci´ ok.
void glLoadMatrix¦fd¦ (const TYPE *m);
Az m vektorban t´arolt m´atrixszal fel¨ ul´ırja a kurrens m´atrixot.
39
void glMultMatrix¦fd¦ (const TYPE *m);
Az m vektorban t´arolt m´atrixszal jobbr´ol megszorozza a kurrens m´atrixot.
Az OpenGL k´et vermet (stack) tart karban a transzform´aci´os m´atrixokkal kapcsolatos
manipul´aci´ ok megk¨onny´ıt´es´ere. Egyet az egyes´ıtett n´ez˝ opont-modell transzform´aci´ ok, egy
m´asikat a vet´ıt´esi transzform´aci´ok sz´am´ ara. A n´ez˝opont-modell transzform´aci´ok verme
legal´abb 32 db 44-es m´atrix t´arol´as´ ara alkalmas, az implement´ aci´ obeli pontos sz´amot a
glGetIntegerv() parancs GL MAX MODELVIEW STACK DEPTH param´eterrel val´o
megh´ıv´ as´aval kapjuk meg. A vet´ıt´esi m´atrixok verme legal´abb 2 db 4 4-es m´atrix
t´arol´ as´ara alkalmas, pontos m´eret´et a GL MAX PROJECTION STACK DEPTH pa-
ram´eterrel kiadott glGetIntegerv() paranccsal kapjuk meg.
A glMatrixMode(GL MODELVIEW) parancs a n´ez˝ opont-modell transzform´aci´ os
verem legfels˝o elem´et teszi kurrenss´e, a glMatrixMode(GL PROJECTION) pedig a
vet´ıt´esi m´atrixok verm´enek legfels˝o elem´et.
Minden m´atrixm˝ uveletet a kurrens m´atrixszal hajt v´egre a rendszer, teh´at a glLoadI-
dentity() ´es glLoadMatrix() ezt ´ırja fel¨ ul; a glMultMatrix() ´es a transzform´aci´ okat
be´all´ıt´ o OpenGL parancsok (pl. glRotate*(), glFrustum()) ezt szorozza meg (jobbr´ol!).
A vermek haszn´alat´ at k´et parancs teszi lehet˝ov´e: a glPushMatrix() ´es a glPopMa-
trix(). Ezek mindig a glMatrixMode() paranccsal be´all´ıtott vermet manipul´alj´ ak.
void glPushMatrix (void);
A glMatrixMode() paranccsal be´all´ıtott kurrens verem minden elem´et egy szinttel
lentebb tolja. A legfels˝o (a kurrens) m´atrix a m´asodik m´atrix m´asolata lesz, vagyis a
legfels˝o k´et m´atrix elemei megegyeznek. A megengedettn´el t¨obb m´atrix eset´en a glMa-
trixMode() parancs kiad´asa hib´at eredm´enyez.
void glPopMatrix (void);
A glMatrixMode() paranccsal be´all´ıtott kurrens verem legfels˝o elem´et eldobja, ´es
minden tov´ abbi elemet egy szinttel fentebb tol. A legfels˝o (a kurrens) m´atrix a kor´abban
a m´asodik szinten l´ev˝ o m´atrix lesz. Ha a verem csak egy m´atrixot tartalmaz, akkor a
glPopMatrix() parancs kiad´asa hib´at eredm´enyez.
40
6. fejezet
Megvil´ag´ıt´as
A megvil´ag´ıt´as modellez´es´enek fontos szerepe van a val´oszer˝ u k´epek el˝o´all´ıt´as´ aban,
seg´ıts´eg´evel jobban ´erz´ekeltethet˝o a m´elys´eg ´es a t´erbelis´eg. A sz´am´ıt´ og´epi grafik´aban
haszn´alt megvil´ag´ıt´ asi sz´am´ıt´ asok ´altal´ aban nem valamely fizikai folyamat le´ır´ asai, ha-
nem tapasztalati ´ uton el˝o´all´ıtott k´epletek, melyekr˝ ol az id˝ok sor´an bebizonyosodott, hogy
el´eg val´ oszer˝ u l´atv´ anyt biztos´ıtanak.
Az OpenGL csak a cs´ ucspontokban sz´am´ıtja ki a sz´ınt, a cs´ ucspontok ´altal defini´alt
alakzatok (pl. szakasz, poligon) t¨obbi pontj´aban az ´arnyal´asi modellt˝ol f¨ ugg˝oen (l´asd a 4.2.
szakaszt) vagy a cs´ ucspontokban kisz´am´ıtott ´ert´ekek line´aris interpol´aci´oj´ aval hat´arozza
meg, vagy valamely cs´ ucspont sz´ın´et haszn´alja. Egy cs´ ucspont sz´ıne nem m´as, mint a
pontb´ ol a n´ez˝opontba (a szembe) eljut´o f´eny sz´ıne, amit a cs´ ucspontot tartalmaz´o objek-
tum anyag´anak tulajdons´agai, az ´abr´ azolt t´err´eszben uralkod´o f´enyviszonyok, tov´ abb´a az
´abr´ azolt alakzatok optikai k¨olcs¨ onhat´asai hat´aroznak meg. Az OpenGL viszonylag egy-
szer˝ u modellt alkalmaz, de m´eg ´ıgy is el´eg sok lehet˝os´eg¨ unk van ig´enyes, val´oszer˝ u k´epek
l´etrehoz´ as´ara.
Az ´abr´azoland´ o t´err´eszben uralkod´o f´enyviszonyok le´ır´as´ ara t¨obb f´eny¨ osszetev˝ot vesz
figyelembe a rendszer.
• Az ´abr´ azoland´o objektumok ´altal kibocs´atott f´eny, melyre nincsenek hat´assal a
f´enyforr´asok.
• A k¨ornyezeti f´eny (ambient light) az ´abr´ azoland´ o t´err´eszben minden¨ utt jelen l´ev˝o,
´alland´ o intenzit´ as´ u f´eny, melynek forr´asa, ir´anya nem ismert (gondoljunk olyan nap-
pali f´enyre, amikor a nap a felh˝ok m¨og¨ott van). A t´err´eszben jelen l´ev˝o k¨ornye-
zeti f´eny k´et r´eszb˝ol tev˝odik ¨ossze. Egyr´eszt a t´erben a f´enyforr´ asokt´ol f¨ uggetlen¨ ul
(azokra vissza nem vezethet˝ o) jelen l´ev˝ o k¨ornyezeti f´enyb˝ ol – ezt glob´alis k¨ornye-
zeti f´enynek is nevezik –, m´asr´eszt a f´enyforr´asokb´ ol sz´armaz´o (pl. t¨obbsz¨ or¨os
t¨ ukr¨ oz˝od´esek ´ utj´an keletkez˝o) k¨ornyezeti f´enyb˝ ol, amit a f´enyforr´ asok k¨ornyezeti
f´enykomponens´enek nevez¨ unk.
• A sz´ort f´enynek (diffuse light) van ir´anya, mindig valamelyik f´enyforr´asb´ ol j¨on.
F˝o jellemz˝oje, hogy az objektumokkal ¨ utk¨ozve minden ir´anyba azonos m´odon ´es
m´ert´ekben ver˝ odik vissza, teh´at teljesen mindegy, hogy milyen ir´anyb´ ol n´ezz¨ uk
az objektumokat, a hat´as csak a f´enyforr´ ast´ol, az anyagtulajdons´agokt´ ol ´es a
cs´ ucspontbeli norm´alist´ ol f¨ ugg.
41
• A t¨ ukr¨ oz¨ott f´enynek (specular light) is van ir´anya ´es forr´asa, ´es hat´asa nemcsak az
anyagtulajdons´agokt´ ol ´es a cs´ ucspontbeli norm´alist´ ol, hanem a n´ez˝ opontt´ol is f¨ ugg.
Gondoljunk egy sima fel¨ ulet˝ u f´emg¨ombre, amit er˝os, koncentr´ alt f´ennyel vil´ag´ıtunk
meg. Megfelel˝o sz¨ogb˝ ol n´ezve egy f´enyes (t¨obbnyire feh´er) foltot l´atunk, melynek
m´erete ´es helye a n´ez˝opontt´ ol f¨ ugg, fej¨ unket mozgatva a folt is mozog, m´ıgnem
elt˝ unik.
Az objektumok anyag´ anak optikai tulajdons´again´al megadhatjuk az objektum ´altal ki-
bocs´atott f´enyt, tov´abb´ a azt, hogy az anyag milyen m´ert´ekben veri vissza a k¨ornyezeti, a
sz´ort ´es a t¨ ukr¨oz¨ ott f´enyt. Az ut´obbi h´arom, az anyagra jellemz˝o konstansok, az un. viss-
zaver˝od´esi egy¨ utthat´ok. A megvil´ag´ıt´asnak ´es az objektumok optikai tulajdons´againak
a t´erbelis´eg ´erz´ekeltet´es´eben j´atszott szerep´et illusztr´alja a 6.1. ´abra.
6.1. ´abra. G¨omb k´epei k¨ ul¨ onb¨oz˝ o f´eny¨ osszetev˝ok figyelembe v´etel´evel: a) megvil´ag´ıt´ as
n´elk¨ ul; b) k¨ornyezeti f´ennyel ´es sz´ort visszaver˝od´essel; c) k¨ornyezeti f´ennyel ´es t¨ ukr¨ oz˝ o
visszaver˝od´essel
Nincs lehet˝os´eg a f´enyt¨or´es, az alakzatok optikai k¨olcs¨ onhat´as´ anak (´arny´ekol´ as, objek-
tumok t¨ ukr¨oz˝ od´ese egym´ason) ´es fel¨ uleti ´erdess´eg modellez´es´ere.
Az OpenGL-ben a k¨ ul¨ onb¨oz˝ o t´ıpus´ u f´enyeket, a f´enyvisszaver˝ o k´epess´eget jellemz˝o
konstansokat RGBA komponenseikkel kell megadni, vagyis vektork´ent kezelend˝ok (l´asd
a 4. fejezetet). Ezen sz´ınvektorokon a szok´asos ¨osszead´ as ´es skal´ arral val´ o szorz´as
m˝ uvelet´en k´ıv¨ ul egy speci´alis szorz´ast is ´ertelmez¨ unk, amit *-gal jel¨ol¨ 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 megvil´ag´ıt´as befoly´asol´ as´ara h´arom lehet˝os´eg van:
• f´enyforr´asok (f´enyek) megad´asa;
• az anyagok optikai tulajdons´againak el˝o´ır´ asa;
• megvil´ag´ıt´asi modell defini´al´ asa.
A tov´ abbiakban azt felt´etelezz¨ uk, hogy a sz´ın megad´asi m´odja RGBA, a sz´ınindex
m´odra a fejezet v´eg´en t´er¨ unk ki r¨oviden.
42
6.1. Megvil´ag´ıt´asi modell
Az OpenGL megvil´ag´ıt´asi modellj´enek h´arom ¨osszetev˝oje van:
• glob´alis k¨ornyezeti f´eny,
• a n´ez˝ opont helye (v´egesben vagy v´egtelen t´avolban van),
• a poligonok fel´enk n´ez˝o ´es h´ats´ o oldalai egyform´an, vagy k¨ ul¨ onb¨ oz˝ok´eppen keze-
lend˝ok.
A megvil´ag´ıt´ asi modellt a glLightModel*() paranccsal adhatjuk meg.
void glLightModel¦if¦ (GLenum pname, TYPE param);
pname ´ert´eke GL LIGHT MODEL LOCAL VIEWER ´es
GL LIGHT MODEL TWO SIDE lehet.
void glLightModel¦if¦v (GLenum pname, const TYPE *param);
pname ´ert´eke GL LIGHT MODEL AMBIENT, GL LIGHT MODEL LOCAL-
VIEWER ´es GL LIGHT MODEL TWO SIDE lehet.
A GL LIGHT MODEL AMBIENT param´eterrel a glob´alis (f´enyforr´ asokt´ol f¨ uggetlen)
k¨ornyezeti f´enyt adhatjuk meg. Alap´ertelmez´ese (0.2, 0.2, 0.2, 1.), ami azt biztos´ıtja, hogy
l´assunk valamit m´eg akkor is, ha nem adunk meg egyetlen f´enyforr´ ast sem.
A GL LIGHT MODEL LOCAL VIEWER param´eter a t¨ ukr¨ oz˝od˝ o f´eny hat´as´ara ke-
letkez˝o f´enyes folt(ok) sz´am´ıt´ as´at befoly´asolja. Ezen folt kisz´am´ıt´ as´ ahoz a cs´ ucspontbeli
norm´alis, a cs´ ucspontb´ ol a f´enyforr´ asba, valamint a n´ez˝opontba mutat´o vektorok
sz¨ uks´egesek. Ha a n´ez˝opont v´egtelen t´avoli, vagyis a teret p´arhuzamosan vet´ıtj¨ uk a
k´eps´ıkra, akkor a cs´ ucspontokb´ol a n´ez˝opontba mutat´ o ir´anyok megegyeznek, ami lee-
gyszer˝ us´ıti a sz´am´ıt´ asokat. A v´egesben l´ev˝o (val´ odi) n´ez˝ opont haszn´alat´aval val´oszer˝ ubb
eredm´enyt kapunk, de a sz´am´ıt´ asi ig´eny megn˝o, mivel minden egyes cs´ ucspontra
ki kell sz´am´ıtani a n´ez˝opontba mutat´o ir´anyt. A n´ez˝ opont hely´enek ilyen ´ertelm˝ u
“megv´altoztat´ asa” nem jelenti a n´ez˝ opont hely´enek t´enyleges megv´altoztat´ as´at, ez
puszt´an a megvil´ag´ıt´ asi sz´am´ıt´asokra van hat´assal.
A GL LIGHT MODEL LOCAL VIEWER param´eter alap´ertelmez´ese GL FALSE,
mely esetben a rendszer a n´ez˝ opontkoordin´ata-rendszer z tengely´enek (0., 0., 1., 0.) pontj´ at
haszn´alja n´ez˝opontk´ent a t¨ ukr¨oz˝ od˝ o visszaver˝ od´es sz´am´ıt´ as´ an´al. A param´eter GL TRUE
´ert´eke eset´en a n´ez˝ opont a n´ez˝opontkoordin´ata-rendszer orig´oja lesz.
Mint azt a 3.3.3. pontban l´attuk, az OpenGL a poligonok oldalait megk¨ ul¨ onb¨ ozteti,
´ıgy besz´elhet¨ unk fel´enk n´ez˝o ´es h´ats´o poligonokr´ol (amelyek h´atoldal´at l´atjuk). Ny´ılt
fel¨ uletek (ezeket k¨ozel´ıt˝o poligonh´al´o) eset´en a nem fel´enk n´ez˝o poligonokat – az el˝oz˝ o
terminol´ogia szerint a h´ats´ o lapokat – is l´athatjuk, de az ezekkel kapcsolatos megvil´ag´ıt´ asi
sz´am´ıt´asok nem a val´os´ agot t¨ ukr¨ oz˝o eredm´enyre vezetn´enek. Ez´ert lehet˝os´eg van arra,
hogy a poligonokat k´etoldal´ unak tekintve, mindk´et oldalt a megvil´ag´ıt´ asnak megfelel˝oen
´abr´ azoljunk. Ezt ´ ugy ´erhetj¨ uk el, hogy a GL LIGHT MODEL TWO SIDE param´eternek
a GL TRUE ´ert´eket adjuk. Ekkor a rendszer a h´ats´ o lapok norm´alisait megford´ıtja (−1.-
el megszorozza) ´es ´ıgy v´egzi el a sz´am´ıt´asokat, ami m´ar helyes eredm´enyre vezet. Ez
43
a lehet˝os´eg a GL LIGHT MODEL TWO SIDE param´eternek adott GL FALSE ´ert´ekkel
sz¨ untethet˝ o meg, ami egyben az alap´ertelmez´es is.
Ahhoz, hogy az OpenGL megvil´ag´ıt´asi sz´am´ıt´ asokat v´egezzen, enged´elyezni kell a
megvil´ag´ıt´ast a glEnable(GL LIGHTING); paranccsal. A megvil´ag´ıt´ ast a glDisa-
ble(GL LIGHTING); paranccsal tilthatjuk le. Alap´ertelmez´es szerint a megvil´ag´ıt´ as
nem enged´elyezett, ilyen esetben a cs´ ucspont sz´ın´et a megad´asakor kurrens rajzol´asi sz´ın
hat´arozza meg.
6.2. F´enyforr´as megad´asa
Az OpenGL-ben legal´abb nyolc f´enyforr´ ast adhatunk meg. Egy-egy f´enyforr´asnak sok
jellemz˝oje van, mint pl. sz´ıne, helye, ir´anya, ´es egyenk´ent lehet ˝oket ki- ´es bekapcsolni.
void glLight¦if¦ (GLenum light, GLenum pname, TYPE param);
void glLight¦if¦v (GLenum light, GLenum pname, const TYPE *param);
A light azonos´ıt´ oj´ u f´enyforr´ast hozza l´etre. Minden OpenGL implement´ aci´oban le-
gal´abb 8 f´enyforr´ ast lehet megadni, a pontos fels˝o korl´ atot a GL MAX LIGHTS pa-
ram´eterrel megh´ıvott glGetIntegerv() paranccsal kaphatjuk meg. A light param´eter
´ert´eke GL LIGHTi 0 ≤ i < GL MAX LIGHTS lehet. A f¨ uggv´eny megh´ıv´ as´aval a light
f´enyforr´ asnak a pname param´eter ´ert´ek´et lehet megadni. A f¨ uggv´eny els˝o alakj´aval (a
skal´ar v´altozattal) csak az egyetlen skal´ arral megadhat´o param´eterek ´all´ıthat´ ok be. A
a 6.1. t´abl´ azat pname lehets´eges ´ert´ekeit ´es azok alap´ertelmez´es´et tartalmazza. Ha az
alap´ertelmez´es a GL LIGHT0 ´es a GL LIGHTi, (i > 0) f´enyforr´ asokra k¨ ul¨onb¨ ozik, akkor
azokat k¨ ul¨ on felt¨ untetj¨ uk.
Az i-edik f´enyforr´ ast a glEnable(GL LIGHTi); paranccsal lehet bekapcsolni, a glDi-
sable(GL LIGHTi); paranccsal pedig ki lehet kapcsolni.
6.2.1. A f´eny sz´ıne
A f´enyforr´ as ´altal kibocs´atott f´eny h´arom ¨osszetev˝ ob˝ ol ´all: a k¨ornyezeti f´eny (ambient
light, GL AMBIENT), a sz´ort f´eny (diffuse light, GL DIFFUSE) ´es a t¨ ukr¨ oz¨ott f´eny (spe-
cular light, GL SPECULAR). Mindh´arom sz´ın´et az RGBA komponenseivel kell megadni.
A k¨ornyezeti f´eny¨ osszetev˝o azt adja meg, hogy az adott f´enyforr´ as milyen m´ert´ekben
j´arul hozz´a a t´err´esz k¨ornyezeti f´eny´ehez. A f´enyforr´as sz´ort f´eny´enek a sz´ıne fejezi ki
legink´abb azt, amit mi a f´eny sz´ın´enek l´atunk. A t¨ ukr¨ oz¨ ott f´eny¨osszetev˝ o befoly´asolja
az objektumok k´ep´en megjelen˝o f´enyes folt sz´ın´et. A sima fel¨ ulet˝ u t´argyakon (pl. ¨ uveg)
tapasztalhatunk ilyen jelens´eget, ´es a f´enyes folt leggyakrabban feh´er sz´ın˝ unek l´atszik. A
val´oszer˝ u hat´as ´erdek´eben a GL DIFFUSE ´es GL SPECULAR param´etereknek c´elszer˝ u
ugyanazt az ´ert´eket adni.
6.2.2. A f´enyforr´asok helye
A GL POSITION param´eterrel a f´enyforr´ as hely´et adhatjuk meg. Ez lehet v´egesben l´ev˝ o,
vagy v´egtelen t´avoli (w = 0) pont is. A v´egtelen t´avolban l´ev˝o f´enyforr´ asb´ ol kibocs´atott
44
sugarak p´arhuzamosak – ilyennek tekinthet˝ok a val´os´ agban a napsugarak –, ´es a f´enyforr´as
poz´ıci´oja ezek ir´any´ aval adhat´o meg. (Vigy´azzunk, itt nem val´ odi homog´en koordin´at´ akkal
kell megadnunk a f´enyforr´ as hely´et, ugyanis a −1-gyel val´o szorz´as m´as eredm´enyt ad!)
A v´egesben l´ev˝o f´enyforr´asok – sok rendszerben ezeket pontszer˝ u f´enyforr´ asnak is neve-
zik – azonos intenzit´ as´ u f´enyt bocs´atanak ki minden ir´anyba. A rendszer a f´enyforr´ as
hely´et (ak´ar v´egesben, ak´ar v´egtelen t´avolban van) a kurrens n´ez˝opont-modell tran-
szform´aci´ oval a n´ez˝ opontkoordin´ata-rendszerbe transzform´alja, mivel a megvil´ag´ıt´assal
kapcsolatos sz´am´ıt´ asokat itt v´egzi el.
V´egesben l´ev˝ o f´enyforr´as eset´en megadhat´o, hogy a f´enyforr´ast´ ol t´avolodva milyen
m´ert´ekben cs¨okken a f´eny er˝oss´ege, azaz hogyan tompul a f´eny (attenuation). A f´eny
tompul´as´ at a
T = min
_
1
c
0
+ c
1
d + c
2
d
2
, 1
_
(6.1)
kifejez´essel ´ırja le a rendszer, ahol d a cs´ ucspontnak a f´enyforr´ast´ ol m´ert
t´avols´ aga, c
0
a t´avols´ agt´ol f¨ uggetlen (GL CONSTANT ATTENUATION), c
1
a
t´avols´ aggal ar´anyos (GL LINEAR ATTENUATION), c
2
pedig a t´avols´ ag n´egyzet´evel
ar´anyos (GL QUADRATIC ATTENUATION ) egy¨ utthat´oja a f´eny tompul´as´ anak.
Alap´ertelmez´es szerint c
0
= 1., c
1
= c
2
= 0., azaz T = 1., vagyis a f´eny nem tompul.
Ezt az ´ert´eket haszn´alja a rendszer v´egtelen t´avoli f´enyforr´ as eset´en is. A f´enytompul´as
a f´enyforr´asb´ ol kibocs´atott f´eny mindh´arom ¨osszetev˝oj´ere (k¨ornyezeti, sz´ort, t¨ ukr¨ oz¨ ott)
hat, de a glob´alis k¨ornyezeti f´enyre ´es az ´abr´ azolt objektumok ´altal kibocs´atott f´enyre
nem.
6.2.3. Reflektor
V´egesben l´ev˝o f´enyforr´asb´ ol reflektort is l´etrehozhatunk. Ennek ´erdek´eben a kibocs´atott
f´enysugarakat forg´ask´ up alak´ u erny˝ ovel lehat´aroljuk. Reflektor l´etrehoz´ as´ ahoz meg kell
adnunk a f´enyk´ up tengely´enek ir´any´at (GL SPOT DIRECTION) ´es f´el ny´ıl´assz¨ og´et
(GL SPOT CUTOFF), tov´abb´ a azt, hogy a f´eny intenzit´ asa hogyan cs¨okken a k´ up ten-
gely´et˝ ol a pal´ast fel´e haladva. Reflektor f´enyforr´ asb´ ol csak akkor jut el f´eny a cs´ ucspontba,
ha a cs´ ucspontot ´es a f´enyforr´ast ¨osszek¨ot˝ o egyenes ´es a f´enyk´ up tengely´enek δ sz¨oge ki-
sebb, mint a k´ up β f´el ny´ıl´ assz¨oge (l´asd a 6.2. ´abr´at), vagyis ha δ < β, azaz cos δ > cos β,
mivel β ∈ [0., 90.]. A sz´am´ıt´asok sor´an a
cos δ =
a l
[a[ [l[
kifejez´est c´elszer˝ u haszn´alni, ahol a ´es l ´ertelmez´ese a 6.2. ´abra szerinti. Az I
l
f´enyt
kibocs´at´o reflektornak δ f¨ uggv´eny´eben bek¨ovetkez˝ o intenzit´ascs¨ okken´es´et az I
l
cos
r
δ kife-
jez´essel ´ırjuk le, ahol r (GL SPOT EXPONENT) nemnegat´ıv sz´am. Teh´at r = 0. eset´en
a f´eny intenzit´asa nem v´altozik a k´ upon bel¨ ul.
A GL SPOT CUTOFF param´eterrel a f´enyk´ up β f´el ny´ıl´ assz¨og´et adhatjuk meg fok-
ban. Az ´ert´ek vagy 180., vagy egy [0., 90.] intervallumbeli sz´am. Alap´ertelmez´ese 180.,
ami azt jelenti, hogy a f´enyforr´as nem reflektor, mivel minden ir´anyba bocs´at ki f´enyt.
A GL SPOT DIRECTION param´eterrel a f´enyk´ up a forg´astengely´enek ir´any´ at ad-
hatjuk meg. Alap´ertelmez´ese (0., 0., −1.). A rendszer ezt az ir´anyt is transzform´alja a
kurrens n´ez˝opont-modell transzform´aci´ oval.
45
6.2. ´abra. Reflektor f´enyforr´ as
A GL SPOT EXPONENT param´eterrel azt szab´alyozzuk, hogy a f´eny mennyire kon-
centr´alt, vagyis milyen m´ert´ekben cs¨okken az er˝oss´ege a f´enyk´ up tengely´et˝ol a pal´ast fel´e
haladva. Min´el nagyobb ez az ´ert´ek, ann´al koncentr´ altabb a f´eny. Az alap´ertelmez´es 0.,
ami azt jelenti, hogy a f´eny er˝oss´ege nem cs¨okken a pal´ast fel´e haladva.
Az i-edik f´enyforr´as reflektor hat´as´ at kifejez˝o skal´ ar
R
i
=
_
¸
¸
_
¸
¸
_
1, ha GL SPOT CUTOFF=180

, vagyis nem reflektor;
0, ha δ > β, vagyis a cs´ ucspont a f´enyk´ upon k´ıv¨ ul van;
_
max
_
a l
[a[ [l[
, 0
__
r
egy´ebk´ent;
(6.2)
ahol a ´es l a 6.2. ´abra szerinti vektorok, r pedig az i-edik f´enyforr´as
GL SPOT EXPONENT param´etere.
6.3. Anyagtulajdons´agok
Az OpenGL az ´abr´ azoland´o objektumok anyag´anak a k¨ovetkez˝ o optikai tulajdons´agait
veszi figyelembe:
• az objektum ´altal kibocs´atott f´enyt;
• az anyag milyen m´ert´ekben veri vissza a k¨ornyezeti, a sz´ort ´es a t¨ ukr¨oz¨ ott f´enyt;
• a ragyog´ast.
Ezeket a tulajdons´agokat nagyr´eszt a glMaterial*() paranccsal adhatjuk meg. Az
anyagnak a k¨ ul¨ onb¨oz˝ o f´enyeket visszaver˝ o k´epess´eg´et kifejez˝o konstansokat RGBA kom-
ponenseikkel adhatjuk meg, vagyis pontosan ´ ugy, mint mag´at a f´enyt.
Fontos tudni, hogy amennyiben a megvil´ag´ıt´ as enged´elyezett, az alakzatok sz´ın´ere a
rajzol´asi sz´ınnek nincs hat´asa! Ilyen esetben az alakzatok sz´ın´et a f´enyviszonyok ´es az
alakzatok optikai anyagtulajdons´agai hat´arozz´ak meg.
void glMaterial¦if¦ (GLenum face, GLenum pname, TYPE param);
void glMaterial¦if¦v (GLenum face, GLenum pname, const TYPE *param);
A megvil´ag´ıt´ asi sz´am´ıt´ asokn´al haszn´alt anyagtulajdons´agokat adhatjuk
meg seg´ıts´eg´evel. A face param´eter ´ert´eke GL FRONT, GL BACK ´es
46
GL FRONT AND BACK lehet, alap´ertelmez´ese GL FRONT AND BACK. Ezzel
azt ´all´ıtjuk be, hogy a pname param´eterhez rendelt ´ert´ekek a poligonok fel´enk n´ez˝ o
oldal´ara, h´ats´ o oldalukra, vagy mindkett˝ore vonatkozzanak. Ez a param´eter lehet˝ov´e
teszi, hogy a poligonok k¨ ul¨ onb¨oz˝ o oldalai k¨ ul¨ onb¨ oz˝o optikai tulajdons´ag´ uak legyenek.
pname lehets´eges ´ert´ekeit ´es a hozz´ajuk rendelhet˝o ´ert´ekek alap´ertelmez´es´et a 6.2.
t´abl´ azat tartalmazza. A f¨ uggv´eny els˝o (skal´ ar) form´aja csak a GL SHININESS param´eter
megad´asakor haszn´alhat´ o.
A GL AMBIENT param´eterrel azt adjuk meg, hogy az anyag milyen m´ert´ekben veri
vissza a k¨ornyezeti f´enyt. A visszavert k¨ornyezeti f´eny I
a
∗k
a
, ahol I
a
az ´abr´ azolt t´err´eszben
jelenl´ev˝ o ¨osszes k¨ornyezeti f´eny, k
a
pedig az anyag k¨ornyezeti f´eny visszaver˝od´esi egy¨ utt-
hat´oja.
A GL DIFFUSE param´eterrel azt szab´alyozzuk, hogy a fel¨ ulet milyen m´ert´ekben veri
vissza a cs´ ucspontba eljut´o sz´ort f´enyt. A visszaver´es m´ert´eke ezen fel¨ uleti konstanson
k´ıv¨ ul a cs´ ucspontbeli norm´alisnak ´es a cs´ ucspontb´ol a f´enyforr´asba mutat´o ir´anynak a
sz¨og´et˝ol is f¨ ugg. Min´el kisebb ez a sz¨og, ann´al nagyobb a visszaver˝od´es. A pontos ¨oss-
zef¨ ugg´es
D = max
_
l n
[l[ [n[
, 0
_
I
d
∗ k
d
(6.3)
ahol l a cs´ ucspontb´ol a f´enyforr´ asba (GL POSITION) mutat´o vektor, n a cs´ ucspontbeli
norm´alis (cos α = l n/ ([l[ [n[)), I
d
a cs´ ucspontba eljut´o sz´ort f´eny, k
d
pedig az anyag
sz´ort visszaver˝ od´esi egy¨ utthat´ oja. l, n ´es α ´ertelmez´ese a 6.3. ´abra szerinti.
6.3. ´abra. Sz´ort visszaver˝od´es
Minden f´enykomponensn´el ´es visszaver˝ od´esi egy¨ utthat´ on´al megadunk alfa (A) ´ert´eket
is, a rendszer azonban csak az anyagtulajdons´ag GL DIFFUSE param´eter´en´el mega-
dott alfa ´ert´eket rendeli a cs´ ucsponthoz, az ¨osszes t¨obbit figyelmen k´ıv¨ ul hagyja. A
GL DIFFUSE param´etern´el megadott f´enyvisszaver´esi konstans j´atssza a legnagyobb sze-
repet a fel¨ ulet sz´ın´enek kialak´ıt´ as´aban.
M´ıg a sz´ort visszaver˝ od´es m´ert´eke f¨ ugg a f´enyforr´ as ´es a fel¨ ulet k¨olcs¨ on¨os helyzet´et˝ ol,
a visszavert k¨ornyezeti f´eny ett˝ol f¨ uggetlen.
A val´ os´ agban az anyagok k¨ornyezeti ´es sz´ort visszaver˝ od´esi egy¨ utthat´oja ´altal´aban
megegyezik, ez´ert az OpenGL lehet˝os´eget biztos´ıt ezek egyidej˝ u megad´as´ ara. Erre szolg´al
a GL AMBIENT AND DIFFUSE param´eter.
A k¨ornyezeti ´es sz´ort f´enyek visszaver˝od´es´evel ellent´etben a szembe eljut´o t¨ ukr¨ oz¨ott
visszaver˝od´es f¨ ugg att´ol is, hogy honnan n´ezz¨ uk az objektumokat. Ezen k´ıv¨ ul szerepet
47
j´atszik m´eg a cs´ ucspontbeli norm´alis, a f´enyforr´ as poz´ıci´ oja, az anyag t¨ ukr¨oz¨ ott vissza-
ver˝od´esi egy¨ utthat´ oja ´es az anyag ragyog´ asi t´enyez˝ oje.
6.4. ´abra. T¨ ukr¨ oz¨ott visszaver˝ od´es
A 6.4. ´abra jel¨ol´eseit haszn´alva, a szembe eljut´o t¨ ukr¨ oz¨ott f´eny
S =
_
_
_
0, ha l n ≤ 0
max
__
s n
[s[ [n[
_
s
, 0
_
I
s
∗ k
s
, egy´ebk´ent
(6.4)
ahol s = l/ [l[ + v/ [v[, I
s
a cs´ ucspontba eljut´o t¨ ukr¨oz¨ ott f´eny, k
s
az anyag t¨ ukr¨oz˝ o
visszaver˝od´esi egy¨ utthat´oja (GL SPECULAR), s pedig az anyag ragyog´ asi kitev˝oje
(GL SHININESS).
Az anyag t¨ ukr¨oz¨ ott visszaver˝od´esi egy¨ utthat´oj´ at a GL SPECULAR param´eterrel, a
ragyog´asi kitev˝ot pedig a GL SHININESS-el adhatjuk meg. Az ut´obbi a [0., 128.] inter-
vallumon v´altozhat. Min´el nagyobb ez a kitev˝o, a f´enyes ter¨ ulet ann´al kisebb ´es ragyog´ obb
(jobban f´okusz´alt a f´eny).
A GL EMISSION param´eterrel az objektum ´altal kibocs´atott f´enyt adhatjuk meg.
Ezt a lehet˝os´eget ´altal´ aban l´amp´ ak, vagy m´as f´enyforr´asok modellez´es´ehez haszn´aljuk.
Ilyenkor c´elszer˝ u m´eg az adott objektumban egy f´enyforr´ ast is l´etrehoznunk a vil´ag´ıt´ otest
hat´as el´er´ese ´erdek´eben.
6.4. Az anyagtulajdons´agok v´altoztat´asa
Egy-egy anyagtulajdons´ag mindaddig ´erv´enyben van, m´ıg meg nem v´altoztatjuk. A
v´altoztat´ as tulajdons´agonk´ent t¨ort´enik. Ezt megtehetj¨ uk az el˝oz˝oekben ismertetett gl-
Material*() paranccsal, de arra is lehet˝os´eg van, hogy valamely anyagtulajdons´agot a
rajzol´asi sz´ınhez kapcsoljunk, amivel azt ´erj¨ uk el, hogy az adott anyagtulajdons´ag a raj-
zol´asi sz´ınnek (glColor*()) megfelel˝oen fog v´altozni. Ezzel a programunk hat´ekonys´ ag´at
n¨ovelhetj¨ uk.
void glColorMaterial (GLenum face, GLenum mode);
A poligonok face param´eterrel megadott oldal´anak a mode param´eterrel ki-
jel¨olt tulajdons´ag´ at a kurrens rajzol´asi sz´ınhez kapcsolja. A kurrens rajzol´asi sz´ın
48
megv´altoztat´ asa (glColor*()) a mode anyagtulajdons´ag automatikus v´altoztat´as´ at
eredm´enyezi. A face ´ert´eke GL FRONT, GL BACK ´es GL FRONT AND BACK le-
het, alap´ertelmez´es GL FRONT AND BACK. A mode param´eter a GL AMBIENT,
GL DIFFUSE, GL AMBIENT AND DIFFUSE, GL SPECULAR ´es GL EMISSION
´ert´ekeket veheti fel, alap´ertelmez´es a GL AMBIENT AND DIFFUSE.
A glColorMaterial() parancs kiad´asa ut´an enged´elyezn¨ unk kell a hozz´akapcsol´ast
a glEnable(GL COLOR MATERIAL) paranccsal, ´es ha m´ar nem akarjuk haszn´alni az
¨osszekapcsol´ast, akkor a glDisable(GL COLOR MATERIAL) paranccsal le kell tilta-
nunk. A glColorMaterial() parancsot akkor haszn´aljuk, ha egyetlen anyagtulajdons´agot
kell gyakran – sok cs´ ucspontban – v´altoztatnunk, egy´ebk´ent a glMaterial*() parancs
haszn´alata el˝ony¨ osebb.
6.5. A cs´ ucspontok sz´ın´enek meghat´aroz´asa meg-
vil´ag´ıt´as eset´en
n f´enyforr´ast felt´etelezve a cs´ ucspontokba eljut´o V f´eny
V = I
e
+I
g
∗ k
a
+
n−1

i=0
T
i
R
i
(A
i
+D
i
+S
i
) (6.5)
alakban ´ırhat´o fel, ahol
I
e
az objektum ´altal kibocs´atott f´eny;
I
g
a glob´alis k¨ornyezeti f´eny;
T
i
az i-edik f´enyforr´as tompul´asa a (6.1) ¨osszef¨ ugg´es szerint;
R
i
az i-edik f´enyforr´ as reflektor egy¨ utthat´ oja a (6.2) ¨osszef¨ ugg´es szerint;
A
i
= I
ai
∗k
a
az i-edik f´enyforr´ as k¨ornyezeti f´enykomponens´enek ´es az anyag k¨ornyezeti
f´eny visszaver˝ od´esi egy¨ utthat´oj´ anak a szorzata;
D
i
az i-edik f´enyforr´ asb´ol a szembe eljut´o sz´ort f´eny a (6.3) ¨osszef¨ ugg´es szerint;
S
i
az i-edik f´enyforr´asb´ ol a szembe eljut´o t¨ ukr¨oz¨ ott f´eny a (6.4) ¨osszef¨ ugg´es szerint.
Ezen sz´am´ıt´asok ut´an a rendszer a kapott RGBA ´ert´ekeket a [0., 1.] intervallumra lev´agja.
Ahhoz teh´at, hogy az objektumok megvil´ag´ıt´as szerint legyenek ´abr´azolva defini´alni
kell egy megvil´ag´ıt´asi modellt (glLightModel()); enged´elyezni kell a megvil´ag´ıt´ast
(glEnable(GL LIGHTING)); f´enyforr´ ast kell l´etrehozni (glLight*()) ´es azt be kell kap-
csolni (glEnable(GL LIGHTi)); anyagtulajdons´agokat kell megadni (glMaterial*()).
6.6. Megvil´ag´ıt´as sz´ınindex m´odban
Sz´ınindex m´odban az RGBA komponensekkel megadott megvil´ag´ıt´ asi param´etereknek
vagy nincs hat´asuk, vagy speci´alisan ´ertelmezettek. Ha csak lehet, ker¨ ulj¨ uk el a meg-
vil´ag´ıt´as haszn´alat´at sz´ınindex m´odban. Az RGBA form´aban megadott f´enyforr´assal kap-
csolatos param´eterek k¨oz¨ ul csak a GL DIFFUSE ´es GL SPECULAR ´ert´ekeket haszn´alja a
rendszer. Az i-edik f´enyforr´as sz´ort, illetve t¨ ukr¨ oz¨ott f´enykomponens´et sz´ınindex m´odban
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¨ ugg´esekkel sz´am´ıtja ki a rendszer, ahol R(n), G(n), B(n) a sz´ınpaletta n-edik
sz´ın´enek RGB komponenseit jel¨oli. A 0.3, 0.59, 0.11 egy¨ utthat´ ok az emberi szem
sz´ın´erz´ekel˝ o k´epess´eg´enek felelnek meg, vagyis a szem a z¨old sz´ınre a leg´erz´ekenyebb ´es a
k´ekre a legkev´esb´e. A
void glMaterial¦if¦v (GLenum face, GL COLOR INDEXES, const TYPE *param);
paranccsal az anyag sz´ın´enek k¨ornyezeti, sz´ort ´es t¨ ukr¨oz¨ ott ¨osszetev˝ oj´et, pontosab-
ban azok sz´ınindexeit adhatjuk meg. Alap´ertelmez´es szerint a k¨ornyezeti komponens
sz´ınindexe 0., a sz´ort ´es a t¨ ukr¨ oz¨ ott komponens´e 1. A glColorMaterial() parancsnak
nincs hat´asa sz´ınindex m´odban.
Mint az v´arhat´ o, a cs´ ucspontb´ol a szembe eljut´o f´eny sz´ın´enek kisz´am´ıt´asa is m´ask´epp
t¨ort´enik, mint RGBA m´odban. A (6.5) kifejez´esben a kibocs´atott ´es a glob´alis k¨ornyezeti
f´eny (I
e
´es I
g
) 0, a f´enytompul´ ast ´es a f´enysz´or´ o hat´ast (T
i
, R
i
) ugyan´ ugy sz´am´ıtja ki
a rendszer, mint RGBA m´odban. A f´enyforr´asoknak nincs k¨ornyezeti f´eny komponense
(A
i
= 0); a D
i
kisz´am´ıt´ as´ara haszn´alt (6.3) kifejez´esben I
d
∗ k
d
-t helyettes´ıts¨ uk d
ci
-vel,
az S
i
sz´am´ıt´as´ ahoz haszn´alt (6.4) kifejez´esben I
s
∗ k
s
-t s
ci
-vel. Az ´ıgy m´odos´ıtott sz´ort ´es
t¨ ukr¨ oz¨ott ¨osszetev˝ ok ¨osszeg´et jel¨olj¨ 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 param´eterrel megadott k¨ornyezeti,
sz´ort ´es t¨ ukr¨ oz¨ ott f´eny sz´ın´enek indexe. A cs´ ucspont v´egs˝o sz´ıne
c = min ¦c
0
, s
m
¦
Az ´ıgy kapott ´ert´eket a rendszer eg´esz sz´amm´a konvert´ alja, majd bitenk´enti ´es (AND)
m˝ uveletbe hozza a 2
n
− 1 ´ert´ekkel, ahol n a sz´ınindex-pufferben az egy sz´ın sz´am´ ara
fenntartott bitek sz´ama.
50
6.1. t´abl´ azat. A f´enyforr´ast meghat´aroz´o param´eterek
pname alap´ertelmez´ese jelent´ese
GL AMBIENT (0., 0., 0., 1.) a f´eny k¨ornyezeti
¨osszetev˝ oj´enek RGBA
komponensei
GL DIFFUSE GL LIGHT0
eset´en (1., 1., 1., 1.)
egy´ebk´ent
(0., 0., 0., 1.)
a f´eny sz´ort ¨ossze-
tev˝oj´enek RGBA
komponensei
GL SPECULAR GL LIGHT0
eset´en (1., 1., 1., 1.)
egy´ebk´ent
(0., 0., 0., 1.)
a f´eny t¨ ukr¨oz˝ o ¨oss-
zetev˝oj´enek RGBA
komponensei
GL POSITION (0., 0., 1., 0.) a f´enyforr´ as helye
(x, y, z, w)
GL SPOT DIRECTION (0., 0., −1.) a reflektor (x, y, z)
ir´anya
GL SPOT EXPONENT 0. a reflektor
f´enyerej´enek
cs¨okken´ese
GL SPOT CUTOFF 180. a reflektor
forg´ask´ upj´anak f´el
ny´ıl´ assz¨oge
GL CONSTANT ATTENUATION 1. a f´eny tompul´as´ anak
konstans tagja
GL LINEAR ATTENUATION 0. a f´enytompul´as
line´aris tagj´anak
egy¨ utthat´ oja
GL QUADRATIC ATTENUATION 0. a f´enytompul´as
m´asodfok´ u tagj´anak
egy¨ utthat´ oja
51
6.2. t´abl´azat. Az anyagtulajdons´ag param´eterei
pname alap´ertelmez´es jelent´es
GL AMBIENT (0.2, 0.2, 0.2, 1.) k¨ornyezeti f´eny vissza-
ver˝od´esi egy¨ utthat´ o
GL DIFFUSE (0.8, 0.8, 0.8, 1.) sz´ort f´eny visszaver˝od´esi
egy¨ utthat´ o
GL AMBIENT AND DIFFUSE (0.8, 0.8, 0.8, 1.) k¨ornyezeti ´es sz´ort f´eny viss-
zaver˝od´esi egy¨ utthat´ o
GL SPECULAR (0., 0., 0., 1.) t¨ ukr¨ oz˝o f´eny visszaver˝od´esi
egy¨ utthat´ o
GL SHININESS 0. ragyog´as
GL EMISSION (0., 0., 0., 1.) kibocs´atott f´eny
GL COLOR INDEXES (0, 1, 1) k¨ornyezeti, sz´ort ´es t¨ ukr¨ oz˝o
visszaver˝od´es sz´ınindexe
52
7. fejezet
Display-lista
A display-lista OpenGL parancsok csoportja, melyet k´es˝ obbi v´egrehajt´as c´elj´ ab´ol
t´arolunk. A display-lista megh´ıv´ asakor a benne t´arolt parancsokat abban a sorrendben
hajtja v´egre a rendszer, ahogy kor´abban a list´ara ker¨ ultek. N´eh´any – a k´es˝ obbiekben felso-
rolt – kiv´etelt˝ ol eltekintve, az OpenGL parancsok ak´ar list´aban t´arolhat´ ok, ak´ar azonnal
v´egrehajthat´ok. Ez a k´et lehet˝os´eg tetsz˝olegesen kombin´alhat´ o egy programon bel¨ ul.
A display-lista lehet˝os´eget els˝osorban a h´al´ozati k¨ornyezetben futtatott programok
optim´alis m˝ uk¨od´ese ´erdek´eben hozt´ak l´etre. Az optimaliz´al´as m´odja ´es m´ert´eke imple-
ment´aci´ of¨ ugg˝ o, az azonban garant´ alt, hogy a display-list´ ak haszn´alata sohasem cs¨okken-
theti a teljes´ıtm´enyt, m´eg akkor sem, ha egyetlen g´epen dolgozunk – a kliens ´es a szerver
g´ep megegyezik –, ugyanis a rendszer, ha csak lehets´eges, a grafikus hardver ig´enyeinek
megfelel˝oen t´arolja a lista parancsait. A display-lista parancs cache, nem pedig dinamikus
adatb´azis, ennek k¨ovetkezt´eben tartalma ut´olag nem m´odos´ıthat´o ´es a felhaszn´al´ o nem
f´er hozz´a a list´an t´arolt adatokhoz.
Arra nincsen garancia, hogy minden OpenGL implement´aci´ o optimaliz´alja a display-
lista m˝ uk¨od´es´et, de az biztos, hogy egyetlen implement´aci´ oban sem kev´esb´e hat´ekony
a display-list´ an t´arolt parancsok v´egrehajt´asa, mint ugyanazok k¨ozvetlen m´odban val´o
v´egrehajt´asa. Azt azonban figyelembe kell venn¨ unk, hogy a display-list´ak haszn´alata
n´emi adminisztr´aci´oval j´ar, ez´ert t´ ul r¨ovid list´ak haszn´alata eset´en a lista v´egrehajt´as´ab´ ol
sz´armaz´ o el˝ony elhanyagolhat´ ov´a v´alhat az adminisztr´aci´o okozta plusz munk´ ahoz k´epest.
Az al´abbiakban az alkalmaz´ asok n´eh´ any optimaliz´al´asi lehet˝os´eg´et soroljuk fel, vagyis
azt, hogy milyen esetekben c´elszer˝ u display-list´akat haszn´alni.
• M´atrixm˝ uveletek (l´asd az 5. fejezet). Mivel a m´atrixok kisz´am´ıt´ asa id˝oig´enyes lehet,
tov´ abb´a ´altal´ aban a m´atrixok inverz´ere is sz¨ uks´eg van.
• Raszteres bitt´erk´epek ´es k´epek (l´asd a 9. fejezet). Az a forma, ahogyan megad-
juk a raszteres adatokat, ´altal´ aban nem egyezik meg a grafikus hardver sz´am´ ara
sz¨ uks´eges form´atummal. A display-lista leford´ıt´asa sor´an az OpenGL val´ osz´ın˝ uleg
a hardver sz´am´ara optim´alis form´atumban t´arolja, ez´ert a lista v´egrehajt´asa sokkal
hat´ekonyabb lehet, mint a parancsok k¨ozvetlen kiad´asa.
• F´enyforr´asok, anyagtulajdons´agok, megvil´ag´ıt´ asi modell (l´asd a 6. fejezetet).
• Text´ ur´ ak (l´asd a 13. fejezetet).
53
• Poligonok kit¨olt´ese mint´aval.
• K¨od, atmoszf´erikus hat´asok (l´asd a 8.3. szakaszt).
• Opcion´alis v´ag´ os´ıkok haszn´alata (l´asd az 5.2. szakaszt).
7.1. Display-lista l´etrehoz´asa, v´egrehajt´asa
Display-list´at a glNewList() ´es glEndList() parancsok k¨oz¨ott kiadott OpenGL paran-
csokkal lehet l´etrehozni. Egyszerre csak egy lista hozhat´o l´etre. A glEndList() parancs
kiad´asa OpenGL hib´at eredm´enyez, ha nem el˝ozi meg lez´aratlan glNewList() parancs.
void glNewList (GLenum list, GLenum mode);
Display-lista kezdet´et jel¨oli meg. Az ezt k¨ovet˝ o OpenGL parancsok – a k´es˝ obbiekben
felsoroland´o kiv´etelekt˝ ol eltekintve – a list´ara ker¨ ulnek mindaddig, am´ıg a glEndList()
parancsot ki nem adjuk. A glNewList() ´es glEndList() z´ar´ ojelp´ ar k¨oz¨ ott kiadott list´an
nem t´arolhat´o parancsokat k¨ozvetlen¨ ul v´egrehajtja a rendszer a lista l´etrehoz´ asa sor´an.
A list param´eter pozit´ıv eg´esz sz´am lehet, mely a lista glob´alis azonos´ıt´ oja lesz. Ha
m´ar l´etezik ilyen azonos´ıt´ oj´ u lista, akkor azt a rendszer b´armif´ele figyelmeztet´es n´elk¨ ul
fel¨ ul´ırja. A mode param´eter ´ert´eke GL COMPILE vagy GL COMPILE AND EXECUTE
lehet. GL COMPILE eset´en a parancsok nem ker¨ ulnek v´egrehajt´asra mik¨ozben a list´ara
ker¨ ulnek, teh´at csak a display-list´ anak megfelel˝o form´atumra konvert´ alja a rendszer a
parancsokat, ´es t´arolja ˝oket. GL COMPILE AND EXECUTE eset´en a konvert´ al´as ´es
t´arol´ as mellet a rendszer v´egre is hajtja a parancsokat ´ ugy, mintha k¨ozvetlen v´egrehajt´asi
m´odban adtuk volna ki azokat.
void glEndList (void);
A display-lista v´eg´et jel¨oli meg, kiad´as´ at egy lez´aratlan glNewList() parancsnak kell
megel˝oznie.
7.2. A display-lista tartalma
A list´an a kifejez´esek, param´eterek ´ert´eke ker¨ ul t´arol´ asra, nem pedig a param´etereket
tartalmaz´o vektor c´ıme, vagy a pl. transzform´aci´ os m´atrixok eset´en maga a m´atrix,
´es nem a kisz´am´ıt´as´ ahoz sz¨ uks´eges adatok. A leford´ıtott display-list´at a szerver g´epen
(amin a k´ep megjelenik) t´arolja a rendszer, ez´ert azok a parancsok, amelyek eredm´enye
a kliens (a parancsot kiad´o g´ep) ´allapot´at´ ol f¨ ugg, nem t´arolhat´ok display-list´an. A lista
v´egrehajt´asakor ugyanis a szervernek nem ´allnak rendelkez´es´ere a sz¨ uks´eges adatok. A
list´an nem t´arolhat´o parancsok ´altal´ aban vagy valamilyen ´ert´eket adnak vissza (glGet*(),
glIs*()), vagy a klienssel kapcsolatos inform´aci´ot´ ol f¨ uggnek (pl. glFlush(), glFinish()),
vagy a kliens ´altal kezelt ´allapotv´altoz´ o ´ert´ek´et v´altoztatj´ ak meg. A k¨ovetkez˝ o parancsok
nem t´arolhat´ok display-list´ an:
54
glDeleteLists() glGenLists() glPixelStore()
glFeedbackBuffer() glGet*() glReadPixels()
glFinish() glIsEnable() glRenderMode()
glFlush() glIsList() glSelectBuffer()
A display-list´ ak tetsz˝olegesen sokszor v´egrehajthat´ok, tov´abb´ a display-list´ ak
v´egrehajt´asa ´es k¨ozvetlen hat´as´ u parancsok kiad´asa tetsz´es szerint kombin´ alhat´ o.
void glCallList (GLuint list);
A list azonos´ıt´ oj´ u display-list´at hajtja v´egre. A lista parancsai a list´ara ker¨ ul´es sor-
rendj´eben hajt´odnak v´egre. Ha nem l´etezik list azonos´ıt´ oj´ u display-lista, akkor nem
t¨ort´enik semmi.
A display-list´ ak tartalmazhatnak olyan parancsokat, melyek megv´altoztatj´ak a rend-
szer glob´alis v´altoz´ oinak ´ert´ekeit (pl. attrib´ utumok, transzform´aci´ os m´atrixok). Ezek a
v´altoztat´ asok term´eszetesen a lista v´egrehajt´asa ut´an is ´erv´enyben maradnak, ha nem
tesz¨ unk semmilyen ´ovint´ezked´est. Ha azt akarjuk, hogy az ilyen jelleg˝ u v´altoz´ asok csak
a display-lista v´egrehajt´as´ anak idej´ere korl´ atoz´odjanak, akkor az attrib´ utumokat, illetve
a transzform´aci´ os m´atrixokat a megfelel˝o verem haszn´alat´ aval a lista v´egrehajt´asa el˝ott
ments¨ uk el (glPushAttrib(), glPushMatrix()), majd a lista v´egrehajt´as ut´an ´all´ıtsuk
vissza (glPopAttrib(), glPopMatrix()).
A display-list´ akat programunkban b´arhol haszn´alhatjuk, mivel index¨ uk (azonos´ıt´ ojuk)
glob´alis ´es egyedi. Nincs lehet˝os´eg azonban a list´ak tartalm´anak adatf´ajlba ment´es´ere, ´ıgy
term´eszetesen beolvas´as´ ara sem. A display-lista haszn´alata teh´at a program fut´as´anak
idej´ere korl´atozott.
7.3. Hierarchikus diplay-list´ak
A display-list´ak tartalmazhatnak display-lista h´ıv´asokat, amivel list´ak hierarchikus rends-
zere hozhat´o l´etre. Ez hasznos lehet pl. ism´etl˝ od˝o r´eszeket tartalmaz´o objektumok
´abr´ azol´asakor. Az ilyen jelleg˝ u h´ıv´ asi l´ancnak van korl´ atja, ez b´armely implement´aci´ oban
legal´abb 64, a pontos sz´amot a GL MAX LIST NESTING param´eterrel kiadott glGe-
tIntegerv() paranccsal kaphatjuk meg. Nem sz¨ uks´eges, hogy egy lista a megh´ıv´ asakor
m´ar l´etezzen. Egy nem l´etez˝o lista megh´ıv´ as´anak semmilyen k¨ovetkezm´enye sincs. A
hierarchikus display-list´ak seg´ıts´eg´evel k¨ozvetve m´odos´ıthat´o egy lista tartalma, miut´an a
megh´ıvott list´at b´armikor fel¨ ul´ırhatjuk, azaz ugyanazzal az azonos´ıt´ oval ´ uj tartalm´ u list´at
hozhatunk l´etre, ami ´altal a h´ıv´o lista tartalma (hat´asa) is megv´altozik. Ez a m´odszer
semmik´epp sem biztos´ıt optim´alis mem´oria-felhaszn´ al´ast ´es maxim´alis hat´ekonys´agot, de
adott esetben elfogadhat´o, hasznos megold´as lehet.
7.4. Display-list´ak ´es indexek kezel´ese
A display-list´ ak indexe tetsz˝oleges pozit´ıv eg´esz sz´am lehet. A v´eletlen fel¨ ul´ır´ as elker¨ ul´ese
´erdek´eben a glGetLists() paranccsal k´erhet¨ unk a rendszert˝ol egym´ast k¨ovet˝ o, m´eg nem
haszn´alt azonos´ıt´ okat, vagy a glIsList() paranccsal lek´erdezhetj¨ uk, hogy egy adott azo-
nos´ıt´ o haszn´alatban van-e.
55
GLuint glGenLists (GLsizei range);
range darab egym´ast k¨ovet˝ o, haszn´alaton k´ıv¨ uli display-lista indexet allok´al. A viss-
zaadott ´ert´ek nulla, ha nem tudja a rendszer a megfelel˝o sz´am´ u indexet allok´alni vagy
range = 0; egy´ebk´ent pedig a lefoglalt indext¨omb els˝o eleme. A lefoglalt indexekhez a
rendszer egy-egy ¨ ures display-list´ at hoz l´etre.
GLboolean glIsList (GLuint list);
Ez a parancs GL TRUE ´ert´eket ad vissza, ha list index˝ u display-lista m´ar l´etezik (az
azonos´ıt´ o m´ar foglalt), egy´ebk´ent pedig a GL FALSE ´ert´eket.
A glDeleteLists() paranccsal egym´ast k¨ovet˝ o index˝ u display-list´ akat t¨or¨ olhet¨ unk,
ami ´altal index¨ uket felszabad´ıtjuk.
void glDeleteLists (GLuint list, GLsizei range);
A list indext˝ol kezdve range darab egym´ast k¨ovet˝ o index˝ u display-list´at t¨or¨ ol. Nem
l´etez˝ o list´ak t¨orl´es´enek nincs semmilyen k¨ovetkezm´enye.
7.5. T¨obb lista v´egrehajt´asa
Az OpenGL-ben hat´ekony mechanizmus van t¨obb display-lista egym´as ut´ani
v´egrehajt´as´ ara. Ehhez a display-lista indexeket egy t¨ombbe kell tenni ´es a glCallLists()
parancsot kell kiadni. K´ezenfekv˝o ezen lehet˝os´eg haszn´alata, ha az indexeknek valami-
lyen jelent´es¨ uk van, mint pl. karakterek eset´en az ASCII k´odoknak. T¨obb karakterk´eszlet
haszn´alata eset´en mindegyik display-list´ anak egy k¨ ul¨on b´azisindexet kell l´etrehozni. Ezt
a c´elt szolg´alja a glListBase() parancs.
void glListBase (GLuint base);
Azt az eltol´ast (offsetet) hozza l´etre, amit a rendszer a glCallLists() paranccsal
v´egrehajtott display-lista indexeihez hozz´aad a t´enyleges index kisz´am´ıt´ as´ahoz. A display-
lista b´azis´anak kezdeti ´ert´eke 0. A b´azis´ert´eknek nincs hat´asa a glCallList() ´es glNew-
List() parancsok eredm´eny´ere.
void glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
n darab display-list´ at hajt v´egre. A v´egrehajtand´o list´ak indexeit ´ ugy sz´am´ıtja ki,
hogy a list c´ımen kezd˝od˝ o el˝ojeles eg´esz ´ert´ekekhez hozz´aadja – a glListBase() paranccsal
l´etrehozott – kurrens b´azis´ert´eket.
A type param´eterrel a list c´ımen kezd˝od˝ o indexek adatt´ıpus´ at (m´eret´et) kell megadni.
Ez a t´ıpus ´altal´aban az al´abbi ´ert´ekek 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 ´ert´ekek is adhat´ok a t´ıpusnak. Ebben az
esetben k´et, h´arom vagy n´egy egym´ast k¨ovet˝o byte-ot tol el ´es ad ¨ossze a rendszer a
display-lista offset kisz´am´ıt´ as´ahoz, az al´abbi algoritmus szerint:
56
/* b= 2, 3, 4; a byte-ok 0, 1, 2, 3-al vannak sz´amozva a t¨ombben */
offset = 0;
for(i = 0; i < b; i++)
¦
offset = offset << 8;
offset += byte[i];
¦
index = offset + listbase;
57
8. fejezet
Speci´alis optikai hat´asok
Az itt t´argyaland´ o h´arom technik´ aval a k´epek min˝os´ege jav´ıthat´ o, val´oszer˝ us´eg¨ uk n¨ovel-
het˝o.
8.1.
´
Atl´atsz´os´ag
Az RGBA sz´ınkomponensek k¨oz¨ ul az alfa (A ∈ [0., 1.]) ´ert´ek az ´atl´ atsz´ os´ag model-
lez´es´ere haszn´alhat´o. Ezzel ugyanis azt ´ırhatjuk el˝o, hogy az ´ uj fragmentum sz´ıne milyen
m´ert´ekben vegy¨ ulj¨ on a pixel jelenlegi sz´ın´evel. Ha A = 1., akkor az ´ uj sz´ın teljesen el-
fedi (fel¨ ul´ırja) a r´egit, teh´at az ´ uj sz´ın t¨ok´eletesen fed; A = 0. eset´en pedig egy´altal´an
nem fed, azaz a pixel r´egi sz´ıne minden v´altoztat´as n´elk¨ ul megmarad. Minden k¨ozb¨ uls˝o
´ert´ek azt eredm´enyezi, hogy a pixel ´ uj sz´ıne az ´ uj fragmentum sz´ın´enek ´es a pixel r´egi
sz´ın´enek valamilyen kombin´ aci´oja lesz. Az alfa ´ert´eket teh´at a legegyszer˝ ubb a sz´ın fed´esi
k´epess´eg´enek felfogni.
Ha a sz´ınvegy´ıt´es enged´elyezett, akkor a m˝ uvelet a raszteriz´al´ as ´es fragment´al´ as ut´an
zajlik le, teh´at k¨ozvetlen¨ ul a pixelbe val´o ´ır´as el˝ott.
Az alfa ´ert´ekek az un. alfa tesztre is haszn´alhat´ok, vagyis arra, hogy az alfa ´ert´ek´et˝ol
f¨ ugg˝ oen egy ´ uj fragmentumot elfogadjon vagy figyelmen k´ıv¨ ul hagyjon a megjelen´ıt˝ o rend-
szer, l´asd a 11.2. pontot.
Miut´an sz´ınindex m´odban nem adunk meg alfa ´ert´ekeket, az ´atl´ atsz´os´ agot csak RGBA
m´odban tudjuk modellezni.
Az OpenGL-ben az ´ uj fragmentumot forr´asnak (source), a neki megfelel˝o pixelt – amire
lek´epezi a rendszer – pedig c´elnak nevezz¨ uk. A forr´as ´es a c´el sz´ın´enek vegy´ıt´ese ´erdek´eben
enged´elyezn¨ unk kell ezt a lehet˝os´eget a glEnable(GL BLEND) parancs kiad´as´ aval, ´es
meg kell adnunk, hogy a rendszer a forr´as ´es c´el sz´ın¨ osszetev˝oinek kombin´ al´o t´enyez˝oit
milyen m´odon sz´am´ıtsa ki. Az egy¨ utthat´ okat is RGBA komponenseikkel kell megadni
csak´ ugy, mint a f´enyvisszaver˝ o k´epess´egeket le´ır´ o konstansokat. A rendszer a vegy´ıtett
sz´ın komponenseit az
s ∗ S +d ∗ D
¨osszef¨ ugg´essel sz´am´ıtja ki, ahol S = (S
R
, S
G
, S
B
, S
A
) az ´ uj fragmentum (a forr´as) sz´ıne,
s = (s
R
, s
G
, s
B
, s
A
) annak kombin´al´ o t´enyez˝ oje; D = (D
R
, D
G
, D
B
, D
A
) a pixel (a c´el)
jelenlegi sz´ıne, d = (d
R
, d
G
, d
B
, d
A
) pedig annak kombin´al´ o t´enyez˝ oje. A * karakter a 6.
fejezetben bevezetett vektorm˝ uveletet jel¨oli.
58
A forr´as ´es c´el kombin´ al´o t´enyez˝ oj´enek kisz´am´ıt´ asi m´odj´at a glBlendFunc() paranc-
csal adhatjuk meg.
void glBlendFunc (GLenum sfactor, GLenum dfactor);
Az sfactor param´eterrel az ´ uj fragmentum (a forr´as) egy¨ utthat´ oj´anak, a dfactor pa-
ram´eterrel pedig az ´ uj fragmentumnak megfelel˝o pixel sz´ınkombin´ al´ashoz haszn´alt egy¨ utt-
hat´o kisz´am´ıt´ asi m´odj´at ´ırhatjuk el˝o. Az sfactor alap´ertelmez´ese GL ONE, a dfactor´e
pedig GL ZERO. Az sfactor ´es dfactor param´eterek lehets´eges ´ert´ekeit a a 8.1. t´abl´ azat
tartalmazza.
8.1. t´abl´ azat. Az ´atl´ atsz´os´ aghoz hazn´alhat´ o szimbolikus konstansok
konstans sf df a kisz´am´ıtott 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. t´abl´ azatban szerepl˝o forr´as ´es c´el kombin´ al´o t´enyez˝ok nem minden
p´aros´ıt´as´ anak van ´ertelme, a felhaszn´al´ oi programok t¨obbnyire csak n´eh´any p´aros´ıt´ast
haszn´alnak. Az al´abbiakban felsorolunk n´eh´any jellemz˝o p´aros´ıt´ast. Felh´ıvjuk a figyel-
met arra, hogy ezek k¨oz¨ ul n´eh´ any csak a forr´as alfa ´ert´ek´et haszn´alja, vagyis abban az
esetben is alkalmazhat´ o, ha a k´ep pixeleihez az alfa ´ert´eket nem t´arolja a grafikus hardver.
Vegy¨ uk figyelembe azt is, hogy ugyanaz a hat´as t¨obbf´elek´eppen is el´erhet˝o.
• K´et k´ep egyenl˝ o m´ert´ek˝ u vegy´ıt´es´et (f´elig az egyik, f´elig a m´asik) el´erhetj¨ uk pl.
´ ugy, hogy az sfactor param´etert GL ONE-ra ´all´ıtjuk, megrajzoljuk az els˝o k´epet;
ezut´an mind az sfactor, mind a dfactor param´etereket GL SRC ALPHA-ra ´all´ıtjuk
´es A = 0.5 alf´aval megrajzoljuk a m´asodik k´epet. Ha az els˝o ´es m´asodik k´epet
0.75 : 0.25 ar´anyban akarjuk vegy´ıteni, akkor rajzoljuk meg az els˝o k´epet ´ ugy
mint az el˝obb, majd a m´asodik k´epet sfactor = GL SRC ALPHA, dfactor =
GL ONE MINUS SRC ALPHA param´eterekkel A = 0.25 ´ert´ek mellett. Ez a t´ıpus´ u
vegy´ıt´es a leggyakrabban haszn´alt.
• H´arom k¨ ul¨ onb¨oz˝ o k´ep egyenl˝ o ar´any´ u vegy´ıt´es´ehez dfactor = GL ONE, sfactor
= GL SRC ALPHA param´eterek mellett A = 0.33333 ´ert´ekkel rajzoljuk meg
mindh´arom k´epet.
59
• Ecsettel val´ o fest´es sor´an az ecsetvon´asokkal fokozatosan tudjuk elfedni a h´att´er
sz´ın´et. Ennek modellez´ese ´erdek´eben az sfactor = GL SRC ALPHA, dfactor =
GL ONE MINUS SRC ALPHA param´eterekkel az ecsetvon´as fed´es´enek megfelel˝o
(pl. 10%-os) alfa ´ert´ekkel rajzoljuk meg az ecset k´ep´et. A val´oszer˝ us´eg fokoz´asa
´erdek´eben az ecset k¨ ul¨onb¨ oz˝ o r´eszein v´altoztathatjuk a fed´est, az ecset k¨ozep´en
nagyobb, a sz´elein kisebb. Hasonl´o technik´aval tudunk rad´ırt modellezni, ekkor a
rajzol´as sz´ın´enek a h´att´er sz´ın´evel kell megegyeznie.
• Az a sz´ınkombin´ al´asi sz´am´ıt´as, amikor az sfactor param´eternek a GL DST COLOR
vagy GL ONE MINUS DST COLOR ´ert´eket adjuk, a dfactor param´eternek pedig
a GL SRC COLOR vagy GL ONE MINUS SRC COLOR ´ert´eket, lehet˝ov´e teszi a
sz´ınkomponensenk´enti szab´alyoz´ ast. Ezt a hat´ast egyszer˝ u sz˝ ur˝ o haszn´alat´ aval is
el´erhetj¨ uk, ugyanis pl. a v¨or¨ os komponenst 0.6-al, a z¨oldet 0.8-al a k´eket 0.4-el
megszorozva ugyanazt a hat´ast ´erj¨ uk el, mintha a v¨or¨os f´enyt 40 %-al, a z¨oldet 20
%-al a k´eket 60 %-al cs¨okkent˝o sz˝ ur˝ ot alkalmazn´ ank.
• Tegy¨ uk fel, hogy egy ´atl´ atszatlan h´att´er el˝ott h´arom k¨ ul¨ onb¨ oz˝o m´ert´ekben ´atl´ atsz´ o,
egym´ast r´eszben eltakar´o objektumot akarunk megrajzolni. Felt´etelezz¨ uk tov´ abb´a,
hogy a legt´avolabbi objektum a m¨og¨ otte l´ev˝o sz´ın 80 %-´at, a k¨oz´eps˝ o 40 %-´at, a
legk¨ozelebbi pedig 90 %-´at engedi ´at. Ennek modellez´ese ´erdek´eben a h´atteret raj-
zoljuk meg az sfactor ´es dfactor param´eterek alap´ertelmez´ese szerint, majd az sfac-
tor = GL SRC ALPHA, dfactor = GL ONE MINUS SRC ALPHA param´eterek
mellett rajzoljuk meg a legt´avolabbi objektumot A = 0.2, a k¨oz´eps˝ ot A = 0.6 ´es a
legk¨ozelebbit A = 0.1 alfa ´ert´ekkel.
• Nem n´egysz¨ og alak´ u raszterk´epek hat´asa ´erhet˝o el az´altal, hogy a k´ep k¨ ul¨onb¨oz˝ o
fragmentumaihoz k¨ ul¨ onb¨ oz˝o alfa ´ert´eket rendel¨ unk, pl. 0-´at minden nem l´athat´ o ´es
1-et minden l´athat´ohoz. Ezt az elj´ar´ast billboardingnak is szokt´ak nevezni. Egy
t´erbeli fa k´ep´enek ill´ uzi´oj´ at kelthetj¨ uk az´altal, hogy pl. k´et egym´asra mer˝oleges
s´ıkbeli n´egysz¨ogre, az el˝oz˝o m´odon megadott fakorona mint´azat´ u text´ ur´ at (egy
f´oli´ at, melyre lombkorona mint´ at raktunk) tesz¨ unk. Ez sokkal gyorsabb, mintha
t´erbeli poligonnal k¨ozel´ıten´enk a lombkoron´at ´es azt text´ ur´ azn´ank.
Az ´atl´ atsz´ os´ag (fed´es) modellez´esi m´odja alapj´an l´athat´ o, hogy m´as lesz az eredm´eny
ha egym´as k´ep´et ´atfed˝ o poligonokat a n´ez˝ oponthoz k´epesti t´avols´ aguk szerint h´atulr´ ol
el˝ore, vagy el¨olr˝ ol h´atulra haladva jelen´ıt¨ unk meg. N´eh´ any poligon eset´en a megje-
len´ıt´es sorrendj´et k¨onnyen meghat´arozhatjuk, azonban sok poligonb´ol ´all´ o, vagy hely¨ uket
v´altoztat´ o objektumok, vagy a n´ez˝ opontot v´altoztat´o megjelen´ıt´esek eset´en a helyes
sorrend meg´allap´ıt´ asa gyakorlatilag kivitelezhetetlen. Ezt a probl´em´ at az OpenGL
m´elys´egpuffer´enek (z-puffer) speci´alis haszn´alat´aval oldhatjuk meg. Ha a l´athat´ os´ag
szerinti ´abr´ azol´as enged´elyezett (glEnable(GL DEPTH TEST)), a rendszer fel¨ ul´ırja a
m´elys´egpufferban a pixel m´elys´eg´et, ha az ´ uj fragmentum k¨ozelebb van a n´ez˝ oponthoz,
mint a pixelen t´arolt. Ez mindaddig helyes eredm´enyt ad, m´ıg nincsenek ´atl´ atsz´ o objektu-
mok.
´
Atl´atsz´ o objektum eset´en ugyanis, ha a rendszer a n´ez˝oponthoz k¨ozelebbi fragmen-
tum m´elys´eg´evel fel¨ ul´ırja a z-puffer megfelel˝o elem´et, akkor egy k´es˝obb megjelen´ıtend˝o
objektum, mely az ´atl´atsz´ o objektum m¨og¨ ott van nem fog l´atszani, mivel a n´ez˝ opontt´ol
t´avolabb van, mint a kor´ abban megjelen´ıtett ´atl´ atsz´o objektum. Ezt a probl´em´ at ´ ugy
60
tudjuk megoldani, hogy az ´atl´atsz´ o objektum rajzol´asa el˝ott a m´elys´egpuffert a glDepth-
Mask(GL FALSE) paranccsal csak olvashat´ ov´ a tessz¨ uk, ami ´altal az ´atl´atsz´ o objek-
tum megrajzol´asa sor´an a t´avols´ agokat ¨ossze tudja hasonl´ıtani a rendszer, de nem tudja
fel¨ ul´ırni a puffert. A k¨ovetkez˝ o, nem ´atl´ atsz´ o objektum rajzol´asa el˝ott ´ ujra ´ırhat´ ov´ a kell
tenni a m´elys´egpuffert a glDepthMask(GL TRUE) paranccsal. (
´
Atl´atsz´ o objektumok
rajzol´asa el˝ott ne felejts¨ uk el letiltani a h´ats´o lapok elt´avol´ıt´as´ at!)
8.2. Sim´ıt´as (antialiasing)
Raszteres grafikus display-n szakaszt rajzolva azt tapasztaljuk, hogy a nem f¨ ugg˝oleges
vagy v´ızszintes szakaszok k´ep´enek hat´ara t¨oredezett, l´epcs˝os lesz. Kiv´altk´epp ´ıgy van ez
a majdnem v´ızszintes ´es majdnem f¨ ugg˝oleges szakaszok eset´en. Ezt a jelens´eget angolul
aliasingnak, a jelens´eg cs¨okkent´es´ere, a k´ep hat´ar´ anak kisim´ıt´as´ ara ir´anyul´ o technik´ akat
antialiasingnak nevezik.
Az OpenGL-ben haszn´alt sim´ıt´asi technika a pixelek fedetts´eg´enek sz´am´ıt´ as´ an alapul.
A szakaszok k´epe minden esetben t´eglalap lesz. A rendszer kisz´am´ıtja ezen t´eglalapot
metsz˝o pixelekre, hogy h´anyad r´esz¨ uk esik a t´eglalap k´ep´ere. Ezt a sz´amot nevezz¨ uk
fedetts´egi ´ert´eknek.
RGBA sz´ınmegad´ asi m´od eset´en a rendszer a pixeleknek megfelel˝o fragmentumok alfa
´ert´ek´et megszorozza a megfelel˝o fedetts´egi ´ert´ekkel. Az´ıgy kapott alfa ´ert´eket felhaszn´alva
a pixel sz´ın´evel vegy´ıthetj¨ uk a fragmentum sz´ın´et a hat´as el´er´ese ´erdek´eben.
Sz´ınindex m´odban a rendszer a fragmentum fedetts´eg´enek megfelel˝oen ´all´ıtja be a
sz´ınindex 4 legkisebb helyi´ert´ek˝ u bitj´et (0000 ha nincs fed´es, 1111 ha teljes a fedetts´eg).
Az, hogy ez a be´all´ıt´as hogyan ´es milyen m´ert´ekben befoly´asolja a k´epet, a felhaszn´al´o
´altal haszn´alt sz´ınpalett´ an m´ ulik.
A k´ep hat´ar´ anak kisim´ıt´asa teh´at azt jelenti, hogy az alaphelyzethez k´epest t¨obb pixelt
fest ki a rendszer, de ezeket m´ar nem a szakasz sz´ın´evel, hanem a fedetts´egt˝ol f¨ ugg˝ oen a
szakasz ´es a h´att´er sz´ın´enek kombin´ aci´oj´ aval. Vagyis a szakasz ´es a h´att´er k¨oz¨ ott fokozatos
´atmenet lesz, nem pedig ugr´asszer˝ u. A 8.1. ´abr´ an egy szakasz sim´ıt´as n´elk¨ uli (bal oldali
k´ep) ´es sim´ıtott (jobb oldali k´ep) megjelen´ıt´es´et l´athatjuk. Mindk´et esetben jelent˝osen
felnagy´ıtottuk a k´eperny˝or˝ ol levett k´epet.
8.1. ´abra. Szakasz k´epe kisim´ıt´ as n´elk¨ ul (bal oldali k´ep) ´es kisim´ıt´ assal (jobb oldali k´ep)
A fedetts´egi ´ert´ek sz´am´ıt´asa implement´aci´ of¨ ugg˝ o, de mindenk´eppen id˝oig´enyes. A
glHint() paranccsal befoly´asolhatjuk a sebess´eget, illetve a k´ep min˝os´eg´et, azonban ennek
figyelembe v´etele is implement´ aci´of¨ ugg˝ o.
61
void glHint (GLenum target, GLenum hint);
Az OpenGL n´eh´any tulajdons´ag´at befoly´asolhatjuk seg´ıts´eg´evel. A target pa-
ram´eterrel azt adjuk meg, hogy mire vonatkozzon a min˝os´egi el˝o´ır´ as. A lehets´eges
´ert´ekek list´aj´ at a 8.2. t´abl´ azat tartalmazza. A hint param´eter lehets´eges ´ert´ekei:
GL FASTEST, GL NICEST ´es GL DONT CARE. A GL FASTEST ´ert´ek a leg-
hat´ekonyabb, a GL NICEST a legjobb min˝os´eget ad´o m´odszer haszn´alat´ ara utas´ıtja a
rendszert, a GL DONT CARE ´ert´ekkel pedig azt jelezz¨ uk, hogy nincs preferenci´ank. Ezen
utas´ıt´ asok figyelembe v´etele teljes m´ert´ekben implement´aci´ of¨ ugg˝ o, lehet, hogy teljesen
figyelmen k´ıv¨ ul hagyja a rendszer.
8.2. t´abl´azat. A target param´eter ´ert´ekei
target jelent´ese
GL POINT SMOOTH HINT
GL LINE SMOOTH HINT
GL POLYGON SMOOTH HINT
A pont, szakasz, poligon k´ephat´arok
sim´ıt´ as´ anak min˝os´eg´et adja meg.
GL FOG HINT Seg´ıts´eg´evel be´all´ıthatjuk, hogy a
k¨od effektus sz´am´ıt´ asait pixelenk´ent
(GL NICEST), vagy cs´ ucspontonk´ent
(GL FASTEST) sz´am´ıtsa ki a rendszer.
GL PERSPECTIVE CORRECTION HINT A sz´ın ´es text´ ura-koordin´at´ ak inter-
pol´aci´ oj´anak min˝os´eg´et adja meg.
A GL PERSPECTIVE CORRECTION HINT param´eter eset´en azt adhatjuk meg,
hogy a sz´ıneket ´es a text´ urakoordin´at´ akat a rendszer a kevesebb sz´am´ıt´ assal j´ar´ o line´aris
interpol´aci´ oval sz´am´ıtsa ki, vagy a t¨obb sz´am´ıt´ ast ig´enyl˝o, de a val´ os´agnak jobban meg-
felel˝o perspekt´ıv hat´ast is figyelembe vev˝o m´odon sz´am´ıtsa ki a cs´ ucspontbeli ´ert´ekekb˝ol
kiindulva. A rendszerek ´altal´ aban a line´aris interpol´aci´ot haszn´alj´ak a sz´ınek eset´en,
miut´an ez vizu´alisan elfogadhat´o eredm´enyt biztos´ıt, j´ollehet matematikailag nem pon-
tos. Text´ ura eset´en azonban a perspekt´ıv hat´ast is figyelembe vev˝ o interpol´aci´ ot kell
haszn´alni a vizu´alisan elfogadhat´o eredm´eny ´erdek´eben.
8.2.1. Pont ´es szakasz sim´ıt´asa
Pont sim´ıt´as´ at a glEnable(GL POINT SMOOTH), a szakasz´et a
glEnable(GL LINE SMOOTH) paranccsal enged´elyezni kell. A glHint() parancc-
sal a min˝os´egre vonatkoz´o ´ohajunkat adhatjuk meg.
RGBA sz´ınmegad´asi m´od eset´en enged´elyezn¨ unk kell a sz´ınvegy´ıt´est
(glEnable(GL BLEND)). A kombin´ al´asi egy¨ utthat´ okat ´altal´aban vagy sfactor
= GL SRC ALPHA, dfactor = GL ONE MINUS SRC ALPHA, vagy sfactor =
GL SRC ALPHA, dfactor = GL ONE ´ert´ekre ´all´ıtjuk. (Az ut´obbi megold´as a szakaszok
metsz´espontj´ at jobban kiemeli.) Az ezek ut´an rajzolt szakaszokat, illetve pontokat
62
kisim´ıtva jelen´ıti meg a rendszer. Ezen lehet˝os´eg haszn´alat´ahoz teh´at a sz´ınvegy´ıt´es
(´atl´ atsz´os´ ag, fedetts´eg) ismerete ´es meg´ert´ese sz¨ uks´eges.
Sz´ınindex m´od eset´en minden a sz´ınpalett´ an m´ ulik, vagyis azon, hogy siker¨ ul-e 16 olyan
sz´ınt tal´alnunk, melyek a h´att´er ´es a rajzol´asi sz´ın k¨oz¨ ott folytonos ´atmenetet biztos´ıtanak.
Bonyol´ıtja a helyzetet, ha t¨obb alakzat ´atfedi egym´ast, hiszen ekkor elvileg az ezek k¨oz¨ otti
folytonos ´atmenetet kellene biztos´ıtani. Teh´ at mindenk´eppen meggondoland´o sz´ınindex
m´odban a kisim´ıt´ast haszn´alni.
´
Atfed˝o alakzatok eset´en RGBA m´odban sokkal jobb eredm´enyt kaphatunk, mivel a
rendszer az ¨osszes egym´asra ker¨ ul˝ o sz´ınt tudja kombin´alni felt´eve, hogy a m´elys´egpuffert
nem haszn´aljuk, pontosabban csak olvashat´ ov´ a tessz¨ uk a sim´ıtand´ o pontok, szakaszok
rajzol´as´anak idej´ere ´ ugy, mint a 8.1. szakaszban l´attuk.
8.2.2. Poligonok sim´ıt´asa
Ha a poligonok megjelen´ıt´esi m´odja pont vagy szakasz (a glPolygonMode() parancsot
GL POINT vagy GL LINE param´eterrel adtuk ki), akkor a poligon sim´ıtott megjelen´ıt´ese
az el˝oz˝oek szerint t¨ort´enik. A tov´ abbiakban kit¨olt¨ ott poligonok (GL FILL) sim´ıt´as´ ar´ ol
lesz sz´o.
Kit¨olt¨ott poligonok sim´ıt´asa abban az esetben a legkritikusabb, ha k¨ ul¨ onb¨ oz˝o sz´ın˝ u,
k¨oz¨ os ´ellel rendelkez˝o poligonokat rajzolunk. A legjobb eredm´enyt a gy˝ ujt˝ o puffer
haszn´alat´ aval ´erhetj¨ uk el, amivel az eg´esz k´ep kisim´ıthat´ o (l´asd a 10.4. szakaszt), de
ez nagyon sz´am´ıt´ asig´enyes, ´ıgy lassabb. A k¨ovetkez˝ okben le´ırt elj´ar´ assal is megold-
hat´o a probl´ema, ez viszont el´eg k¨or¨ ulm´enyes, nagy k¨or¨ ultekint´est ig´enyel. Elvileg mind
RGBA, mind sz´ınindex m´odban kisim´ıthatjuk a kit¨olt¨ott poligonok hat´ar´ at, azonban
t¨obb, egym´ast ´atfed˝ o poligon kisim´ıtott rajzol´asa nem c´elszer˝ u sz´ınindex m´odban.
Poligonok kisim´ıtott rajzol´as´at a glEnable(GL POLYGON SMOOTH) paranccsal
enged´elyezni kell. Ennek hat´as´ara a poligonok hat´arol´o ´eleihez tartoz´o fragmentumok alfa
´ert´ekeit megszorozza a rendszer a fedetts´egi index¨ ukkel ´ ugy, mint szakaszok sim´ıt´ as´an´ al.
A megjelen´ıt´es min˝os´eg´et a target = GL POLYGON SMOOTH HINT param´eterrel kia-
dott glHint() paranccsal befoly´asolhatjuk. Ezut´an csak olvashat´ov´ a kell tenni a z-puffert
(glDepthMask(GL FALSE)), majd az alfa szerinti sz´ınvegy´ıt´est enged´elyezni kell sfactor
= GL SRC ALPHA SATURATE, dfactor = GL ONE egy¨ utthat´okkal. V´eg¨ ul a poligo-
nokat m´elys´eg szerint rendezni kell ´es h´atulr´ ol el˝ore haladva meg kell rajzolni.
8.3. K¨od (atmoszf´erikus hat´asok)
A sz´am´ıt´og´eppel k´esz¨ ult k´epekkel szemben gyakori ´es jogos kritika, hogy ´altal´aban f´emesen
csillog´o, ´eles kont´ ur´ u az objektumok k´epe f¨ uggetlen¨ ul att´ol, hogy milyen k¨ozel vannak a
n´ez˝ oponthoz. Az el˝oz˝o szakaszban ismertetett k´ephat´ ar-sim´ıt´ as mellett az OpenGL-ben
tov´abbi lehet˝os´eg a val´ oszer˝ us´eg fokoz´ as´ ara a k¨od modellez´ese, aminek hat´as´ ara az objek-
tumok a n´ez˝ opontt´ol t´avolodva fokozatosan elhom´alyosodnak, elt˝ unnek, beleolvadnak a
k¨od sz´ın´ebe. A k¨oddel p´ara, hom´aly, f¨ ust ´es szennyezett leveg˝o is modellezhet˝o.
A k¨od effektust a rendszer a transzform´aci´ok, megvil´ag´ıt´as ´es text´ ura-lek´epez´es ut´an
adja hozz´a a k´ephez. Komplex szimul´aci´ os programok eset´en a k¨od alkalmaz´ as´ aval n¨ovel-
hetj¨ uk a sebess´eget, mert a s˝ ur˝ u k¨oddel bor´ıtott objektumok megrajzol´as´ at elhagyhatjuk,
mivel ´ ugysem lesznek l´athat´ok.
63
A k¨odhat´ast enged´elyezn¨ unk kell a glEnable(GL FOG) paranccsal, majd a k¨od sz´ın´et
´es s˝ ur˝ us´eg´et kell megadnunk a glFog*() paranccsal. A GL FOG HINT param´eterrel kia-
dott glHint() paranccsal a min˝os´eget, illetve a sebess´eget befoly´asolhatjuk (l´asd a 8.2.
szakaszt). A k¨od sz´ın´et a rendszer a bej¨ov˝ o (forr´as) fragmentum sz´ın´evel vegy´ıti, fel-
haszn´alva a k¨od kombin´al´ o t´enyez˝ oj´et. Ezt az f kombin´al´ o t´enyez˝ot az a 8.3. t´abl´ azat
szerint adhatjuk meg.
8.3. t´abl´azat. A k¨od kombin´ al´o t´enyez˝ oj´enek megad´asa
f kisz´am´ıt´ asa param ´ert´eke a glFog*()-ban
f = e
−density·z
GL EXP
f = e
−(density·z)
2
GL EXP2
f =
end−z
end−start
GL LINEAR
ahol z a fragmentum k¨oz´eppontj´ anak a n´ez˝opontt´ ol m´ert t´avols´ aga a
n´ez˝ opontkoordin´ata-rendszerben. A density, end, start ´ert´ekeket a glFog*() paranccsal
adhatjuk meg. Az ´ıgy kisz´am´ıtott f egy¨ utthat´ ot a rendszer a [0., 1.] intervallumra
lev´agja.
void glFog¦if¦ (GLenum pname, TYPE param);
void glFog¦if¦v (GLenum pname, const TYPE *param);
A k¨od effektus sz´am´ıt´ as´ahoz sz¨ uks´eges ´ert´ekeket adhatjuk meg vele. pname
´ert´eke GL FOG MODE, GL FOG DENSITY, GL FOG START, GL FOG END,
GL FOG COLOR vagy GL FOG INDEX lehet.
GL FOG MODE eset´en az f egy¨ utthat´ o kisz´am´ıt´asi m´odj´at adhatjuk meg, ekkor a
param ´ert´eke GL EXP, GL EXP2 vagy GL LINEAR lehet. Alap´ertelmez´es a GL EXP.
Ha pname ´ert´eke GL FOG DENSITY, GL FOG START, GL FOG END, akkor a
param-al a megfelel˝o density, start, illetve end ´ert´eket adjuk meg az f sz´am´ıt´as´ ahoz.
Alap´ertelmez´es szerint density = 1, start = 0 ´es end = 1.
RGBA m´odban a k¨od sz´ın´et pname = GL FOG COLOR ´ert´ek mellett a sz´ın RGBA
komponenseivel adhatjuk meg. (Ekkor csak a vektoros h´ıv´asi forma megengedett.)
Sz´ınindex m´odban pedig a pname = GL FOG INDEX ´ert´ek mellett a param-mal ´atadott
´ert´ek a k¨od sz´ınindexe.
RGBA m´odban a k¨od miatti sz´ınvegy´ıt´est a
C = fC
i
+ (1 −f)C
k
¨osszef¨ ugg´es szerint sz´am´ıtja ki a rendszer, ahol C
i
az ´ uj (forr´as) fragmentum, C
k
pedig a
k¨od sz´ıne. Sz´ınindex m´odban pedig az
I = I
i
+ (1 −f)I
k
kifejez´es szerint, ahol I
i
a forr´asfragmentum, I
k
pedig a k¨od sz´ınindexe. Sz´ınindex m´odban
¨ ugyeln¨ unk kell a megfelel˝o sz´ınsk´ala el˝o´ all´ıt´ as´ ara is. A sk´ala els˝o sz´ın´enek a k¨od n´elk¨ uli ob-
jektum sz´ın´evel kell megegyeznie, az utols´onak pedig a k¨od´evel. Ez azt jelenti, hogy t¨obb
64
k¨ ul¨ onb¨oz˝ o sz´ın˝ u objektum eset´en t¨obb, az el˝oz˝ oeknek megfelel˝o sz´ınsk´al´ at kell l´etrehozni,
ami meglehet˝osen neh´ezkess´e, kiss´e rem´enytelenn´e teszi a k¨odhat´as modellez´es´et sz´ınindex
m´odban.
A 8.2. ´abra fels˝o k´ep´en te´askann´ak
1
megvil´ag´ıtott, ´arnyalt k´ep´et l´athatjuk. Az als´o
k´epen pedig ugyanaz a be´all´ıt´ as k¨odhat´ assal l´athat´ o. A k¨od param´etereinek be´all´ıt´ asai:
GL EXP, density = 0.25, start = 1 ´es end = 5, a k¨od sz´ıne pedig sz¨ urke (0.6,0.6,0.6).
1
A sz´am´ıt´og´epi grafik´aban a te´askann´anak kit¨ untetett szerepe van, gyakran haszn´alj´ak grafikai hat´asok
demonstr´al´ as´an´al. Az un. Utah teapot t¨ort´enete az 1960-as ´evekre ny´ ulik vissza, amikor a University of
Utah-on egy te´askann´at digitaliz´altak (ez a kanna az´ota egy bostoni m´ uzeumban van) ´es 306 kontroll-
ponttal le´ırt 32db, egym´ashoz sim´an kapcsol´od´o B´ezier-fel¨ ulettel modellezt´ek.
65
8.2. ´abra. Te´askann´ak k¨od n´elk¨ ul (fels˝o k´ep) ´es k¨oddel (als´o k´ep)
66
9. fejezet
Raszteres objektumok rajzol´asa
K´etf´ele raszteres objektum rajzolhat´o: a bitt´erk´ep ´es a k´ep. Mindkett˝ o pixelek egy
t´eglalap alak´ u t¨ombje, a k¨ ul¨onbs´eg csak az, hogy a bitt´erk´ep minden pixelhez egyetlen
bitben t´arol inform´aci´ot, a k´ep pedig t¨obb bitben, de minden pixelhez ugyanannyiban (pl.
RGBA ´ert´ekeket). K¨ ul¨onbs´eg m´eg, hogy a bitt´erk´epet egy maszkk´ent teszi r´a a rendszer
a k´epre (pl. karakterek ´ır´asa), a k´eppel pedig fel¨ ul´ırja vagy kombin´ alja a t´arolt adatokat
(pl. az RGBA ´ert´ekeket).
9.1. Bitt´erk´epek ´es karakterek
A bitt´erk´ep a 0 ´es 1 ´ert´ekek t¨ombj´enek tekinthet˝ o, mely a k´epmez˝ o egy t´eglalap alak´ u
ter¨ ulet´enek rajzol´asi maszkjak´ent haszn´alhat´ o. Ahol a t´erk´epben 1 szerepel, a neki meg-
felel˝o pixelt a rendszer ´at´ırja a rajzol´asi sz´ınnel, vagy alfa szerint kombin´ alja a raj-
zol´asi sz´ınt a pixel sz´ın´evel att´ol f¨ ugg˝oen, hogy milyen pixelenk´enti m˝ uveletek vannak
el˝o´ırva. A bitt´erk´ep 0 elemeinek megfelel˝o pixelek v´altozatlanok maradnak. Bitt´erk´epek
haszn´alat´ anak tipikus p´eld´ aja a karakterek ´ır´asa.
Karakterek rajzol´as´ahoz csak a legalacsonyabb szint˝ u szolg´altat´asokat biztos´ıtja az
OpenGL. Ezek a pozicion´al´ as ´es bitt´erk´epek rajzol´asa. Karakterk´eszlet l´etrehoz´as´ at
´es karaktersorozat rajzol´as´ at seg´ıtik a display-list´akn´ al megismert (l´asd a 7. fejeze-
tet) parancsok. Karaktersorozat rajzol´as´at t´amogat´ o minden tov´abbi f¨ uggv´enyt a fel-
haszn´al´ onak kell meg´ırnia. A GLUT f¨ uggv´enyk¨ onyvt´ar is tartalmaz karakterek ´ır´ as´ at
seg´ıt˝ o f¨ uggv´enyeket. A karaktereket le´ır´o bitt´erk´epek bitekben m´ert sz´eless´eg´enek ´es
hossz´ us´ ag´anak 8 t¨obbsz¨ or¨os´enek kell lenni, ami persze nem jelenti azt, hogy maguknak a
karaktereknek is.
9.2. Kurrens raszterpoz´ıci´o
A rendszer a bitt´erk´epeket ´es k´epeket mindig a kurrens raszterpoz´ıci´ ot´ ol kezd˝od˝ oen ra-
jzolja meg ´ ugy, hogy a kurrens raszterpoz´ıci´ o lesz a bitt´erk´ep (k´ep) bal als´o sarka (ha
m´ask´ent nem rendelkez¨ unk). A kurrens raszterpoz´ıci´ot a rendszer egy glob´alis v´altoz´oban
t´arolja.
67
void glRasterPos¦234¦¦sifd¦ (TYPE x, TYPE y, TYPE z, TYPE w);
void glRasterPos¦234¦¦sifd¦v (conts TYPE *pos);
A kurrens raszterpoz´ıci´ ot ´all´ıtja be. Az x, y, z, w param´eterek az ´ uj poz´ıci´ o koor-
din´at´ ai. Ha k´et koordin´at´aval adjuk meg, akkor a rendszer automatikusan a z = 0, w = 1
´ert´ekekkel eg´esz´ıti ki, h´arom koordin´ata eset´en pedig a w = 1 ´ert´ekkel. Az ´ıgy megadott
raszterpoz´ıci´ot pontosan ´ ugy transzform´alja a rendszer az ablakkoordin´ata-rendszerbe,
mint a glVertex*() paranccsal megadott cs´ ucspontokat. Ha a transzform´aci´ok ut´an
a megadott poz´ıci´o a k´epmez˝ on k´ıv¨ ulre esik, akkor a kurrens raszterpoz´ıci´ o st´atusza
“´erv´enytelen” lesz.
A GL CURRENT RASTER POSITION param´eterrel kiadott glGetFloatv() paran-
ccsal lek´erdezhetj¨ uk a kurrens raszterpoz´ıci´ o koordin´at´ait, ugyanezzel a param´eterrel
kiadott glGetBoolean() paranccsal pedig megtudhatjuk, hogy a kurrens raszterpoz´ıci´o
´erv´enyes-e.
9.3. Bitt´erk´ep rajzol´asa
void glBitmap (GLsizei width, GLsizei hight, GLfloat xo, GLfloat yo, GLfloat xi,
GLfloat yi, const GLubyte *bitmap);
A bitmap c´ımen kezd˝ od˝o bitt´erk´epet rajzolja meg a rendszer ´ ugy, hogy a bitt´erk´ep
orig´oj´ at a kurrens raszterpoz´ıci´ ora helyezi. Az (x
o
, y
o
) koordin´atap´ arral gyakorlatilag a
bitt´erk´ep bal als´o sark´anak (orig´oj´anak) eltol´as´ at adhatjuk meg pixelekben. Az eltol´as
komponensei lehetnek negat´ıvok is. Ha a kurrens raszterpoz´ıci´ o ´erv´enytelen, akkor nem
rajzol semmit ´es a kurrens raszterpoz´ıci´ o tov´ abbra is ´erv´enytelen marad. A bitt´erk´ep
raszteriz´al´ asa ut´an az (x
c
, y
c
) kurrens raszterpoz´ıci´ot az (x
c
+ x
i
, y
c
+ y
i
) ´ert´ekre ´all´ıtja
a rendszer. A width ´es hight param´eterek a bitt´erk´ep pixelekben m´ert sz´eless´eg´et ´es
hossz´ us´ ag´at jel¨olik. Ezeknek nem kell felt´etlen¨ ul 8 t¨obbsz¨ or¨os´enek lennie, b´ar a bitt´erk´ep
´altal lefoglalt ter¨ ulet mindk´et m´erete mindig 8 t¨obbsz¨or¨ ose.
Az ´all´ o latin bet˝ uk eset´en y
i
= 0 ´es x
i
> 0, de pl. h´eber karakterekn´el – a h´eberben
jobbr´ol balra ´ırnak – x
i
< 0. Lehet˝os´eg van fel¨ ulr˝ ol lefel´e, vagy alulr´ol felfel´e val´ o ´ır´asra
is. Az (x
i
, y
i
) ´ert´ekeket ´ ugy szoktuk be´all´ıtani, hogy a karaktert k¨ovet˝ o bet˝ uk¨ ozt is tar-
talmazza.
A glBitmap() paranccsal csak a k´epmez˝ o oldalaival p´arhuzamosan lehet ´ırni, azaz
nem lehet a sz¨oveget elforgatni.
9.4. K´epek
Az OpenGL-ben a k´ep nagym´ert´ekben hasonl´ıt a bitt´erk´ephez. Alapvet˝ o k¨ ul¨onbs´eg azon-
ban, hogy a k´ep pixelenk´ent t¨obb bitnyi adatot tartalmaz, pl. az RGBA sz´amn´egyest. A
k´ep eredet´et illet˝oen lehet pl. egy lapleolvas´ oval raszteriz´alt f´enyk´ep, a grafikus hardver vi-
deomem´ori´ aj´ab´ ol beolvasott k´ep vagy valamely program ´altal kisz´amolt ´es a mem´ori´ aban
68
t´arolt k´ep is. A k´epek amellett, hogy megjelen´ıthet˝ok a k´eperny˝ on pl. text´ urak´ent is
haszn´alhat´ ok.
K´ep hallat´an ´altal´aban a sz´ınpufferbe ´ırt k´epre asszoci´alunk, azonban t´eglalap alak´ u
pixelt¨omb¨ ok adatait – melyek nemcsak sz´ınek lehetnek – ´ırhatjuk m´as pufferbe is, vagy
olvashatjuk m´as pufferb˝ol is, pl. m´elys´egpuffer, stencilpuffer, gy˝ ujt˝opuffer (l´asd a 10.
fejezetet).
9.4.1. Pixeladatok olvas´asa, ´ır´asa ´es m´asol´asa
A k´epek manipul´al´as´ ara az OpenGL h´arom alapvet˝ o parancsot tartalmaz:
• glReadPixels(), pixelt¨omb adatainak beolvas´asa a k´eppufferb˝ol (framebuffer) a
processzor mem´ori´aj´ aba;
• glDrawPixels(), pixelt¨omb adatainak be´ır´asa a mem´ori´ ab´ol a k´eppufferba;
• glCopyPixels(), pixelt¨omb m´asol´ asa a k´eppufferen bel¨ ul. Ez csak eredm´eny´et
tekintve ugyanaz, mintha beolvasn´ ank a k´eppufferb˝ol, majd be´ırn´ ank annak egy
m´asik r´esz´ere, ugyanis a m´asol´ asi parancs haszn´alata eset´en az adat nem ker¨ ul a
processzor mem´ori´aj´ aba.
Ezen parancsok rendk´ıv¨ ul egyszer˝ u feladatokat hajtanak v´egre. A v´egrehajt´as azon-
ban nem mindig egyszer˝ u, mivel nagyon sokf´ele adat van a k´eppufferben, ´es ezeket
sokf´elek´eppen lehet t´arolni, ´ıgy a fenti m˝ uveletek sor´an ´altal´ aban t¨obbf´ele adatkonverzi´ ora
van sz¨ uks´eg.
void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type, const GLvoid *pixels);
A k´eppuffer azon pixelt¨ombj´enek az adatait olvassa be, melynek bal als´o sarka (x, y),
sz´eless´ege width, magass´aga height. Az adatokat a pixels c´ımen kezd˝ od˝o mem´oriater¨ uletre
teszi. A format param´eterrel a pixelekr˝ol beolvasand´ o adatelemeket adjuk meg (l´asd a 9.1.
t´abl´ azatot), a type param´eterrel pedig az adatt´arol´ as t´ıpus´ at (l´asd a 9.2. t´abl´ azatot).
void glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type,
const GLvoid *pixels);
A pixels c´ımen t´arolt width sz´eless´eg˝ u, height magass´ag´ u pixelt¨omb¨ot rajzolja meg
´ ugy, hogy a pixelt¨omb bal als´o sarka a kurrens raszterpoz´ıci´ oba ker¨ ul. Ha a kurrens rasz-
terpoz´ıci´o ´erv´enytelen, akkor nem rajzol semmit, ´es a kurrens raszterpoz´ıci´o tov´ abbra is
´erv´enytelen marad. A format ´es type param´eterek ´ertelmez´ese a glReadPixels() paran-
csn´al ´ırtakkal megegyezik.
Ha a pixeladat elemei folytonos adatot reprezent´alnak, mint pl. az RGB ´ert´ekek,
akkor a rendszer az adatt´ıpusnak megfelel˝o intervallumra k´epezi le az adatokat, teh´at
adatveszt´es is el˝o´allhat. Ha az adatelem egy index, pl. sz´ın- vagy stencilindex, ´es a t´ıpus
nem GL FLOAT, akkor a rendszer az ´ert´eket az adott t´ıpus bitjeivel maszkolja.
69
9.1. t´abl´ azat. A pixelekr˝ol beolvashat´o adatelemek
format a beolvasott adat
GL COLOR INDEX sz´ınindex
GL RGB v¨or¨os, z¨old ´es k´ek sz´ınkomponensek
GL RGBA v¨or¨os, z¨old, k´ek ´es alfa komponensek
GL RED v¨or¨os sz´ınkomponens
GL GREEN z¨old sz´ınkomponens
GL BLUE k´ek sz´ınkomponens
GL ALPHA alfa komponens
GL LUMINANCE vil´agoss´ag
GL LUMINANCE ALPHA vil´agoss´ag ´es alfa komponens
GL STENCIL INDEX stencilindex
GL DEPTH COMPONENT m´elys´eg
9.2. t´abl´azat. Az adatt´arol´ as t´ıpusa
type az adatt´ıpus le´ır´ asa
GL UNSIGNED BYTE 8 bites el˝ojel n´elk¨ uli eg´esz
GL BYTE 8 bites el˝ojeles eg´esz
GL BITMAP 1 bit, 8 bites el˝ojel n´elk¨ uli eg´eszekben
GL UNSIGNED SHORT 16 bites el˝ojel n´elk¨ uli eg´esz
GL SHORT 16 bites el˝ojeles eg´esz
GL UNSIGNED INT 32 bites el˝ojel n´elk¨ uli eg´esz
GL INT 32 bites eg´esz
GL FLOAT egyszeres pontoss´ ag´ u lebeg˝opontos
void glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
Egy pixelt¨omb adatait m´asolja ugyanazon a pufferen bel¨ ul a kurrens raszterpoz´ıci´ oba.
A m´asoland´o t¨omb bal als´o sark´anak koordin´at´ai (x, y), sz´eless´ege width, magass´aga
height. A type param´eter ´ert´eke GL COLOR, GL STENCIL ´es GL DEPTH lehet. A
m´asol´ as sor´an a glPixelTransfer*(), glPixelMap*() ´es glPixelZoom() parancsokkal
be´all´ıtott manipul´aci´ ok hat´asa ´erv´enyes¨ ul. type = GL COLOR eset´en a sz´ınmegad´ asi
m´odt´ ol f¨ ugg˝oen vagy az RGBA komponensek, vagy a sz´ınindexek ker¨ ulnek m´asol´ asra;
type = GL DEPTH eset´en a m´elys´eg´ert´ekek, type = GL STENCIL eset´en pedig a sten-
cilindexek.
70
9.4.2. K´epek kicsiny´ıt´ese, nagy´ıt´asa
void glPixelZoom (GLfloat xfactor, GLfloat yfactor);
Seg´ıts´eg´evel a pixelt¨omb¨ ok rajzol´asa ´es m´asol´ asa sor´an v´egrehajtand´o sk´al´ az´ asi fakto-
rokat ´ırhatjuk el˝o. xfactor ´es yfactor alap´ertelmez´ese 1. Raszteriz´al´askor a k´ep minden pi-
xel´et egy-egy xfactor yfactor m´eret˝ u t´eglalapk´ent kezeli a rendszer, ´es a k´eperny˝ o min-
den olyan pixele sz´am´ ara l´etrehoz egy fragmentumot, mely k¨oz´eppontja ebbe a t´eglalapba,
vagy ennek a t´eglalapnak az als´o vagy bal oldal´ara esik. Negat´ıv sk´al´ az´asi ´ert´ekek a meg-
felel˝o tengelyre vonatkoz´o t¨ ukr¨ oz´eseket is eredm´enyeznek.
9.5. Pixelek t´arol´asa, transzform´al´asa, lek´epez´ese
A mem´ori´ aban t´arolt k´ep pixelenk´ent1 − 4 adatelemet tartalmazhat. Pl. az adat ´allhat
puszt´an a sz´ınindexb˝ol, a vil´agoss´ agb´ ol (luminance, ami ´altal´aban az RGB ´ert´ekek ´atlaga)
vagy magukb´ol az RGBA ´ert´ekekb˝ol. A pixeladatok form´atuma hat´arozza meg a t´arolt
adatok sz´am´at ´es sorrendj´et.
N´eh´any adatelem eg´esz sz´am (pl. a sz´ın- vagy stencilindex), m´asok lebeg˝opontos
´ert´ekek (pl. az RGBA komponensek vagy a m´elys´eg), melyek ´altal´ aban a [0., 1.] interval-
lumon v´altoznak. A lebeg˝opontos sz´amokat a megfelel˝o pufferben a grafikus hardvert˝ ol
f¨ ugg˝ oen ´altal´aban kisebb helyen – sz´ınkomponens eset´en 8 biten – t´arolja a rendszer,
mint amennyi sz¨ uks´eges lenne (32 bit). Ez´ert pazarl´as lenne pl. a sz´ınpufferb˝ ol beolva-
sott sz´ınkomponenseket 32 biten t´arolni, ann´al is ink´abb, mivel egy k´ep pixeleinek sz´ama
k¨onnyen meghaladhatja az 1 milli´ot is.
Az adatok t¨obbf´elek´eppen t´arolhat´ ok a mem´ori´aban, 8 – 32 bit, eg´esz vagy le-
beg˝opontos sz´am. Az OpenGL explicite defini´alja a k¨ ul¨ onb¨ oz˝o form´atumok k¨oz¨otti kon-
verzi´okat.
9.6. A pixeladatok t´arol´as´anak szab´alyoz´asa
A t´arol´asi m´od a glPixelStore() paranccsal szab´alyozhat´o.
void glPixelStore¦if¦ (GLenum pname, TYPE param);
A glDrawPixels*(), glReadPixels*(), glBitmap(), glPolygonStipple(), glTexI-
mage1D(), glTexImage2D() ´es glGetTexImage() parancsok m˝ uk¨ od´es´et befoly´asol´ o
pixeladat t´arol´asi m´odot ´all´ıtja be. A a 9.3. t´abl´azat a pname param´eter lehets´eges
´ert´ekeit, azok adatt´ıpus´at, kezdeti ´ert´ek´et ´es a megadhat´o ´ert´ekek intervallum´ at tar-
talmazza. GL UNPACK* param´eter eset´en azt szab´alyozza, hogy a glDrawPixels*(),
glBitmap(), glPolygonStipple(), glTexImage1D(), glTexImage2D() parancsok ho-
gyan csomagolj´ak ki az adatokat a mem´ori´ab´ ol; GL PACK* eset´en pedig azt, hogy a gl-
ReadPixels*() ´es glGetTexImage() parancsok hogyan t¨om¨ or´ıtik (csomagolj´ak ¨ossze)
az adatokat a mem´ori´ aba.
71
9.3. t´abl´azat. A pixeladatok t´arol´as´ anak param´eterei
pname adatt´ıpus kezdeti ´ert´ek felvehet˝o ´ert´ekek
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 nemnegat´ıv eg´esz
GL UNPACK SKIP ROWS
GL PACK SKIP ROWS
GLint 0 nemnegat´ıv eg´esz
GL UNPACK SKIP PIXELS
GL PACK SKIP PIXELS
GLint 0 nemnegat´ıv eg´esz
GL UNPACK ALIGNMENT
GL PACK ALIGNMENT
GLint 4
2 hatv´anyai
(1, 2, 4, . . .)
9.7. M˝ uveletek pixelek mozgat´asa sor´an
A pixeleken m˝ uveleteket hajthatunk v´egre, mik¨ozben a k´eppufferb˝ ol (vagy a k´eppufferba)
mozgatjuk. Ezen m˝ uveletek egyr´eszt a glPixelTransfer*(), m´asr´eszt a glPixelMap*()
paranccsal ´ırhat´ok le.
void glPixelTransfer¦if¦ (GLenum pname, TYPE param);
AglDrawPixels*(), glReadPixels*(), glCopyPixels*(), glTexImage1D(), glTe-
xImage2D() ´es glGetTexImage() parancsok m˝ uk¨ od´es´et befoly´asol´ o pixel´atviteli m´odot
´all´ıtja be. A a 9.3. t´abl´ azat a pname param´eter lehets´eges ´ert´ekei, azok adatt´ıpus´ at, kez-
deti ´ert´ek´et ´es a megadhat´o ´ert´ekek intervallum´ at tartalmazza.
9.8. Transzform´al´as t´abl´azat seg´ıts´eg´evel
A k´eperny˝ o mem´ori´aj´ aba val´ o be´ır´as el˝ott a sz´ınkomponenseket, a sz´ın- ´es stencilindexeket
egy t´abl´azat seg´ıts´eg´evel is m´odos´ıthatjuk.
void glPixelMap¦uiusf¦v (GLenum map, GLint mapsize, const TYPE *values);
Bet¨olti a values c´ımen kezd˝ od˝o, mapsize m´eret˝ u map t´ıpus´ u t´abl´azatot. A a 9.5.
t´abl´ azat tartalmazza a map param´eter lehets´eges ´ert´ekeit. A m´eret alap´ertelmez´ese 1, az
´ert´ekek´e pedig 0. A m´eretnek mindig 2 hatv´any´ anak kell lennie.
72
9.4. t´abl´azat. A glPixelTransfer() parancs param´eterei
pname adatt´ıpus kezdeti ´ert´ek felvehet˝o ´ert´ek
GL MAP COLOR
GL MAP STENCIL
GLboolean GL FALSE
GL TRUE
GL FALSE
GL INDEX SHIFT GLint 0 tetsz˝oleges eg´esz
GL INDEX OFFSET GLint 0 tetsz˝oleges eg´esz
GL RED SCALE GLfloat 1. tetsz˝oleges val´ os
GL GREEN SCALE GLfloat 1. tetsz˝oleges val´ os
GL BLUE SCALE GLfloat 1. tetsz˝oleges val´ os
GL ALPHA SCALE GLfloat 1. tetsz˝oleges val´ os
GL DEPTH SCALE GLfloat 1. tetsz˝oleges val´ os
GL RED BIAS GLfloat 0. tetsz˝oleges val´ os
GL GREEN BIAS GLfloat 0. tetsz˝oleges val´ os
GL BLUE BIAS GLfloat 0. tetsz˝oleges val´ os
GL ALPHA BIAS GLfloat 0. tetsz˝oleges val´ os
GL DEPTH BIAS GLfloat 0. tetsz˝oleges val´ os
9.5. t´abl´azat. A glPixelMap() paranccsal bet¨olthet˝ o t´abl´ azatok t´ıpusa
map mire vonatkozik milyen ´ert´eket tartalmaz
GL PIXEL MAP I TO I sz´ınindex sz´ınindex
GL PIXEL MAP S TO S stencilindex stencilindex
GL PIXEL MAP I TO R sz´ınindex R
GL PIXEL MAP I TO G sz´ınindex G
GL PIXEL MAP I TO B sz´ınindex B
GL PIXEL MAP I TO A sz´ınindex 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
Pufferek
Raszteres grafikus display-n a k´epet pixelekb˝ol (k´eppontokb´ol), apr´o t´eglalap alak´ u
foltokb´ol rakjuk ¨ossze. Ezen t´eglalapok oldalai az ablakkoordin´ata-rendszer tenge-
lyeivel p´arhuzamosak ´es a bal als´o sarok koordin´at´aival azonos´ıtjuk ˝oket. Egy-egy
k´ep el˝o´ all´ıt´ as´ahoz ´es megjelen´ıt´es´ehez a pixelekhez t´arolni kell sz´ın¨ uket, a l´athat´os´ agi
vizsg´alatokhoz a m´elys´eg¨ uket (az ablakkoordin´ata-rendszerbeli z koordin´at´at). Egy´eb
hat´asok el´er´ese ´erdek´eben tov´abbi adatok pixelenk´enti t´arol´asa is sz¨ uks´eges, pl. stencil-
index.
Azokat a t´arter¨ uleteket, melyekben minden pixelhez ugyanannyi adatot t´arolunk puf-
fernek nevezz¨ uk. Az OpenGL-ben t¨obb puffer van, ´ıgy pl. a sz´ınpuffer, m´elys´egpuffer. Egy
puffernek lehetnek alpufferei, mint pl. RGBA sz´ınmegad´asi m´od eset´en a sz´ınpuffernek R,
G, B, A vagy R, G, B alpufferei. Egy k´ephez tartoz´o ¨osszes puffert egy¨ uttesen k´eppuffernek
nevezz¨ uk.
Az OpenGL a k¨ovetkez˝o puffereket haszn´alja:
• sz´ınpufferek: bal els˝o, bal h´ats´o, jobb els˝o, jobb h´ats´o ´es tov´abbi kieg´esz´ıt˝o
sz´ınpufferek;
• m´elys´egpuffer;
• stencilpuffer;
• gy˝ ujt˝ opuffer.
A pufferek sz´ama ´es a bit/pixel m´erete implement´aci´ of¨ ugg˝ o, azonban biztos, hogy
minden implement´ aci´oban van legal´abb egy sz´ınpuffer RGBA sz´ınmegad´asi m´odhoz ´es
ehhez kapcsol´od´oan stencil-, m´elys´eg- ´es gy˝ ujt˝opuffer; tov´abb´ a egy sz´ınpuffer sz´ınindex
m´odhoz stencil- ´es m´elys´egpufferrel. A glGetIntegerv() paranccsal lek´erdezhetj¨ uk, hogy
implement´aci´ onk az egyes pufferekben pixelenk´ent h´any biten t´arolja az inform´aci´ot. A
lek´erdezhet˝ o pufferek azonos´ıt´ oj´ at a a 10.1. t´abl´azat tartalmazza.
10.1. Sz´ınpufferek
A sz´ınpuffer az, amibe rajzolunk. Ezek vagy sz´ınindexeket vagy RGB sz´ınkomponenseket
´es alfa ´ert´ekeket tartalmaznak. Azok az OpenGL implement´ aci´ok, melyek t´amogatj´ ak a
74
10.1. t´abl´ azat. A pufferek azonos´ıt´oi
azonos´ıt´ o jelent´ese
GL RED BITS
GL GREEN BITS
GL BLUE BITS
GL ALPHA BITS
a sz´ınpufferben az R, G, B, A komponensek
t´arol´ as´ara haszn´alt bitek sz´ama pixelenk´ent
GL DEPTH BITS a m´elys´egpuffer pixelenk´enti m´erete
GL STENCIL BITS a stencilpuffer pixelenk´enti m´erete
GL ACCUM RED BITS
GL ACCUM GREEN BITS
GL ACCUM BLUE BITS
GL ACCUM ALPHA BITS
a gy˝ ujt˝ opufferben az R, G, B, A komponensek
t´arol´ as´ara haszn´alt bitek sz´ama pixelenk´ent
sztereoszk´opikus (bicentr´ alis) ´abr´azol´ ast, bal ´es jobb oldali sz´ınpuffereket is tartalmaznak.
Ha egy implement´aci´ o nem t´amogatja a sztereoszk´opikus ´abr´ azol´ast, akkor csak bal oldali
sz´ınpuffere van. Ha az anim´aci´ot t´amogatja az implement´ aci´o, akkor van els˝o ´es h´ats´o
sz´ınpuffere is, egy´ebk´ent csak els˝o. Minden OpenGL implement´aci´ oban lenni kell egy bal
els˝o sz´ınpuffernek.
Az implement´aci´ ok legfeljebb 4 tov´abbi, k¨ozvetlen¨ ul meg nem jelen´ıthet˝ o sz´ınpuffert
tartalmazhatnak. Az OpenGL nem rendelkezik ezek haszn´alat´ar´ ol, vagyis tetsz´es¨ unk
szerint hasznos´ıthatjuk ˝oket, pl. ism´etl˝od˝ oen haszn´alt k´epek t´arol´as´ ara, ´ıgy ugyanis nem
kell mindig ´ ujrarajzolni a k´epet, el´eg puszt´an ´atm´ asolni egyik pufferb˝ol a m´asikba.
A glGetBoolean(GL STEREO) paranccsal lek´erdezhetj¨ uk, hogy implement´aci´ onk
t´amogatja-e a sztereoszk´opikus ´abr´azol´ ast (van-e jobb oldali sz´ınpuffere is); a glGet-
Boolean(GL DOUBLE BUFFER) paranccsal pedig azt, hogy az anim´aci´ ot t´amogatja-e
(van-e h´ats´o sz´ınpuffere). A GL AUX BUFFERS param´eterrel kiadott glGetIntegerv()
paranccsal az opcion´alis sz´ınpufferek sz´am´ at kaphatjuk meg.
10.2. M´elys´egpuffer
Az OpenGL a m´elys´egpuffer (z-puffer) algoritmust haszn´alja a l´athat´ os´ag
meg´allap´ıt´as´ ahoz, ez´ert minden pixelhez m´elys´eget (az ablakkoordin´ata-rendszerbeli z
´ert´eket) is t´arol. Ha m´ask´ent nem rendelkez¨ unk, a rendszer fel¨ ul´ırja a hozz´a tartoz´o
pixelt az ´ uj fragmentummal, amennyiben annak az ablakkoordin´ata-rendszerbeli z ´ert´eke
kisebb, mivel ez a z ´ert´ek (a m´elys´eg) a n´ez˝opontt´ ol m´ert t´avols´agot fejezi ki.
10.3. Stencilpuffer
A stencilpuffert arra haszn´aljuk, hogy a rajzol´ast a k´eperny˝o bizonyos r´eszeire korl´atozzuk.
Ahhoz hasonl´ıt, mint amikor egy kartonlapba feliratot v´agunk, ´es a lapot egy fel¨ uletre
helyezve lefestj¨ uk, aminek sor´an a fel¨ uletre csak a felirat ker¨ ul. A f´enym´ asol´ok elterjed´ese
el˝ott ezt a technik´ at haszn´alt´ ak kis p´eld´ anysz´am´ u sokszoros´ıt´asra. M´as hasonlattal ´elve,
75
a stencilpuffer haszn´alat´ aval tetsz˝oleges alak´ u ablakon ´at n´ezhetj¨ uk a vil´agot. L´atni fo-
gjuk, hogy e mellett m´eg m´as “tr¨ ukk¨ okh¨oz”, speci´alis hat´asokhoz is j´ol haszn´alhat´o a
stencilpuffer.
10.4. Gy˝ ujt˝ opuffer
A gy˝ ujt˝ opuffer RGBA sz´ınkomponenseket tartalmaz ugyan´ ugy, mint a sz´ınpuffer, ha a
sz´ınmegad´ asi m´od RGBA. Sz´ınindex m´odban a gy˝ ujt˝opuffer tartalma defini´alatlan. A
gy˝ ujt˝ opuffert ´altal´ aban arra haszn´aljuk, hogy t¨obb k´epet ¨osszegezve ´all´ıtsunk el˝o egy
v´egs˝ o k´epet. Ezzel a m´odszerrel vihet˝o v´egbe pl. a teljes k´ep kisim´ıt´asa (antialiasing).
A gy˝ ujt˝ opufferbe nem tudunk k¨ozvetlen¨ ul rajzolni, az akkumul´al´ as mindig t´eglalap alak´ u
pixelt¨omb¨ okre vonatkozik ´es az adatforgalom k¨ozte ´es a sz´ınpuffer k¨oz¨ott van.
A gy˝ ujt˝opuffer haszn´alat´aval hasonl´o hat´as ´erhet˝ o el, mint amikor a f´enyk´ep´esz
ugyanarra a filmkock´ara t¨obbsz¨ or expon´al. Ekkor ugyanis a lef´enyk´epezett t´erben eset-
legesen mozg´o alakzat t¨obb p´eld´ anyban, elmos´odottan fog megjelenni. Ezen k´ıv¨ ul m´as
hat´asok is el´erhet˝ok, ´ıgy pl. a teljes k´ep kisim´ıt´ asa, a m´elys´eg´eless´eg szimul´ al´asa is.
Az OpenGL parancsokkal nem lehet k¨ozvetlen¨ ul csak a gy˝ ujt˝ opufferbe ´ırni. A
sz´ınpufferek valamelyik´ebe kell rajzolni ´es k¨ozben a gy˝ ujt˝ opufferben is t´arolni kell a
k´epet, majd az ¨osszegy˝ ujt¨ ott – a gy˝ ujt˝opufferben megkompon´alt – k´ep visszam´asolhat´ o a
sz´ınpufferbe, hogy l´athat´o legyen. A kerek´ıt´esi hib´ak cs¨okkent´ese ´erdek´eben a gy˝ ujt˝ opuffer
bit/pixel ´ert´eke ´altal´aban nagyobb, mint a sz´ınpufferek´e.
void glAccum (GLenum op, GLfloat value);
A gy˝ ujt˝ opuffer m˝ uk¨ od´es´et szab´alyozza. Az op param´eterrel a m˝ uveletet v´alaszthatjuk
ki, a value param´eterrel pedig a m˝ uvelethez haszn´alt ´ert´eket. Az op lehets´eges ´ert´ekei ´es
hat´asa:
• GL ACCUM: a glReadBuffer() paranccsal olvas´ asra kiv´alasztott puffer pixeleinek
R, G, B, A ´ert´ekeit kiolvassa, megszorozza ˝oket a value ´ert´ekkel ´es hozz´aadja a
gy˝ ujt˝ opufferhez.
• GL LOAD: a glReadBuffer() paranccsal olvas´ asra kiv´alasztott puffer pixeleinek
R, G, B, A ´ert´ekeit kiolvassa, megszorozza ˝oket a value ´ert´ekkel ´es fel¨ ul´ırja vel¨ uk a
gy˝ ujt˝ opuffer megfelel˝o elemeit.
• GL RETURN: a gy˝ ujt˝ opufferb˝ol kiolvasott ´ert´ekeket megszorozza a value ´ert´ekkel,
majd a kapott eredm´enyt az ´ırhat´ o sz´ınpufferekbe be´ırja.
• GL ADD: a gy˝ ujt˝opufferbeli ´ert´ekekhez hozz´aadja a value ´ert´eket, majd az
eredm´enyt vissza´ırja a gy˝ ujt˝opufferbe.
• GL MULT: a gy˝ ujt˝ opufferbeli ´ert´eket megszorozza a value ´ert´ekkel, az eredm´enyt a
[−1., 1.] intervallumra lev´agja, majd vissza´ırja a gy˝ ujt˝opufferbe.
76
10.4.1. Teljes k´ep kisim´ıt´asa
A teljes k´ep kisim´ıt´ as´ ahoz el˝obb t¨or¨ olj¨ uk a gy˝ ujt˝ opuffert ´es enged´elyezz¨ uk az els˝o
sz´ınpuffer ´ır´as´ at ´es olvas´ as´ at. Ez ut´an rajzoljuk meg n-szer a k´epet picit k¨ ul¨ onb¨ oz˝o
poz´ıci´ob´ ol (a vet´ıt´esi lek´epez´est picit m´odos´ıtsuk), mintha csak a f´enyk´epez˝og´epet tart´o
k´ez remegne. A kamera remegtet´es´enek olyan kicsinek kell lenni, hogy a k´epmez˝on m´erve
az elmozdul´as 1 pixeln´el kisebb legyen. Amikor ugyanarr´ ol az objektumr´ol t¨obb k´epet
kell ilyen m´odon l´etrehozni, fontos k´erd´es, hogy mik´ent v´alasszuk meg az elmozdul´asokat.
Egy´altal´ an nem biztos, hogy az a j´o, ha a pixelt egyenletesen felosztjuk mindk´et ir´anyban
´es a r´acspontokba toljuk el. A helyes feloszt´as m´odja csak tapasztalati ´ uton ´allap´ıthat´o
meg.
A gy˝ ujt˝opufferbe minden rajzol´asn´ al a
glAccum(GL ACCUM,1./n);
be´all´ıt´ as mellett ker¨ ulj¨ on a k´ep, v´eg¨ ul a
glAccum(GL RETURN,1.);
parancsot adjuk ki, amivel az ¨osszegy˝ ujt¨ ott k´ep l´athat´o lesz. Az elmozdul´as, a kamera
remeg´ese egy pixeln´el kisebb legyen! Az elj´ar´ as egy kicsit gyorsabb, ha nem t¨or¨olj¨ uk a
gy˝ ujt˝ opuffert, hanem az els˝o k´ep megrajzol´asa el˝ott a
glAccum(GL LOAD,1./n);
parancsot adjuk ki. Ha nem akarjuk, hogy az n darab k¨ozb¨ uls˝ o f´azis is l´athat´ o
legyen, akkor abba a sz´ınpufferbe rajzoljunk, amelyik nem l´athat´ o – ez dupla sz´ınpuffer
haszn´alatakor lehets´eges – ´es csak a
glAccum(GL RETURN,1.);
parancs kiad´asa el˝ott v´altsunk a l´athat´o sz´ınpufferre.
M´asik lehet˝os´eg egy interakt´ıv k¨ornyezet l´etrehoz´ asa, amikor a felhaszn´al´o minden k´ep
hozz´aad´ asa ut´an d¨onthet arr´ol, hogy tov´ abb jav´ıtsa-e a k´epet. Ekkor a rajzol´ast v´egz˝o
ciklusban minden kirajzol´as ut´an a
glAccum(GL RETURN,n/i);
parancsot kell kiadni, ahol i a ciklusv´altoz´ o.
10.4.2. Bemozdul´asos ´eletlens´eg (motion blur)
Felt´etelezz¨ uk, hogy az ´abr´ azolt t´err´eszben vannak r¨ogz´ıtett ´es mozg´o objektumok, ´es a
mozg´o alakzatok k¨ ul¨ onb¨oz˝ o helyzeteit ugyanazon a k´epen akarjuk ´abr´azolni ´ ugy, hogy az
id˝oben visszafel´e haladva a k´epek egyre elmos´odottabbak legyenek. A megold´as a k´ep
kisim´ıt´ as´ahoz hasonl´ıt. A k¨ ul¨ onbs´eg az, hogy most nem a kamer´at kell mozgatni, hanem
az alakzatot, ´es a
glAccum(GL MULT,decayf);
parancsot kell kiadni, ahol decayf ∈ [0., 1.], ha ez a t´enyez˝o kicsi a mozg´as gyorsabbnak
l´atszik. V´eg¨ ul a k´epet – a h´att´er, a mozg´o alakzat pillanatnyi poz´ıci´oja ´es az el˝oz˝ o
helyzetek ´altal le´ırt elmos´od´ o cs´ova – a glAccum(GL RETURN,1.) paranccsal a l´athat´o
sz´ınpufferbe ´ırhatjuk.
10.4.3. M´elys´eg´eless´eg
Egy f´enyk´epez˝og´eppel k´esz´ıtett k´epen vannak objektumok, melyek ´elesen l´atszanak, m´as
r´eszek kiss´e (vagy nagyon) hom´alyosak. Norm´al k¨or¨ ulm´enyek k¨oz¨ott az OpenGL-el
77
k´esz´ıtett k´epek minden r´esze ugyanolyan ´eles. A gy˝ ujt˝ opufferrel azonban el´erhet˝o az,
hogy egy adott s´ıkt´ ol t´avolodva egyre hom´alyosabb, elmos´odottabb legyen a k´ep. Ez
nem a f´enyk´epez˝og´ep m˝ uk¨ od´es´enek a szimul´ al´asa, de a v´egeredm´eny el´egg´e hasonl´ıt a
f´enyk´epez˝og´eppel k´esz´ıtett k´ephez.
10.1. ´abra. A vet´ıt´esi k¨oz´eppontok elhelyez´ese a m´elys´eg´eless´eg modellez´es´ehez
Ennek ´erdek´eben t¨obbsz¨ or kell megrajzolni a k´epet a perspekt´ıv lek´epez´es olyan
v´altoztat´ asa mellett, hogy az ´abr´ azoland´o t´err´eszt megad´o csonka g´ ul´aknak legyen egy
k¨oz¨ os t´eglalapja, mely a csonka g´ ula alaplapj´aval p´arhuzamos s´ıkban van (l´asd a 10.1.
´abr´ at). Ennek a m´odos´ıt´asnak term´eszetesen nagyon csek´elynek kell lennie. A k´epet a
szok´asos m´odon ´atlagolni kell a gy˝ ujt˝ opufferben.
10.5. Pufferek t¨orl´ese
A pufferek t¨orl´ese nagyon id˝oig´enyes feladat, egyszer˝ ubb rajzok eset´en a t¨orl´es hosszabb
ideig tarthat, mint maga a rajzol´as. Ha nemcsak a sz´ınpuffert, hanem pl. a m´elys´egpuffert
is t¨or¨ olni kell, ez ar´anyosan n¨oveli a t¨orl´eshez sz¨ uks´eges id˝ot. A t¨orl´esre ford´ıtott id˝o
cs¨okkent´ese ´erdek´eben legt¨obb grafikus hardver egyidej˝ uleg t¨obb puffert is tud t¨or¨olni,
amivel jelent˝os megtakar´ıt´as ´erhet˝ o el.
A t¨orl´eshez el˝obb be kell ´all´ıtani a t¨orl´esi ´ert´eket, azt az ´ert´eket, amivel fel¨ ul akarjuk
´ırni a puffer elemeit, majd v´egre kell hajtani mag´at a t¨orl´est.
void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
A t¨orl´esi sz´ın megad´asa RGBA sz´ınmegad´asi m´od eset´en. A megadott ´ert´ekeket a
rendszer a [0., 1.] intervallumra lev´agja. Alap´ertelmez´es: 0., 0., 0., 0..
void glClearIndex (GLfloat index);
A t¨orl´esi sz´ın megad´asa sz´ınindex m´od eset´en. Alap´ertelmez´es: 0.
78
void glClearDepth (GLclampd depth);
A t¨orl´esi m´elys´eg megad´asa. A megadott ´ert´ekeket a rendszer a [0., 1.] intervallumra
lev´agja. Alap´ertelmez´es: 1..
void glClearStencil (GLint s);
A stencilpuffer t¨orl´esi ´ert´ek´enek megad´asa. Alap´ertelmez´es: 0.
void glClearAccum (GLclampf red, GLclampf green, GLclampf blue, GLclampf al-
pha);
A gy˝ ujt˝opuffer t¨orl´esi sz´ın´enek megad´asa. A megadott ´ert´ekeket a rendszer a [0., 1.]
intervallumra lev´agja. Alap´ertelmez´es: 0., 0., 0., 0..
void glClear (GLbitfield mask);
A mask param´eterrel megadott puffereket t¨orli. mask ´ert´eke 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 tetsz˝oleges kombin´ aci´ oja lehet. GL COLOR BUFFER BIT
eset´en mindig a megfelel˝o sz´ınpuffer t¨orl˝ odik, azaz vagy a sz´ınindex-puffer, vagy az
RGBA puffer; tov´ abb´a minden ´ırhat´ o puffert t¨or¨ ol a rendszer.
10.6. Az ´ırand´ o ´es olvasand´ o pufferek kiv´alaszt´asa
A rajzol´as eredm´enye az ´altalunk kiv´alasztott sz´ınpufferbe, vagy sz´ınpufferekbe ker¨ ulhet,
teh´at a bal els˝o, jobb els˝o, bal h´ats´ o, jobb h´ats´o vagy a kieg´esz´ıt˝o sz´ınpufferekbe,
illetve ezek tetsz˝oleges kombin´ aci´oj´ aba, azaz egyszerre t¨obb sz´ınpufferbe is rajzolha-
tunk. Anim´aci´o eset´en pl. a k¨oz¨os h´atteret egyszerre megrajzolhatjuk az els˝o ´es h´ats´ o
sz´ınpufferekbe, majd a mozg´o alakzat k¨ ul¨ onb¨ oz˝o helyzeteit felv´altva az els˝o, illetve a h´ats´o
pufferbe, gondoskodva a k´et puffer megfelel˝o cser´ej´er˝ol.
A glDrawBuffer() paranccsal ´all´ıthatjuk be a kurrens puffert.
void glDrawBuffer (GLenum mode);
Az´ırand´ o vagy t¨orlend˝o sz´ınpuffer kiv´alaszt´ asa. A mode param´eter az al´abbi ´ert´ekeket
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 els˝o ´es a h´ats´o pufferekre is vonatkozik, hasonl´ok´eppen
a GL FRONT ´es GL BACK a bal ´es a jobb oldalira is. A GL AUXi pedig az i-edik
kieg´esz´ıt˝o sz´ınpuffert azonos´ıtja.
79
Kijel¨olhet¨ unk olyan puffert is amelyik nem l´etezik mindaddig, m´ıg a kijel¨olt pufferek
k¨oz¨ ott van l´etez˝o. Ha a kiv´alasztott pufferek egyike sem l´etezik, hib´ara jutunk.
Egy k´eps´ık haszn´alata eset´en (single-buffered mode) az alap´ertelmez´es GL FRONT,
k´et k´eps´ık (double-buffered mode) eset´en pedig GL BACK. (A k´et m´od k¨oz¨ otti v´alaszt´as
hardverf¨ ugg˝ o, teh´at a GLX vagy GLUT k¨onyvt´ ar megfelel˝o f¨ uggv´eny´evel lehet megtenni.)
void glReadBuffer (GLenum mode);
Annak a sz´ınpuffernek a kiv´alaszt´ asa, amelyb˝ol a glReadPixels(), glCopyPi-
xels(), glCopyTexImage*(), glCopyTexSubImage*() ´es glCopyConvolutionFil-
ter*() f¨ uggv´enyekkel pixeladatokat olvashatunk be. A kor´ abbi glReadBuffer()
h´ıv´ as´anak hat´as´at ´erv´enytelen´ıti. Csak l´etez˝ o pufferekb˝ol val´o olvas´as enged´elyezhet˝o.
Egy k´eps´ık haszn´alata eset´en (single-buffered mode) az alap´ertelmez´es GL FRONT, k´et
k´eps´ık (double-buffered mode) eset´en pedig GL BACK. (A k´et m´od k¨oz¨otti v´alaszt´ as
hardverf¨ ugg˝ o, teh´at a GLX vagy GLUT k¨onyvt´ ar megfelel˝o f¨ uggv´eny´evel lehet megtenni.)
10.7. Pufferek maszkol´asa
Miel˝ott az OpenGL be´ırna egy adatot a kiv´alasztott pufferbe (sz´ın, m´elys´eg, stencil)
maszkolja az adatokat, vagyis bitenk´enti logikai ´es (AND) m˝ uveletet hajt v´egre a maszk
megfelel˝o elem´en ´es a be´ırand´o adaton. A maszkol´ asi m˝ uveleteket az al´abbi parancsokkal
adhatjuk meg:
void glIndexMask (GLuint mask);
Csak sz´ınindex sz´ınmegad´asi m´odban van hat´asa, seg´ıts´eg´evel a sz´ınindex maszkolhat´ o.
Ahol a maszkban 1 szerepel, a sz´ınindex megfelel˝o bitj´et be´ırja a rendszer a sz´ınpufferbe,
ahol 0 szerepel azt nem. Alap´ertelmez´es szerint a sz´ınindex maszkj´anak minden bitje 1.
void glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean al-
pha);
Csak RGBA sz´ınmegad´ asi m´od eset´en van hat´asa, seg´ıts´eg´evel azt szab´alyozhatjuk,
hogy a rendszer az R, G, B, A ´ert´ekek k¨oz¨ ul melyiket ´ırja be a sz´ınpufferbe. GL TRUE
eset´en be´ırja, GL FALSE eset´en nem ´ırja be. Alap´ertelmez´es szerint mind a n´egy kom-
ponenst be´ırja.
void glDepthMask (GLboolean flag);
Ha a flag ´ert´eke GL TRUE, a m´elys´egpuffer ´ırhat´ o, GL FALSE eset´en csak olvashat´ o.
Alap´ertelmez´es: GL TRUE.
void glStencilMask (GLuint mask);
Ahol a maskban 1 szerepel, a sz´ınindex megfelel˝o bitj´et be´ırja a rendszer a sz´ınpufferbe,
ahol 0 szerepel azt nem. Alap´ertelmez´es szerint a mask minden bitje 1.
80
Sz´ınindex m´odban sz´amos tr¨ ukk el´erhet˝ o maszkol´assal.
A m´elys´egpuffer maszkol´ as´anak alkalmaz´ as´ara m´ar az ´atl´atsz´ o alakzatok ´abr´azol´ as´ an´al
l´athattunk p´eld´at (l´asd a 8.1. szakaszt). Tov´ abbi alkalmaz´ as lehet pl. ha ugyanabban
a k¨ornyezetben mozog egy alak, akkor a h´atteret csak egyszer rajzoljuk meg, majd a
m´elys´egpuffert csak olvashat´ ov´a tessz¨ uk, ´es az el˝ot´erben mozg´o alakot ´ıgy rajzoljuk meg
k´epkock´ ank´ent. Ez mindaddig j´ol m˝ uk¨ odik, m´ıg az el˝ot´erben l´ev˝ o alak ´abr´azol´ as´ahoz nem
sz¨ uks´eges a m´elys´egpuffer ´ırhat´ os´aga.
A stencilpuffer maszkol´ as´aval t¨obb 1 bit/pixel m´eret˝ u stencils´ık haszn´alhat´o. Ezek
seg´ıts´eg´evel hajthat´o v´egre pl. a z´art fel¨ uletekb˝ ol a v´ag´os´ıkok ´altal lemetszett r´eszek be-
fed´ese. A glStencilMask() paranccsal megadott maszk azt szab´alyozza, hogy melyik
bits´ık ´ırhat´ o. Az itt megadott maszk nem azonos a glStencilFunc() parancs harma-
dik param´eterek´ent megadand´o maszkkal, azzal ugyanis azt szab´alyozzuk, hogy a stencil
f¨ uggv´eny mely bits´ıkokat vegye figyelembe.
81
11. fejezet
A fragmentumokon v´egrehajtott
vizsg´alatok ´es m˝ uveletek
Amikor geometriai alakzatokat, sz¨oveget vagy raszteres k´epet rajzolunk az OpenGL
seg´ıts´eg´evel, a megjelen´ıtend˝ o alakzatokon sok m˝ uveletet hajt v´egre a rendszer: modell-
n´ez˝ opont transzform´aci´o, megvil´ag´ıt´ asi sz´am´ıt´asok, vet´ıt´esi transzform´aci´ o, k´epmez˝ o-
transzform´aci´ o, fragment´al´ as. A fragmentumok is sok vizsg´alaton mennek ´at m´ıg v´eg¨ ul
valamilyen form´aban esetleg megjelennek a k´eperny˝ on. A rendszer pl. figyelmen k´ıv¨ ul
hagyja azokat a fragmentumokat, amelyek a k´epmez˝ o adott ter¨ ulet´en k´ıv¨ ul esnek, vagy
t´avolabb vannak a n´ez˝opontt´ ol, mint a megfelel˝o pixel aktu´alis m´elys´ege. A vizsg´alatok
ut´an megmarad´o fragmentumok sz´ın´et a megfelel˝o pixelek sz´ın´evel kombin´ alhatja a rend-
szer az alfa komponensek szerint.
Ebben a fejezetben a fragmentumokon v´egrehajthat´o vizsg´alatokat ´es m˝ uveleteket
foglaljuk ¨ossze. Ezek teljes list´aja a v´egrehajt´as sorrendj´eben a k¨ovetkez˝ o:
1. kiv´ag´ asi vizsg´alat,
2. alfa-vizsg´alat,
3. stencilvizsg´alat,
4. m´elys´egvizsg´alat,
5. sz´ınkombin´al´ as alfa szerint,
6. dithering,
7. logikai m˝ uveletek.
Ha egy fragmentum a fentiek k¨oz¨ ul valamelyik vizsg´alaton fennakad, akkor a t¨obbi
vizsg´alatot nem hajtja v´egre rajta a rendszer.
11.1. Kiv´ag´asi vizsg´alat
A glScissor() paranccsal a rajzol´ast lesz˝ uk´ıthetj¨ uk az ablaknak, egy az ablak oldalaival
p´arhuzamos oldal´ u t´eglalap alak´ u ter¨ ulet´ere. Egy fragmentum akkor jut t´ ul a kiv´ag´ asi
vizsg´alaton, ha erre a t´eglalapra esik a k´epe.
82
void glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
A kiv´ag´asi t´eglalap m´ereteit adja meg az ablakkoordin´ata-rendszerben. A t´eglalap
bal als´o sark´anak koordin´at´ ai (x, y), sz´eless´ege width, magass´aga height. Alap´ertelmez´es
szerint a kiv´ag´asi t´eglalap megegyezik az ablakkal.
A kiv´ag´as a stencilvizsg´alat speci´alis eset´enek tekinthet˝ o. L´et´et az indokolja, hogy
ezt a kiv´ag´ast k¨onny˝ u a hardverben implement´alni, ez´ert nagyon gyors lehet, ellent´etben
a tetsz˝oleges alak´ u kiv´ag´asi ter¨ uletet megenged˝o stencilvizsg´alattal, melyet szoftverb˝ol
val´os´ıtanak meg.
A kiv´ag´asi vizsg´alatot a glEnable(GL SCISSOR TEST) paranccsal le-
het enged´elyezni, a glDisable(GL SCISSOR TEST) paranccsal letiltani, a
glIsEnabled(GL SCISSOR TEST) paranccsal pedig lek´erdezhet˝o, hogy a kiv´ag´as
enged´elyezett-e. A GL SCISSOR BOX param´eterrel kiadott glGetIntegerv() parancc-
sal pedig a kiv´ag´asi t´eglalap adatait kapjuk meg.
11.2. Alfa-vizsg´alat
RGBA sz´ınmegad´asi m´od eset´en lehet˝os´eg van fragmentumok elhagy´as´ara alfa kompo-
nens¨ uk alapj´an. Ha ez a vizsg´alat enged´elyezett, a rendszer az ´ uj fragmentum alfa ´ert´ek´et
¨osszehasonl´ıtja egy referencia´ert´ekkel, ´es az ¨osszehasonl´ıt´ as eredm´eny´et˝ ol f¨ ugg˝oen eldobja
a fragmentumot, vagy tov´ abbengedi a megjelen´ıt´esi m˝ uveletsoron. A referencia´ert´eket ´es
az ¨osszehasonl´ıt´ o f¨ uggv´enyt a glAlphaFunc() paranccsal adhatjuk meg.
void glAlphaFunc (GLenum func, GLclampf ref );
A referencia´ert´eket ´es az ¨osszehasonl´ıt´ o f¨ uggv´enyt ´all´ıtja be. A megadott ref ´er´etket
lev´agja a [0., 1.] intervallumra. A 11.1. t´abl´ azat tartalmazza a func param´eter le-
hets´eges ´ert´ekeit, alfa az ´ uj fragmentum alfa komponens´et jel¨oli. Az alfa szerinti
vizsg´alatot a glEnable(GL ALPHA TEST) paranccsal lehet enged´elyezni, a glDisa-
ble(GL ALPHA TEST) paranccsal letiltani, a glIsEnabled(GL ALPHA TEST) pa-
ranccsal pedig lek´erdezhet˝o, hogy enged´elyezett-e. A glGetIntegerv() parancsot a
GL ALPHA TEST FUNC param´eterrel kiadva a kurrens ¨osszehasonl´ıt´ o f¨ uggv´enyt, a
GL ALPHA TEST REF param´eterrel kiadva pedig a referencia´ert´eket k´erdezhetj¨ uk le.
Alap´ertelmez´es szerint func = GL AWAYS, ref = 0 ´es nem enged´elyezett.
Az alfa-vizsg´alattal ´atl´ atsz´os´ agi algoritmust implement´alhatunk. Ehhez az alakzatot
k´etszer kell megjelen´ıteni. Az els˝o megjelen´ıt´eskor csak azokat a fragmentumokat en-
gedj¨ uk ´at, melyek alfa ´ert´eke 1, a m´asodik sor´an csak azokat, melyek alf´aja nem 1. A
m´elys´egs´egvizsg´ alatot mindk´et esetben enged´elyezz¨ uk, de a m´asodik rajzol´as el˝ott tegy¨ uk
a m´elys´egpuffert csak olvashat´ov´ a.
Az alfa-vizsg´alat seg´ıts´eg´evel billboarding hat´as is megval´os´ıthat´o. A text´ ura azon
r´eszeinek alfa ´ert´ek´et ´all´ıtsuk 0-ra, amelyiket ´atl´ atsz´ov´ a akarjuk tenni, a t¨obbit 1-re,
´es ´all´ıtsuk az alfa-vizsg´alat referencia´ert´ek´et 0.5-re (vagy m´as 0 ´es 1 k¨oz´e es˝o ´ert´ekre),
tov´abb´ a ¨osszehasonl´ıt´o f¨ uggv´enyk´ent v´alasszuk a GL GREATER-t.
83
11.1. t´abl´ azat. Az alfa-vizsg´alathoz haszn´alhat´o ¨osszehasonl´ıt´ o f¨ uggv´enyek
func hat´asa
GL NEVER soha nem engedi tov´abb a fragmentumot
GL ALWAYS mindig tov´abbengedi 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. Stencilvizsg´alat
A stencilvizsg´alatokat csak akkor hajtja v´egre a rendszer, ha van stencilpuffer, egy´ebk´ent
a fragmentumok ezen a ponton mindig t´ uljutnak. A vizsg´alat abb´ol ´all, hogy a rend-
szer ¨osszehasonl´ıtja a fragmentumnak megfelel˝o pixelhez a stencilpufferben t´arolt ´ert´eket
egy referencia´ert´ekkel, ´es az ¨osszehasonl´ıt´ as eredm´eny´et˝ ol f¨ ugg˝ oen m´odos´ıtja a pufferben
t´arolt ´ert´eket. A referencia´ert´eket ´es az ¨osszehasonl´ıt´ o f¨ uggv´enyt a glStencilFunc(), a
m´odos´ıt´ast pedig a glStencilOp() paranccsal adhatjuk meg.
void glStencilFunc (GLenum func, GLint ref, GLuint mask);
A stencilvizsg´alatn´ al haszn´alt ¨osszehasonl´ıt´ o f¨ uggv´enyt (func), referencia´ert´eket (ref )
´es maszkot (mask) ´all´ıtja be. A rendszer a referencia´ert´eket a func f¨ uggv´eny szerint
¨osszehasonl´ıtja a stencilpufferben t´arolt ´ert´ekkel, de annak csak azokat a bitjeit veszi
figyelembe, amelyhez tartoz´o bitnek a mask-ban 1 az ´ert´eke. Ha a stencilpuffernek s
darab bits´ıkja van, akkor a rendszer az ¨osszehasonl´ıt´ as el˝ott a stencilpufferbeli ´ert´eket
´es a mask s darab kisebb helyi´ert´ek˝ u bitj´et logikai ´es (AND) m˝ uveletbe hozza ´es ennek
eredm´eny´en v´egzi el az ¨osszehasonl´ıt´ast. A func param´eter lehets´eges ´ert´ekeit a 11.2.
t´abl´ azat tartalmazza, a t´abl´ azatban val a fenti bitenk´enti AND m˝ uvelet eredm´eny´et jel¨oli.
Alap´ertelmez´es szerint func = GL ALWAYS, ref = 0 ´es mask minden bitje 1.
void glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
Seg´ıts´eg´evel azt adhatjuk meg, hogy a rendszer hogyan m´odos´ıtsa a stencilpuffert
amikor a fragmentum tov´ abbmegy vagy fennakad a vizsg´alaton. A fail, zfail ´es zpass
param´eterek ´ert´ekei a 11.3. t´abl´azat szerintiek lehetnek.
Inkrement´ al´ as ´es dekrement´al´ as ut´an a rendszer a kapott ´ert´eket a [0, 2
s
− 1] inter-
vallumra lev´agja, ahol s a stencilpuffer bit/pixel m´erete. A fail param´eterrel megadott
f¨ uggv´enyt akkor haszn´alja a rendszer, ha a fragmentum nem jut t´ ul a stencilvizsg´alaton; a
zfail -el megadottat akkor, ha a stencilvizsg´alaton t´ uljut, de a m´elys´egvizsg´alaton nem; a
zpass-al megadottat pedig akkor, ha a stencilvizsg´alaton t´ uljut ´es nincs m´elys´egvizsg´ alat,
vagy van de azon is t´ uljutott. Alap´ertelmez´es szerint fail = zfail = zpass = GL KEEP.
84
11.2. t´abl´ azat. A stencilvizsg´alathoz haszn´alhat´o ¨osszehasonl´ıt´ o f¨ uggv´enyek
func hat´asa
GL NEVER soha nem engedi tov´abb a fragmentumot
GL ALWAYS mindig tov´abbengedi 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. t´abl´ azat. A glStencilOp() f¨ uggv´eny param´etereinek lehets´eges ´ert´ekei
´ert´ek hat´asa
GL KEEP megtartja a kurrens ´ert´eket
GL ZERO 0-val fel¨ ul´ırja a kurrens ´ert´eket
GL REPLACE a referencia´ert´ekkel ´ırja fel¨ ul
GL INCR eggyel n¨oveli a kurrens ´ert´eket
GL DECR eggyel cs¨okkenti a kurrens ´ert´eket
GL INVERT bitenk´ent invert´ alja a kurrens ´ert´eket
A stencilvizsg´alatot a glEnable(GL STENCIL TEST) paranccsal en-
ged´elyezhetj¨ uk, a glDisable(GL STENCIL TEST) paranccsal letilthatjuk, a
glIsEnabled(GL STENCIL TEST) paranccsal pedig lek´erdezhetj¨ uk, hogy enged´elyezett-
e. A stencilvizsg´alatokkal kapcsolatos be´all´ıt´ asokat a 11.4. t´abl´ azatbeli param´eterekkel
kiadott glGetIntegerv() paranccsal k´erdezhetj¨ uk le.
A stencilvizsg´alat leggyakoribb alkalmaz´ asa, hogy a k´eperny˝ o tetsz˝oleges alak´ u
ter¨ ulet´et lemaszkoljuk, azaz nem engedj¨ uk, hogy oda rajzoljon a rendszer. Ehhez el˝obb
t¨olts¨ uk fel a stencilpuffert 0-val ´es rajzoljuk meg a k´ıv´ant alakot a stencilpufferbe 1
´ert´ekkel. K¨ozvetlen¨ ul nem lehet a stencilpufferbe rajzolni, de a k¨ovetkez˝ o elj´ar´ assal k¨ozve-
tett m´odon ugyanazt az eredm´enyt kapjuk:
• a sz´ınpufferbe zpass = GL REPLACE be´all´ıt´as mellett rajzoljunk;
• a sz´ınmaszkot ´all´ıtsuk 0-ra (vagy GL ZERO), hogy a sz´ınpufferben ne t¨ort´enjen
v´altoz´ as;
• a m´elys´egpuffert tegy¨ uk csak olvashat´ ov´a, ha nem akarjuk, hogy tartalma v´altozzon.
A stencilter¨ ulet megad´asa ut´an ´all´ıtsuk a referencia´ert´ekeket 1-re, ´es az ¨osszehasonl´ıt´ o
f¨ uggv´enyt olyanra, hogy a fragmentum akkor jusson t´ ul, ha a stencils´ık ´ert´eke megegyezik
a referencia´ert´ekkel. A rajzol´as sor´an ne v´altoztassuk a stencils´ıkok tartalm´at!
85
11.4. t´abl´azat. A stencil-vizsg´alatok be´all´ıt´ asainak lek´erdez´es´ehez haszn´alhat´ o pa-
ram´eterek
param´eter a visszaadott ´ert´ek
GL STENCIL FUNC stencil f¨ uggv´eny
GL STENCIL REF stencil referencia´ert´ek
GL STENCIL VALUE MASK stencil maszk
GL STENCIL FAIL fail f¨ uggv´eny
GL STENCIL PASS DEPTH FAIL zfail f¨ uggv´eny
GL STENCIL PASS DEPTH PASS zpass f¨ uggv´eny
Ha egy z´art objektumot valamely v´ag´ os´ık elmetsz, akkor belel´athatunk a testbe.
Amennyiben nem akarjuk a belsej´et l´atni ezt konvex objektum eset´en el´erhetj¨ uk ´ ugy,
hogy egy konstans sz´ın˝ u fel¨ ulettel befedj¨ uk. Ennek ´erdek´eben
• t¨or¨ olj¨ uk a stencilpuffert 0-val;
• enged´elyezz¨ uk a stencilvizsg´alatot, ´es ´all´ıtsuk az ¨osszehasonl´ıt´o f¨ uggv´enyt olyanra,
hogy minden fragmentum t´ uljusson;
• invert´ aljuk a stencils´ıkok megfelel˝o ´ert´ek´et minden ´atengedett fragmentumn´al;
• rajzoljuk meg a z´art konvex alakzatot.
A rajzol´as ut´an a k´epmez˝o azon pixeleinek stencil´ert´eke, melyeket nem kell lefedni
0 lesz, a lefedend˝oknek pedig 0-t´ol k¨ ul¨ onb¨oz˝ o.
´
All´ıtsuk be az ¨osszehasonl´ıt´ o f¨ uggv´enyt
´ ugy, hogy csak akkor engedje ´at a fragmentumot, ha a stencil´ert´ek nem 0, ´es rajzoljunk a
lefed´es sz´ın´evel egy akkora poligont, amely az eg´esz k´epmez˝ot lefedi.
Kit¨olt´es mint´ aval (stippling). Ha az alakzatok k´ep´et pontmint´ aval akarjuk megraj-
zolni, kit¨olteni, ´ırjuk be a mint´ at a stencilpufferbe (a mint´aval t¨or¨olj¨ uk), majd a megfelel˝o
felt´etelek mellett rajzoljuk meg az alakzatot.
11.4. M´elys´egvizsg´alat
Az OpenGL a m´elys´egpufferben minden pixelhez t´arolja a m´elys´eget, ami a pixelen
´abr´ azolt objektumoknak a n´ez˝opontt´ ol val´ o t´avols´ag´ at fejezi ki. Eg´esz pontosan: ez
a m´elys´eg a k´epmez˝ okoordin´ata-rendszerbeli z ´ert´ek. A m´elys´egpuffert leggyakrabban
a l´athat´os´ ag szerinti ´abr´azol´ ashoz haszn´aljuk. Ha az ´ uj fragmentum z ´ert´eke kisebb
mint a megfelel˝o pixel´e, akkor mind a sz´ınpuffert, mind a m´elys´egpuffert fel¨ ul´ırja a rend-
szer az ´ uj fragmentum megfelel˝o ´ert´ekeivel.
´
Igy v´eg¨ ul az alakzatok l´athat´os´ ag szerinti
k´ep´et kapjuk. A m´elys´egpuffer haszn´alat´ at a glEnable(GL DEPTH TEST) paranc-
csal lehet enged´elyezni, a glDisable(GL DEPTH TEST) paranccsal lehet letiltani, a
glIsEnabled(GL DEPTH TEST) paranccsal pedig lek´erdezhet˝ o, hogy a m´elys´egpuffer
haszn´alata enged´elyezett-e. Alap´ertelmez´es szerint a m´elys´egpuffer haszn´alata nem en-
ged´elyezett.
86
Ne feledj¨ uk, hogy a k´ep minden ´ ujrarajzol´asa el˝ott t¨or¨ olni kell a m´elys´egpuffert, vagyis
fel kell t¨olteni azzal a t´avols´ aggal, amelyn´el t´avolabbi fragmentumot nem vesz¨ unk figye-
lembe (l´asd a 10.5. szakaszt).
void glDepthFunc (GLenum func);
A m´elys´egek ¨osszehasonl´ıt´ as´ara haszn´alt f¨ uggv´enyt adhatjuk meg vele. Ezen a
vizsg´alaton akkor jut t´ ul egy fragmentum, ha a z koordin´at´aja ´es a megfelel˝o pixel
m´elys´ege a func f¨ uggv´ennyel el˝o´ırt kapcsolatban van. A func param´eter lehets´eges ´ert´ekeit
a 11.5. t´abl´ azat mutatja, fz a fragmentum m´elys´eg´et, bz a pufferben t´arolt m´elys´eget
jel¨oli. Alap´ertelmez´es: func = GL LESS.
11.5. t´abl´ azat. A m´elys´egek ¨osszehasonl´ıt´ as´ahoz haszn´alhat´ o f¨ uggv´enyek
func hat´asa
GL NEVER soha nem engedi tov´abb a fragmentumot
GL ALWAYS mindig tov´abbengedi 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 param´eterrel kiadva a kurrens
m´elys´eg¨osszehasonl´ıt´as f¨ uggv´eny´et kapjuk meg.
11.5. Sz´ınkombin´al´as, dithering, logikai m˝ uveletek
Ha egy ´ uj fragmentum az el˝oz˝o vizsg´alatokon – kiv´ag´as, alfa, stencil, m´elys´eg – t´ uljut,
akkor annak sz´ın´et a megfelel˝o pixel sz´ın´evel t¨obbf´elek´eppen kapcsolatba hozhatjuk. Leg-
egyszer˝ ubb esetben, ami egyben az alap´ertelmez´es is, fel¨ ul´ırjuk a fragmentum sz´ın´evel a pi-
xel sz´ın´et.
´
Atl´atsz´ o objektumok rajzol´asakor, vagy a k´ephat´ ar kisim´ıt´asakor vegy´ıthetj¨ uk
a k´et sz´ınt. Ha az ´abr´azolhat´ o sz´ınek sz´am´ at a felbont´as cs¨okkent´ese r´ev´en n¨ovelni akarjuk,
akkor a dithering hat´ast alkalmazhatjuk. V´eg¨ ul sz´ınindex m´odban tetsz˝oleges bitenk´enti
logikai m˝ uveletet hajthatunk v´egre a sz´ıneken.
11.5.1. Sz´ınkombin´al´as
A sz´ınkombin´ al´ as az ´ uj fragmentum ´es a neki megfelel˝o pixelhez t´arolt R, G, B ´es alfa
komponensek vegy´ıt´es´et jelenti. A vegy´ıt´es t¨obbf´elek´eppen v´egrehajthat´o, de minden
esetben a fragmentum ´es a pixelhez t´arolt (ha t´arolja a rendszer) alfa ´ert´ekek alapj´an
t¨ort´enik.
87
11.5.2. Dithering
A grafikus hardverek egy r´esze lehet˝os´eget biztos´ıt arra, hogy a megjelen´ıthet˝o sz´ınek
sz´am´ at a felbont´as rov´ as´ ara n¨ovelj¨ uk.
´
Uj sz´ın ´ ugy ´all´ıthat´ o el˝o, hogy az eredetileg
haszn´alhat´ o sz´ınekkel kisz´ınezett pixelmint´ akat jelen´ıt¨ unk meg, melyek ´ uj sz´ın hat´as´ at
eredm´enyezik. Vagyis a megjelen´ıt´es sor´an a rajzol´as pixele a k´eperny˝ o pixeleinek egy
n´egyzetes t¨ombje lesz, azaz cs¨okken a felbont´as, de ezek a pixelt¨omb¨ ok ´ uj, az eredeti pi-
xeleken el nem ´erhet˝o sz´ın˝ uek lesznek. Ilyen technik´ at haszn´alnak a fekete-feh´er ´ ujs´ agok
a f´enyk´epek megjelen´ıt´es´en´el, amikor a sz¨ urke k¨ ul¨ onb¨oz˝ o ´arnyalatait k¨ozel´ıtik az el˝obb
v´azolt technik´aval.
A dithering megval´os´ıt´ asa teljesen hardverf¨ ugg˝o, az OpenGL-b˝ol csak en-
ged´elyezhetj¨ uk, illetve letilthatjuk a glEnable(GL DITHER), illetve glDisa-
ble(GL DITHER) parancsokkal. Alap´ertelmez´es szerint a dithering nem enged´elyezett.
Ez a technika mind sz´ınindex, mind RGBA m´odban haszn´alhat´ o. RGBA m´odban
ez az utols´o m˝ uvelet a sz´ınpufferbe val´o be´ır´ as el˝ott, sz´ınindex m´odban m´eg bitenk´enti
logikai m˝ uveletek v´egrehajt´as´ara is lehet˝os´eg van.
11.5.3. Logikai m˝ uveletek
Sz´ınindex m´odban az indexek tekinthet˝ok eg´esz sz´amk´ent ´es bitsorozatk´ent is. Eg´esz
sz´amnak c´elszer˝ u tekinteni a sz´ınindexeket pl. ´arnyal´ asn´al ´es ditheringn´el. Ha azon-
ban k¨ ul¨onb¨ oz˝ o r´etegekre k´esz¨ ult rajzok kompoz´ıci´ojak´ent ´all´ıtunk el˝o egy k´epet, vagyis
k¨ ul¨ onb¨oz˝ o ´ır´asi maszkot haszn´alunk, hogy a rajzol´ast a k¨ ul¨ onb¨ oz˝o bits´ıkokra korl´atozzuk,
c´elszer˝ u a sz´ınindexeket bitsorozatnak tekinteni.
A logikai m˝ uveleteket az ´ uj fragmentum ´es a megfelel˝o pixel sz´ınindex´enek bitsorozat´an
hajthatjuk v´egre. Ezek a m˝ uveletek k¨ ul¨on¨ osen hasznosak ´es gyorsan v´egrehajthat´ok a
bitt¨omb¨ ok gyors mozgat´as´ara specializ´alt (bitBlt – bit block transfer) hardver˝ u grafikus
berendez´esek eset´en. Az OpenGL-ben a glLogicOp() parancs seg´ıts´eg´evel v´alaszthatjuk
ki a v´egrehajtand´o logikai m˝ uveletet.
void glLogicOp (GLenum opcode);
Sz´ınindex m´odban az ´ uj fragmentum fi sz´ınindex´en ´es a neki megfelel˝o pixel pi
sz´ınindex´en v´egrehajtand´o bitenk´enti logikai m˝ uvelet kiv´alaszt´ as´ ara szolg´al. Az opcode
param´eter lehets´eges ´ert´ekeit ´es azok jelent´es´et a 11.6. t´abl´azat mutatja. Alap´ertelmez´es
szerint opcode = GL COPY.
A logikai m˝ uveletek v´egrehajt´as´ at a glEnable(GL LOGIC OP) parancc-
sal enged´elyezhetj¨ uk, a glDisable(GL LOGIC OP) paranccsal letilthatjuk ´es a
glIsEnabled(GL LOGIC OP) paranccsal lek´erdezhetj¨ uk, hogy enged´elyezett-e.
Alap´ertelmez´es szerint nem enged´elyezett. A GL LOGIC OP MODE param´eterrel
kiadott glGetIntegerv() paranccsal a kurrens logikai m˝ uvelet k´erdezhet˝ o le.
88
11.6. t´abl´azat. A glLogicOp() f¨ uggv´ennyel el˝o´ırhat´ o bitenk´enti logikai m˝ uveletek
opcode hat´asa
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
Kiv´alaszt´as, visszacsatol´as
Interakt´ıv grafikus programok ´ır´asakor gyakran van sz¨ uks´eg arra, hogy a k´eperny˝on
l´athat´ o objektumok k¨oz¨ ul v´alasszunk a grafikus kurzor seg´ıts´eg´evel. Ezt a grafikus in-
putot angolul pick inputnak, magyarul r´amutat´o azonos´ıt´asnak nevezz¨ uk. Ezt a funkci´ot
t´amogatja az OpenGL kiv´alaszt´ asi mechanizmusa.
Ugyancsak fontos, hogy az OpenGL felhaszn´al´as´ aval meg´ırt alkalmaz´ asaink fut´asi
eredm´eny´et m´as rendszer vagy eszk¨oz bemen˝o adatk´ent haszn´alhassa (pl. CAD rend-
szer, vagy plotter). Erre szolg´al a visszacsatol´asi mechanizmus.
Mindk´et funkci´ohoz sz¨ uks´eg¨ unk van az OpenGL m˝ uk¨od´esi m´odj´ anak be´all´ıt´ as´ara.
GLint glRenderMode (GLenum mode);
A megjelen´ıt´es, kiv´alaszt´ as ´es visszacsatol´asi ¨ uzemm´ odok k¨oz¨ otti v´alaszt´ ast teszi le-
het˝ov´e a mode param´eternek adott GL RENDER, GL SELECT ´es GL FEEDBACK
´ert´eknek megfelel˝oen. A rendszer a megadott ¨ uzemm´odban marad a k¨ovetkez˝ o, m´as
param´eterrel kiadott glRenderMode() parancs kiad´as´aig. A kiv´alaszt´asi ¨ uzemm´ od
be´all´ıt´ asa el˝ott a glSelectBuffer(), a visszacsatol´asi ¨ uzemm´ od el˝ott a glFeedbackBuf-
fer() parancsot kell kiadni. A glRenderMode() parancs ´altal visszaadott ´ert´eknek ak-
kor van jelent´ese, ha a kurrens m˝ uk¨ od´esi m´od (amir˝ol ´atv´ altunk) vagy GL SELECT,
vagy GL FEEDBACK. Kiv´alaszt´ asi ¨ uzemm´ odb´ol val´o kil´ep´es eset´en a visszaadott ´ert´ek a
tal´alatok sz´ama, visszacsatol´asi ¨ uzemm´odn´ al pedig a visszacsatol´asi pufferbe tett adatok
sz´ama. A negat´ıv visszaadott ´ert´ek azt jelzi, hogy a megfelel˝o puffer (kiv´alaszt´ asi, vagy
visszacsatol´asi) t´ ulcsordult.
A GL RENDER MODE param´eterrel kiadott glGetIntegerv() paranccsal
lek´erdezhetj¨ uk a kurrens ¨ uzemm´ odot.
Kiv´alaszt´asi ´es visszacsatol´asi ¨ uzemm´odban a rajzol´asi utas´ıt´ asoknak nincs l´athat´o
eredm´enye, ilyenkor csak a megfelel˝o adatokat t´arolja a rendszer a kor´ abban l´etrehozott
pufferbe.
12.1. Kiv´alaszt´as
A r´amutat´o azonos´ıt´as megval´ os´ıt´ asa ´erdek´eben:
• l´etre kell hozni az un. kiv´alaszt´ asi puffert, amiben a v´alaszt´as eredm´eny´et kapjuk
vissza;
90
• ´at kell t´erni kiv´alaszt´asi ¨ uzemm´ odra;
• olyan speci´alis vet´ıt´esi m´atrixot kell megadni, amelyik csak az adott poz´ıci´ o (prak-
tikusan a grafikus kurzor poz´ıci´oja) kis k¨ornyezet´et k´epezi le;
• a k´epet ´ ujra kell rajzolni ´ ugy, hogy a v´alaszthat´ o k´epelemeket azonos´ıt´ oval kell
ell´atni;
• vissza kell t´erni rajzol´asi ¨ uzemm´ odra, amivel a kiv´alaszt´ asi pufferben megkapjuk
azon k´epelemek azonos´ıt´oj´ at, melyeket legal´abb r´eszben tartalmazott a speci´alis
vet´ıt´esi m´atrixszal megadott t´err´esz.
void glSelectBuffer (GLsizei size, GLuint *buffer);
A kiv´alasztott k´epelemek adatainak visszaad´as´ ara szolg´al´ o puffer megad´asa. A buffer
param´eter a size m´eret˝ u el˝ojel n´elk¨ uli eg´eszekb˝ ol ´all´o puffer c´ıme. Ezt a parancsot mindig
ki kell adnunk, miel˝ott kiv´alaszt´asi m´odra ´att´ern´enk.
A v´alaszthat´os´ ag ´erdek´eben a k´epelemeket azonos´ıt´ oval kell ell´atni. A rendszer egy
veremszerkezetet tart karban ezen azonos´ıt´ok sz´am´ara. Ezt n´evveremnek nevezz¨ uk. Az
´ ujonnan l´etrehozott k´epelem azonos´ıt´oja a n´evverem legfels˝o szintj´en t´arolt azonos´ıt´o lesz.
void glInitNames (void);
A n´evvermet t¨orli.
void glPushName (GLuint name);
A name azonos´ıt´ ot a n´evverem legfels˝o szintj´ere teszi. A n´evverem m´elys´ege imple-
ment´aci´ of¨ ugg˝ o, de legal´abb 64. A GL MAX NAME STACK DEPTH param´eterrel kia-
dott glGetIntegerv() paranccsal kaphatjuk meg a pontos ´ert´eket. A megengedettn´el
t¨obb szint haszn´alat´ ara tett k´ıs´erlet a GL STACK OVERFLOW hib´at eredm´enyezi.
void glPopName (void);
A n´evverem legfels˝o szintj´en l´ev˝ o azonos´ıt´ ot eldobja.
¨
Ures veremre kiadott glPo-
pName() parancs a GL STACK UNDERFLOW hib´at eredm´enyezi.
void glLoadName (GLuint name);
A n´evverem legfels˝o szintj´en l´ev˝ o ´ert´eket a name ´ert´ekkel fel¨ ul´ırja. Ha a n´evverem ¨ ures,
mint pl. a glInitNames() parancs kiad´asa ut´an, akkor a GL INVALID OPERATION
hiba keletkezik. Ennek elker¨ ul´ese ´erdek´eben, ¨ ures verem eset´en egy tetsz˝oleges ´ert´eket
tegy¨ unk a verembe a glPushName() paranccsal, miel˝ott a glLoadName() parancsot
kiadn´ank.
91
void gluPickMatrix (GLdouble x, GLdouble y, GLdouble width, GLdouble height,
GLint viewport[4] );
Azt a vet´ıt´esi m´atrixot hozza l´etre, amely a k´epmez˝o (x, y) k¨oz´eppont´ u, width
sz´eless´eg˝ u ´es height magass´ag´ u ter¨ ulet´ere korl´atozza a rajzol´ast, ´es ezzel a m´atrixszal
megszorozza a kurrens m´atrixverem legfels˝o elem´et. A k´epmez˝ o-koordin´at´ akban mega-
dott (x, y) ´altal´ aban a kurzor poz´ıci´ oja, a sz´eless´eg ´es magass´ag ´altal kijel¨olt tartom´any
pedig a r´amutat´ o azonos´ıt´ o eszk¨oz ´erz´ekenys´egek´ent foghat´o fel. A viewport[] param´eter
a kurrens k´epmez˝ o hat´arait tartalmazza, amit a
glGetIntegerv(GL VIEWPORT,viewport);
paranccsal kaphatunk meg.
12.2. Visszacsatol´as
A visszacsatol´as megval´os´ıt´ asa nagyon hasonl´o a kiv´alaszt´as´ehoz. A folyamat az al´abbi
l´ep´esekb˝ol ´all:
• l´etre kell hozni az un. visszacsatol´asi puffert, amiben a k´epelemek adatait majd
megkapjuk;
• ´at kell t´erni visszacsatol´asi ¨ uzemm´odra;
• ´ ujra kell rajzolni a k´epet;
• vissza kell t´erni rajzol´asi ¨ uzemm´odra, amivel megkapjuk a pufferbe ´ırt adatok
sz´am´ at;
• a pufferben visszakapott adatokat kiolvashatjuk, feldolgozhatjuk.
void glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer);
A visszacsatol´asi ¨ uzemm´od adatainak t´arol´ as´ara hoz l´etre egy puffert. size a pufferben
t´arolhat´ o adatok sz´ama, buffer a t´arter¨ ulet c´ıme. A type param´eter azt specifik´alja, hogy
a rendszer milyen adatokat adjon vissza a cs´ ucspontokr´ol. A lehets´eges ´ert´ekeket a 12.1.
t´abl´ azat tartalmazza. A t´abl´ azatban k ´ert´eke 1 sz´ınindexm´od eset´en, 4 RGBA m´odn´al. A
glFeedbackBuffer() parancsot ki kell adni miel˝ott visszacsatol´asi ¨ uzemm´ odba l´epn´enk.
void glPassThrough (GLfloat token);
Ha visszacsatol´asi m´odban h´ıvjuk meg, akkor egy markert tesz a visszaa-
dott adatok k¨oz´e, m´as m˝ uk¨od´esi m´odban megh´ıv´asa hat´astalan. A marker a
GL PASS THROUGH TOKEN konstansb´ol ´es a token lebeg˝opontos ´ert´ekb˝ ol ´all. A gl-
Begin() ´es glEnd() k¨oz¨ otti kiad´asa a GL INVALID OPERATION hib´at eredm´enyezi.
92
12.1. t´abl´azat. A visszaadand´o adatok t´ıpusa
type koordin´at´ ak sz´ın 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. t´abl´ azat. A visszaadott k´odok
alapelem t´ıpusa k´od adat
pont GL POINT TOKEN cs´ ucspont
szakasz
GL LINE TOKEN
GL LINE RESET TOKEN
k´et cs´ ucspont
poligon GL POLYGON TOKEN cs´ ucspontok
bitt´erk´ep GL BITMAP TOKEN cs´ ucspont
pixelt¨omb
GL DRAW PIXEL TOKEN
GL COPY PIXEL TOKEN
cs´ ucspont
megjegyz´es GL PASS THROUGH TOKEN lebeg˝opontos sz´am
93
13. fejezet
Text´ ur´ak
A val´ oszer˝ u k´epek l´etrehoz´as´ anak egy fontos eszk¨oze a text´ uralek´epez´es. A val´ os´agban
a t´argyak nem egysz´ın˝ uek, hanem a fel¨ ulet¨ uk¨on mint´ ak vannak. Ezen mint´ ak geome-
triai le´ır´ asa ´es geometriai objektumk´ent val´ o kezel´ese (amit az eddig t´argyalt eszk¨oz¨ ok
lehet˝ov´e tenn´enek) azonban rendk´ıv¨ ul id˝oig´enyes ´es nagy t´arol´okapacit´ast lek¨ot˝o fela-
dat lenne. Mindamellett nem is lenne el´eg val´ oszer˝ u, hiszen a mint´ ak ´altal´ aban ´eles
kont´ ur´ uak, t´ ul szab´alyosak lenn´enek. Ezzel szemben, ha egy val´odi objektum fel¨ ulet´enek
k´ep´et (mint´ azat´at) vissz¨ uk fel a sz´am´ıt´og´eppel el˝o´all´ıtott objektumra, sokkal ´eletszer˝ ubb
lesz a k´ep. A t´erbelis´eg ´erz´ekeltet´es´enek fokoz´ as´ara is alkalmas a text´ ura, ugyanis a
text´ ur´ at a modellt´erben rendelj¨ uk hozz´a a geometriai alakzathoz, ´ıgy a fel¨ uleti mint´an is
´erv´enyes¨ ul a centr´alis vet´ıt´esb˝ol ered˝o, un. perspekt´ıv torz´ıt´as, pl. egy t´eglafal t´avolabb
l´ev˝ o t´egl´ ai kisebbek lesznek a k´epen, ´es a t´egl´ ak szemk¨ozti ´elei nem lesznek p´arhuzamosak.
A text´ ur´akat t¨obbnyire k´etdimenzi´ osnak (s´ıkbelinek) gondoljuk, azonban a text´ ur´ ak
lehetnek egy- vagy h´aromdimenzi´osak is. A text´ ur´akat lek´epezhetj¨ uk ´ ugy, hogy azok
lefedj´ek a poligonokat (poligonh´al´okat), de ´ ugy is, hogy a text´ ura az objektum szintvo-
nalait, vagy m´as jellemz˝oit szeml´eltesse. Az er˝osen ragyog´o fel¨ ulet˝ u objektumok ´ ugy is
text´ ur´ azhat´ok, hogy azt a hat´ast kelts´ek, mintha a k¨ornyezet t¨ ukr¨oz˝ odne az objektumon.
A text´ ura geometriailag egy t´eglalap alak´ u ter¨ ulet, mely sorokba ´es oszlopokba rendezett
text´ uraelemekb˝ ol, r¨oviden texelekb˝ol (texture element) ´ep¨ ul fel. A text´ ura teh´at adatok
1, 2, vagy 3 dimenzi´os t¨ombj´enek tekinthet˝ o. Az egyes texelekhez t´arolt adat k´epviselhet
sz´ınt, f´enyer˝ oss´eget vagy sz´ın ´es alfa ´ert´eket, azaz 1, 2, 3 vagy 4 adat tartozhat minden
egyes texelhez.
A t´eglalap alak´ u text´ ur´akat azonban tetsz˝oleges alak´ u poligonokra, poligonh´al´ okra kell
r´ahelyezni. A r´ahelyez´es mik´entj´et a modellt´erben kell megadni, ´ıgy a text´ ur´ akra is hat-
nak a modell- ´es vet´ıt´esi transzform´aci´ok. Ennek ´erdek´eben az objektumok l´etrehoz´ asakor
a cs´ ucspontok geometriai koordin´at´ ai mellett a text´ urakoordin´at´ akat is meg kell adni.
Egy k´etdimenzi´os text´ ura koordin´at´ ai a [0., 1.] [0., 1.] egys´egn´egyzeten bel¨ ul v´altoznak.
Amikor a cs´ ucspontokhoz hozz´arendelj¨ uk a text´ ura pontjait ezen a ter¨ uleten k´ıv¨ ul es˝o
koordin´atap´ art is megadhatunk, de el˝o kell ´ırnunk, hogy az egys´egn´egyzeten k´ıv¨ uli koor-
din´at´ akat hogy ´ertelmezze a rendszer, pl. ism´etelje a text´ ur´at (tegye egym´as mell´e).
A text´ ura hat´as´anak ´erv´enyes´ıt´ese a k´epmez˝ okoordin´ata-rendszer´eben az ´abr´azoland´ o
objektum fragment´ al´asa ut´an t¨ort´enik.
´
Igy el˝ofordulhat, hogy a transzform´aci´ okon
´atesett text´ ura t¨obb eleme l´atszik egy fragmentumon, vagy ellenkez˝ oleg, t¨obb fragmen-
tumon l´atszik egyetlen texel. Ennek a probl´em´ aknak t¨obbf´ele megold´as´ at k´ın´ alja a
94
rendszer, a felhaszn´al´ ok ´altal kiv´alaszthat´o un. sz˝ ur´esi m˝ uveleteken kereszt¨ ul. Ezek a
m˝ uveletek rendk´ıv¨ ul sz´am´ıt´asig´enyesek, ez´ert a fejlettebb grafikus munkahelyek hard-
verb˝ol t´amogatj´ ak a text´ uralek´epez´est. Ha t¨obb text´ ur´at felv´altva haszn´alunk, ak-
kor c´elszer˝ u text´ uraobjektumokat l´etrehozni, melyek egy-egy text´ ur´ at (esetleg t¨obb fel-
bont´ asban) tartalmaznak. N´eh´ any OpenGL implement´ aci´oban text´ uraobjektumok mun-
kacsoportj´at lehet l´etrehozni. A csoporthoz tartoz´o text´ ur´ak haszn´alata hat´ekonyabb,
mint a csoporton k´ıv¨ uliek´e. Ezeket a nagy hat´ekonys´ag´ u text´ uraobjektumokat rezidens-
nek nevezik, ´es ezek haszn´alat´ at ´altal´ aban hardveres vagy szoftveres gyors´ıt´ok seg´ıtik.
A felhaszn´al´o ´altal el˝o´ırhat´ o, hogy a text´ ura hogyan hasson a megjelen´ıtend˝ o objektum
sz´ın´ere. Megadhatjuk, hogy a megfelel˝o texel(ek) sz´ıne legyen a fragmentum sz´ıne (egys-
zer˝ uen fel¨ ul´ırja a fragmentum sz´ın´et, mintha egy matric´at ragasztan´ank r´a), el˝o´ırhatjuk,
hogy a text´ ur´ aval m´odos´ıtsa (pontosabban sk´al´ azza) a fragmentum sz´ın´et, ami a meg-
vil´ag´ıt´as ´es text´ ur´az´ as hat´as´at kombin´alja, v´eg¨ ul a fragmentum sz´ın´enek ´es egy konstans
sz´ınnek a text´ uraelemen alapul´o kever´es´et is el˝o´ırhatjuk.
Text´ ur´azott poligonh´al´ o megjelen´ıt´es´ehez m´eg a legegyszer˝ ubb esetben is az al´abbi
l´ep´eseket kell megtenni:
• enged´elyezni kell a text´ uralek´epez´est;
• l´etre kell hozni egy text´ uraobjektumot ´es hozz´a kell rendelni egy text´ ur´at;
• meg kell adni, hogy a text´ ur´ at hogyan alkalmazza a rendszer a fragmentumokra
(sz˝ ur˝ o megad´asa);
• enged´elyezni kell a text´ uralek´epez´est;
• meg kell rajzolni a text´ ur´azand´ o objektumokat ´ ugy, hogy a cs´ ucspontok geometriai
koordin´at´ ai mellett megadjuk a text´ urakoordin´at´ait is.
13.1. A text´ uralek´epez´es enged´elyez´ese
Az objektumok text´ ur´azott megjelen´ıt´es´ehez a megrajzol´asuk el˝ott enged´elyezni kell a
text´ uralek´epez´est. Az enged´elyez´es, illetve letilt´as a szok´asos glEnable(), illetve glDisa-
ble() parancsoknak a GL TEXTURE 1D, GL TEXTURE 2D vagy GL TEXTURE 3D
szimbolikus konstansokkal val´o kiad´as´aval lehets´eges. Ezekkel rendre az 1, 2, illetve
3 dimenzi´os text´ uralek´epez´est enged´elyezhetj¨ uk vagy tilthatjuk le. Ha egyszerre t¨obb
text´ uralek´epez´es is enged´elyezett, a rendszer mindig a legnagyobb dimenzi´oj´ ut veszi figye-
lembe. Az ilyen helyzeteket azonban lehet˝os´eg szerint ker¨ ulj¨ uk el!
13.2. Text´ ura megad´asa
El˝obb a term´eszetesnek t˝ un˝o k´etdimenzi´os text´ ura megad´as´aval, majd az els˝o hall´asra
kev´esb´e k´ezenfekv˝ o egy- ´es h´aromdimenzi´os text´ ur´ ak´eval foglalkozunk.
95
void glTexImage2D (GLenum target, GLint level, GLint internalFormat, GLsizei
width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid
*texels);
K´etdimenzi´os text´ ur´at hoz l´etre. A target param´eter ´ert´eke GL TEXTURE 2D vagy
GL PROXY TEXTURE 2D lehet. A level param´etert akkor haszn´aljuk, ha a text´ ur´ at
t¨obb felbont´ asban is t´arolni akarjuk, egy´ebk´ent a level param´eternek adjuk a 0 ´ert´eket.
(A t¨obb felbont´ asban t´arolt text´ ur´ ak haszn´alat´ at a 13.7. szakaszban t´argyaljuk.)
Az internalFormat (bels˝o form´atum) param´eterrel azt ´ırjuk el˝o, hogy egy k´ep texe-
leinek a le´ır´ as´ahoz az R, G, B, A sz´ınkomponensek melyik´et, esetleg f´enyer˝ oss´eget vagy
sz´ıner˝ oss´eget haszn´alja a rendszer.
´
Ert´eke 1, 2, 3, 4 vagy az al´abbi el˝ore defini´alt 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 jelent´es´et a text´ uraf¨ uggv´enyek le´ır´ as´ an´al ismertetj¨ uk.
Az OpenGL 1.0 verzi´ oval val´ o kompatibilit´ as ´erdek´eben az 1, 2, 3, illetve 4 ´ert´ekek
rendre a GL LUMINANCE, GL LUMINANCE ALPHA, GL RGB, illetve GL RGBA
szimbolikus konstansoknak felelnek meg. A szimbolikus konstansokkal a texelekhez t´arolt
komponenseket ´es azok pontoss´ag´ ara vonatkoz´o k´ıv´ ans´agunkat adhatjuk meg, pl. a
GL R3 G3 B2 konstanssal azt, hogy a piros ´es z¨old sz´ınt 3-3 biten, a k´eket pedig 2 biten
t´arolja a rendszer. Ez nem jelenti azt, hogy a rendszer biztosan´ıgy is hajtja v´egre a paran-
csot. Csak az garant´ alt, hogy az OpenGL az implement´aci´ o ´altal t´amogatott form´atumok
k¨oz¨ ul az ehhez legk¨ozelebb ´all´ o szerint t´arolja a texelekhez kapcsolt adatokat.
A width ´es height param´eterek a text´ ura sz´eless´eg´et, illetve magass´ag´ at adj´ak meg. A
border a text´ ura hat´ar´ anak sz´eless´eg´et adja meg, ´ert´eke vagy 0, vagy 1 lehet. A width, il-
letve height param´eterek ´ert´ek´enek 2
w
+2b, illetve 2
h
+2b alak´ unak kell lenni, ahol 0 ≤ h, w
eg´esz sz´amok ´es b a border ´ert´eke. A text´ ur´ ak m´eret´enek maximuma implement´ aci´of¨ ugg˝o,
de legal´abb 64 64, illetve hat´arral 66 66 -nak kell lennie.
A format ´es type param´eterek a text´ uraadatok form´atum´at ´es t´ıpus´at ´ırj´ ak le.
Jelent´es¨ uk megegyezik a glDrawPixels() parancs megfelel˝o param´etereinek jelent´es´evel.
Val´ oj´aban a text´ uraadatok ugyanolyan form´atum´ uak, mint a glDrawPixels() pa-
rancs ´altal haszn´alt adatok´e, ez´ert a glPixelStorage*() ´es glPixelTransfer*()
parancsok ´altal be´all´ıtott form´atumokat haszn´alja mindkett˝o. A format param´eter
´ert´eke 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 kiv´etel´evel azokat, amelyeket a
glDrawPixels() is haszn´al.
96
A type param´eter pedig a GL BYTE, GL UNSIGNED BYTE, GL SHORT,
GL UNSIGNED SHORT, GL INT, GL UNSIGNED INT, GL FLOAT, GL BITMAP
vagy a t¨om¨or´ıtett pixeladatok valamelyik´et.
A texels a l´etrehozand´ o text´ ura adatainak t´arol´as´ ara szolg´al´o t¨omb c´ıme. A bels˝o
t´arol´ asi form´atumnak (internalFormat) hat´asa van a text´ uram˝ uveletek v´egrehajt´asi
sebess´eg´ere is. Az azonban, hogy melyik hat´ekonyabb, teljes m´ert´ekben imple-
ment´aci´ of¨ ugg˝ o.
A text´ ur´ ak sorai ´es oszlopai sz´am´ anak (a hat´art levonva) 2 hatv´any´ anak kell lenni.
Ha egy olyan k´epb˝ ol szeretn´enk text´ ur´ at l´etrehozni, amely m´erete ennek nem tesz eleget,
a GLU f¨ uggv´enyk¨ onyvt´ar gluScaleImage() f¨ uggv´eny´et c´elszer˝ u haszn´alni.
int gluScaleImage (GLenum format, GLint widthin, GLint heightin, GLenum typein,
const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *da-
taout);
A datain c´ımen t´arolt k´epadatokat a megfelel˝o pixelt´arol´asi m´odot haszn´alva kicso-
magolja, a k´ıv´ant m´eret˝ uv´e sk´al´ azza, majd a dataout c´ımen kezd˝ od˝o mem´oriater¨ uletre
let´arolja. A format, typein (a bej¨ov˝ o adatok t´ıpusa) ´es a typeout (a kimen˝o adatok
t´ıpusa) a glDrawPixels() ´altal t´amogatott b´armely form´atum, illetve t´ıpus lehet. A
bej¨ov˝o widthin heightin m´eret˝ u k´epet line´aris transzform´aci´ oval ´es box sz˝ ur´essel tran-
szform´alja widthout heightout m´eret˝ uv´e, majd ezt a dataout c´ımen kezd˝od˝ o ter¨ uletre
ki´ırja a kurrens GL PACK* pixelt´arol´ asi m´odnak megfelel˝oen. Az eredm´eny t´arol´as´ ara
alkalmas mem´oria lefoglal´as´ at a f¨ uggv´eny megh´ıv´asa el˝ott el kell v´egezni.
A visszaadott ´ert´ek 0, ha a f¨ uggv´eny sikeresen v´egrehajt´odott, egy´ebk´ent egy GLU
hiba¨ uzenet.
(Az OpenGL 1.2-ben bevezetett t¨om¨or´ıtett pixelt´arol´asi form´atumokat a GLU 1.3
t´amogatja.)
A k´eppuffer tartalm´ab´ol is l´etrehozhat´o text´ ura. Erre szolg´al a glCopyTexI-
mage2D(), mely a k´eppufferb˝ ol kiolvas egy t´eglalap alak´ u ter¨ uletet, majd ennek pixeleib˝ol
l´etrehozza a text´ ura texeleit.
void glCopyTexImage2D (GLenum target, GLint level, GLint internalFormat, GLint
x, GLint y, GLsizei width, GLsizei height, GLint border)
A k´eppuffer adataib´ol egy k´etdimenzi´os text´ ur´at hoz l´etre. A pixeleket a kurrens
(GL READ BUFFER) pufferb˝ol kiolvassa ´es ´ ugy dolgozza fel ˝oket, mint a glCopyPi-
xels() parancs eset´en azzal a k¨ ul¨onbs´eggel, hogy a pixeleket nem a k´eppufferbe, hanem
a text´ ura sz´am´ara lefoglalt mem´ori´aba m´asolja. A glPixelTransfer*() be´all´ıt´asait ´es a
t¨obbi pixel´atviteli m˝ uveletet haszn´alja.
A target param´eternek a GL TEXTURE 2D ´ert´eket kell adni. A level, internalFormat,
border, width ´es height param´eterek jelent´ese ugyanaz, mint a glTexImage2D() eset´en.
x, y a kim´asoland´ o pixelt¨omb bal als´o sark´anak a k´eppufferbeli koordin´at´ ai.
97
13.3. Text´ urahelyettes´ıt˝o
A text´ ur´ at haszn´al´ o OpenGL programok mem´oriaig´enye tekint´elyes, ´es implement´aci´ ot´ ol
f¨ ugg˝ oen k¨ ul¨ onb¨ oz˝o megszor´ıt´ asok vannak a text´ uraform´ atumokra. Ez´ert egy speci´alis
text´ urahelyettes´ıt˝o (proxy) haszn´alhat´ o annak eld¨ont´es´ere, hogy vajon az adott OpenGL
implement´aci´ o tudna-e kezelni egy adott text´ ur´at a k´ıv´ ant felbont´ as(ok)ban.
Ha a glGetIntegerv() f¨ uggv´enyt megh´ıvjuk a GL MAX TEXTURE SIZE param´eterrel,
akkor megkapjuk, hogy az adott implement´ aci´ oban legfeljebb mekkora m´eret˝ u (sz´eless´eg,
magass´ag a hat´arok n´elk¨ ul) 2D-s text´ ur´ak haszn´alhat´ok. A 3D-s text´ ur´ak eset´en ugya-
nezt a GL MAX 3D TEXTURE SIZE param´eter haszn´alat´aval ´erj¨ uk el. A fenti ´ert´ek
meghat´aroz´ asakor azonban a rendszer nem veszi (nem veheti) figyelembe a text´ ur´ak
t´arol´ as´anak form´atum´at ´es azt, hogy a text´ ur´at esetleg t¨obb felbont´ asban is t´arolni kell
(mipmapping).
Egy speci´alis text´ urahelyettes´ıt˝o funkci´ o seg´ıt abban, hogy pontosan lek´erdezhet˝ o legyen
az OpenGL-t˝ol, hogy egy text´ ura adott form´atum szerint t´arolhat´o-e a haszn´alt imple-
ment´aci´ oban. Ehhez a text´ ur´ ak l´etrehoz´ as´ at seg´ıt˝o glTexImage2D() f¨ uggv´enyt kell
megh´ıvni ´ ugy, hogy a target param´eternek GL PROXY TEXTURE 2D ´ert´eket adjuk,
a level, internalFormat, width, height, border, format ´es type param´etereknek ugyanazt
az ´ert´eket adjuk, mintha t´enylegesen l´etre akarn´ ank hozni az adott text´ ur´at, a texels pa-
ram´eterben pedig a NULL c´ımet adjuk. Ezut´an a glGetTexLevelParameter() paran-
ccsal lek´erdezhetj¨ uk, hogy rendelkez´esre ´all-e elegend˝o er˝oforr´as a text´ ura l´etrehoz´as´ ara.
Ha nem ´all rendelkez´esre, akkor a lek´erdezett text´ ura jellemz˝o ´ert´ekek´ent 0-´at ad
vissza a f¨ uggv´eny. Ezzel a f¨ uggv´ennyel t´enylegesen l´etrehozott text´ ur´ ak param´eterei is
lek´erdezhet˝ ok, nemcsak az inform´aci´ oszerz´es ´erdek´eben l´etrehozott text´ urahelyettes´ıt˝ ok´e.
void glGetTexLevelParameter¦if¦v (GLenum target, GLint level, GLenum pname,
TYPE *params);
A level param´eterrel megadott r´eszletez´esi szintnek megfelel˝o text´ uraparam´etereket
adja vissza a params v´altoz´ oban.
A target param´eter lehets´eges ´ert´ekei: GL TEXTURE 1D, GL TEXTURE 2D,
GL TEXTURE 3D, GL PROXY TEXTURE 1D, GL PROXY TEXTURE 2D,
GL PROXY TEXTURE 3D.
A pname param´eter lehets´eges ´ert´ekei:
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 verzi´oval val´ o kompatibilit´as ´erdek´eben a pname param´eternek a
GL TEXTURE COMPONENTS ´ert´ek is adhat´o, a magasabb verzi´ oj´ u OpenGL imple-
ment´aci´ okn´al azonban a GL TEXTURE INTERNAL FORMAT a javasolt szimbolikus
konstans.
P´elda a text´ urahelyettes´ıt˝o haszn´alat´ 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´ urahelyettes´ıt˝o mechanizmusnak jelent˝os hi´anyoss´ aga, hogy seg´ıts´eg´evel csak
azt tudjuk meg, hogy a rendszer k´epes lenne-e bet¨olteni az adott text´ ur´ at. Nem veszi
figyelembe, hogy pillanatnyilag a text´ ura er˝oforr´asok milyen m´ert´ekben foglaltak, vagyis
azt nem tudjuk meg, hogy pillanatnyilag van-e elegend˝o kapacit´as az adott text´ ura
haszn´alat´ ara.
13.4. Text´ ur´ak m´odos´ıt´asa
Egy ´ uj text´ ura l´etrehoz´asa t¨obb sz´am´ıt´asi kapacit´ ast k¨ot le, mint egy megl´ev˝ o m´odos´ıt´asa.
Ez´ert az OpenGL-ben lehet˝os´eg van a text´ ur´ak tartalm´anak r´eszbeni vagy teljes ´at´ır´ as´ara.
Ez k¨ ul¨ on¨osen hasznos lehet olyan esetekben, amikor a text´ ur´ak alapj´at val´ os id˝oben
l´etrehozott videok´epek alkotj´ ak. A text´ ura m´odos´ıt´asa mellet sz´ol az is, hogy m´ıg
a text´ ura sz´eless´eg´enek ´es magass´ag´ anak 2 hatv´any´anak kell lenni, addig egy text´ ura
tetsz˝oleges m´eret˝ u t´eglalap alak´ u ter¨ ulete ´at´ırhat´ o, ´es a videok´epek m´eretei ´altal´aban
nem 2 hatv´anyai.
void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *tex-
els);
A kurrens k´etdimenzi´ os text´ ura egy t´eglalap alak´ u ter¨ ulet´et ´at´ırja a texels c´ımen
kezd˝od˝ o text´ uraadatokkal. A target param´eternek a GL TEXTURE 2D ´ert´eket kell
adni. A level, format ´es type param´eterek ´ertelmez´ese a glTexImage2D() parancsn´al
haszn´altakkal megegyezik. xoffset, yoffset az ´at´ırand´ o t´eglalap alak´ u ter¨ ulet bal als´o
sark´anak koordin´at´ ai a text´ ura bal als´o sark´ahoz k´epest, width a t´eglalap sz´eless´ege, height
a magass´aga. Az ´ıgy elhelyezett t´eglalap nem l´oghat ki a text´ ur´at le´ır´o t´eglalapb´ ol. Ha a
sz´eless´eg vagy magass´ag ´ert´eke 0, akkor a parancsnak nem lesz hat´asa a kurrens text´ ur´ara,
de nem kapunk hiba¨ uzenetet.
A k´epr´eszre a glPixelStore*(), glPixelTransfer*() ´altal be´all´ıtott m´odok, tov´ abb´a
az egy´eb pixel´atviteli m˝ uveletek is hat´assal vannak.
A text´ ur´ak l´etrehoz´ as´ ahoz hasonl´oan a text´ ur´ak m´odos´ıt´ as´ ahoz is haszn´alhatjuk a
k´eppuffert.
void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoff-
set, GLint x, GLint y, GLsizei width, GLsizei height);
A k´eppufferb˝ ol kim´asolt k´eppel helyettes´ıti a kurrens k´etdimenzi´ os text´ ura megadott
t´eglalap alak´ u ter¨ ulet´et. A kurrens GL READ BUFFER pufferb˝ol kiolvassa a megadott
pixeleket, ´es pontosan ´ ugy dolgozza fel, mint a glCopyPixels() parancs eset´en azzal a
k¨ ul¨ onbs´eggel, hogy nem a k´eppufferbe m´asolja hanem a text´ uramem´ori´ aba. A glPixel-
Transfer*() ´es a t¨obbi pixel´atviteli m˝ uvelet be´all´ıt´asait haszn´alja.
99
A target ´es level param´eterek ´ertelmez´ese megegyezik a glTexSubImage2D() parancs
megfelel˝o param´etereinek ´ertelmez´es´evel. A text´ ura ´at´ırand´ o ter¨ ulet´et az xoffset, yoffset,
width, height param´eterek hat´arozz´ ak meg ugyan´ ugy, mint glTexSubImage2D() parancs
eset´en. Erre a ter¨ uletre a k´eppuffernek az a t´eglalapja ker¨ ul, mely bal als´o sark´anak
koordin´at´ ai x, y sz´eless´ege width, magass´aga height.
13.5. Egydimenzi´os text´ ur´ak
El˝ofordulhat, hogy a mint´azat csak egy dimenzi´oban v´altozik. Ilyen esetben elegend˝o
(takar´ekosabb) egydimenzi´os text´ ur´at haszn´alni. Az egydimenzi´os text´ ura olyan speci´alis
k´etdimenzi´ os text´ ur´ anak tekinthet˝ o, melynek alul ´es fel¨ ul nincs hat´ara ´es a magass´aga 1
(height = 1). Az eddig megismert, k´etdimenzi´os text´ ur´akat l´etrehoz´ o, m´odos´ıt´ o parancsok
mindegyik´enek van egydimenzi´os megfelel˝oje.
void glTexImage1D (GLenum target, GLint level, GLint internalFormat, GLsizei
width, GLint border, GLenum format, GLenum type, const GLvoid *texels);
Egydimenzi´os text´ ur´at hoz l´etre. A target param´eternek a GL TEXTURE 1D vagy
GL TEXTURE PROXY 1D ´ert´eket kell adni. A t¨obbi param´eter jelent´ese megegyezik a
glTexImage2D() parancs megfelel˝o param´eter´enek jelent´es´evel.
void glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width,
GLenum format, GLenum type, const GLvoid *texels);
Egydimenzi´os text´ urat¨omb¨ ot hoz l´etre, mellyel fel¨ ul´ırja a kurrens egydimenzi´os text´ ura
megadott szakasz´at. A target param´eternek a GL TEXTURE 1D ´ert´eket kell adni. A
t¨obbi param´eter jelent´ese megegyezik a glTexSubImage2D() parancs megfelel˝o pa-
ram´eter´enek jelent´es´evel.
void glCopyTexImage1D (GLenum target, GLint level, GLint internalFormat, GLint
x, GLint y, GLsizei width, GLint border)
Egydimenzi´os text´ ur´ at hoz l´etre a k´eppuffer felhaszn´al´ as´aval. A target param´eternek
a GL TEXTURE 1D ´ert´eket kell adni. A t¨obbi param´eter jelent´ese megegyezik a glCo-
pyTexImage2D() parancs megfelel˝o param´eter´enek jelent´es´evel.
void glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x,
GLint y, GLsizei width);
A kurrens egydimenzi´os text´ ura kijel¨olt r´esz´et fel¨ ul´ırja a k´eppufferb˝ ol vett adatokkal.
A target param´eternek a GL TEXTURE 1D ´ert´eket kell adni. A t¨obbi param´eter jelent´ese
megegyezik a glCopyTexSubImage2D() parancs megfelel˝o param´eter´enek jelent´es´evel.
100
13.6. H´aromdimenzi´ os text´ ur´ak
A h´aromdimenzi´os text´ ur´ ak egym´as m¨og´e helyezett k´etdimenzi´os text´ ur´ak
(text´ urar´etegek) ¨osszess´eg´enek tekinthet˝ ok. Az ilyen text´ ur´ ak adatai teh´at
h´aromdimenzi´ os t¨ombben t´arolhat´ ok. A h´aromdimenzi´ os text´ ur´ak leggyakoribb
alkalmaz´asi ter¨ ulete az orvostudom´ any ´es a geol´ogia, ahol a text´ ura r´etegei CT (com-
puter tomograph) vagy MRI (magnetic resonance image) k´epeket, illetve k˝ozetr´eteget
k´epviselnek. A h´aromdimenzi´ os text´ ur´ ak az OpenGL 1.2 verzi´ oban v´altak a rendszer
magj´anak r´esz´ev´e, kor´ abban csak elterjedt kieg´esz´ıt´esek voltak.
Minden k´etdimenzi´ os text´ ur´ at l´etrehoz´o ´es manipul´al´o parancsnak megvan a
h´aromdimenzi´ os megfelel˝oje.
void glTexImage3D (GLenum target, GLint level, GLint internalFormat, GLsizei
width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type,
const GLvoid *texels);
H´aromdimenzi´os text´ ur´ at hoz l´etre. A target param´eternek a GL TEXTURE 3D vagy
GL TEXTURE PROXY 3D ´ert´eket kell adni. A level, internalFormat, width, height, bor-
der, format, type ´es texels param´eterekre ugyanaz vonatkozik, mint a glTexImage2D()
parancsn´al. A width, illetve height param´eterek rendre a r´etegek sz´eless´eg´et, illetve ma-
gass´ag´ at jel¨olik, a depth param´eter a r´etegek sz´am´at, a text´ ura m´elys´eg´et. A depth pa-
ram´eterre ugyanazok a megszor´ıt´asok ´erv´enyesek, mint a width ´es height param´eterekre.
void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLint format, GLenum
type, const GLvoid *texels);
A kurrens h´aromdimenzi´os text´ ura kijel¨olt r´esz´et ´ırja fel¨ ul. A target param´eternek a
GL TEXTURE 3D ´ert´eket kell adni. A level ´es type param´eterek ´ertelmez´ese a glTexI-
mage3D() parancsn´al haszn´alt ugyanilyen nev˝ u param´eterek´evel megegyezik. A width,
height, depth param´eterek rendre a m´odos´ıtand´ o t´eglatest sz´eless´eg´et, magass´ag´at ´es
m´elys´eg´et jel¨olik, az xoffset, yoffset, zoffset h´armas pedig ezen t´eglatest bal als´o sark´anak
a text´ ura bal als´o cs´ ucspontj´ ahoz viszony´ıtott koordin´at´ ait. A m´odos´ıtand´o text´ urar´esz
nem l´oghat ki a text´ ur´ ab´ol. Az ´ uj text´ uraadatok a texels c´ımen kezd˝odnek.
void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoff-
set, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
A kurrens h´aromdimenzi´os text´ ura megadott r´eteg´enek el˝o´ırt t´eglalap alak´ u ter¨ ulet´et
fel¨ ul´ırja a k´eppufferb˝ ol kivett adatokkal. A kurrens GL READ BUFFER pufferb˝ol kiol-
vasott pixeleket ugyan´ ugy dolgozza fel, mint a glCopyPixels() parancs, az egyetlen
k¨ ul¨ onbs´eg az, hogy a pixeleket nem a k´eppufferbe, hanem a text´ uramem´ori´ aba m´asolja.
A target param´eternek a GL TEXTURE 3D ´ert´eket kell adni. A level param´eter je-
lent´ese megegyezik az el˝oz˝ o parancsokn´al le´ırtakkal. Hat´asa: a megfelel˝o k´eppuffer azon
t´eglalapj´anak pixeleit, melynek sz´eless´ege width, magass´aga height, bal als´o sark´anak
k´epmez˝ obeli koordin´at´ ai x, y bem´asolja a kurrens h´aromdimenzi´os text´ ura zoffset
101
r´eteg´enek azon width sz´eless´eg˝ u, height magass´ag´ u t´eglalapj´ara, mely bal als´o sark´anak a
r´etegen bel¨ uli koordin´at´ ai xoffset, yoffset.
13.7. A text´ ur´ak r´eszletess´eg´enek szintje (mipmap-
ping)
A text´ ur´ akat az objektumkoordin´ata-rendszerben kapcsoljuk hozz´a az ´abr´ azoland´o alak-
zatokhoz, melyek azt´an sz´amos transzform´aci´ on mennek kereszt¨ ul. El˝ofordulhat, hogy
egy-egy poligon k´epe csak egyetlen pixel lesz. Ennek megfelel˝oen a poligonra fesz´ıtett
text´ ura is egyetlen pontt´ a zsugorodik, amit a rendszernek az eredeti m´eret˝ u, pl. 128128
-as text´ ur´ ab´ol kell kisz´am´ıtania. Ilyen esetekben gyakran el˝ofordul, hogy a k¨ornyezet´et˝ ol
nagyon el¨ ut˝o lesz az eredm´eny, pl. csillog´o-villog´o pixelek j¨onnek el˝o. Ezen probl´ema
kik¨ usz¨ ob¨ol´ese ´erdek´eben a text´ ur´ab´ ol egyre cs¨okken˝ o felbont´ as´ u csal´adot hoznak l´etre,
egy text´ ura g´ ul´ at (ha a cs¨okken˝o felbont´as´ u text´ ur´ akat - t´eglalapokat - egym´as f¨ol´e he-
lyezz¨ uk) ´es az ´abr´azolt poligon cs¨okken˝ o m´eret´enek megfelel˝o tagj´at haszn´alja a rendszer.
Ezt az elj´ar´ ast nevezz¨ uk mipmapping-nek, ahol a mip a multum in parvo (sok dolog kis
helyen) latin kifejez´es r¨ovid´ıt´ese. Ennek haszn´alat´ahoz a text´ ur´ar´ ol minden lehets´eges
kicsiny´ıt´est el kell k´esz´ıteni, vagyis pl. egy 64 16 -os text´ ur´ ar´ol: 32 8, 16 4, 8 2,
4 1, 2 1, 1 1. Az egyes kicsiny´ıtett text´ ur´ak mindig az eggyel nagyobb felbont´ asb´ol
k´esz¨ ulnek, ´ıgy az ugr´asszer˝ u v´altoz´as kik¨ usz¨ob¨ olhet˝o. Ezeket a kicsiny´ıtett text´ ur´akat is
a glTexImage2D() f¨ uggv´ennyel lehet megadni, az alapfelbont´ as (a legnagyobb) szintje
(level ) legyen 0, ´es a felbont´ as cs¨okken´es´evel a level ´ert´eke n˝o.
13.7.1. Automatikus l´etrehoz´as
Ha a 0-s szintet (a legnagyobb felbont´ast) m´ar l´etrehoztuk, akkor az al´abbi GLU
f¨ uggv´enyekkel automatikusan l´etrehozhatjuk az ¨osszes t¨obbit.
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);
L´etrehozza a text´ ura ¨osszes sz¨ uks´eges alacsonyabb felbont´as´ u v´altozat´ at ´es a glTexI-
mage*D() felhaszn´al´ as´aval bet¨olti ˝oket. A target, internalFormat, width, height, format,
type ´es texels param´eterekre ugyanaz vonatkozik, mint a megfelel˝o glTexImage*D()
f¨ uggv´enyn´el. A f¨ uggv´enyek a 0 ´ert´eket adj´ak vissza, ha minden felbont´ast sikeresen
l´etrehoztak, egy´ebk´ent pedig egy GLU hiba¨ uzenetet.
Arra is lehet˝os´eg van, hogy ne az ¨osszes lehets´eges, hanem csak a megadott szint˝ u
felbont´ asokat hozzuk automatikusan l´etre.
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 k¨oz¨ otti texeleket hozza l´etre, ´es a
glTexImage*D() f¨ uggv´ennyel bet¨olti azokat. A t¨obbi param´eter ´ertelmez´ese ugyanaz,
mint a megfelel˝o glTexImage*D() f¨ uggv´enyn´el. A f¨ uggv´enyek a 0 ´ert´eket adj´ak vissza,
ha minden felbont´ast sikeresen l´etrehoztak, egy´ebk´ent pedig egy GLU hiba¨ uzenetet.
13.8. Sz˝ ur˝ ok
A text´ ur´ ak t´eglalap alak´ uak, melyeket tetsz˝oleges alak´ u poligonokra helyez¨ unk r´a a
modellt´erben, ´es a poligonnal egy¨ utt transzform´alja a rendszer a k´eperny˝ o koordin´ata-
rendszer´ebe. Ezen transzform´aci´ok eredm´enyek´ent ritk´an fordul el˝o, hogy egy pixelen
pontosan egy texel l´atszik, sokkal gyakoribb, hogy egy pixelen t¨obb texel l´atszik vagy
megford´ıtva, egy texel t¨obb pixelen. Az ut´obbi k´et esetben nem egy´ertelm˝ u, hogy
mely texeleket haszn´alja a rendszer, ´es hogy a texeleket hogyan ´atlagolja vagy inter-
pol´alja. Erre a c´elra az OpenGL t¨obb, un. sz˝ ur˝ot biztos´ıt, melyekb˝ ol a felhaszn´al´ o
v´alaszthat. A v´alaszt´ as az egym´asnak ellentmond´ o min˝os´eg ´es sebess´eg k¨oz¨otti kom-
promisszum megk¨ot´es´et jelenti. K¨ ul¨ on lehet sz˝ ur˝ ot v´alasztani a texelek kicsiny´ıt´es´ehez
´es nagy´ıt´ as´ahoz. Sok esetben nem kicsiny´ıt´esr˝ ol vagy nagy´ıt´ asr´ol van sz´o, hiszen pl.
el˝ofordulhat, hogy az egyik tengelyir´anyba kicsiny´ıteni, a m´asikba nagy´ıtani kellene, azaz
sk´al´ az´asnak (affin transzform´aci´ onak) kellene al´avetni az adott texeleket. Ilyen esetekben
az OpenGL d¨onti el, hogy kicsiny´ıt-e vagy nagy´ıt, miut´an sk´al´azni nem tudja a texeleket.
Legjobb azonban az ilyen helyzetek elker¨ ul´ese.
A texelek kicsiny´ıt´es´ere, illetve nagy´ıt´as´ ara haszn´alt sz˝ ur˝oket a glTexParameter*()
paranccsal v´alaszthatjuk ki. Ez egy ´altal´ anosabb c´el´ u f¨ uggv´eny, tov´abbi alkalmaz´ asa
a 13.11.2. pontban tal´alhat´ o.
void glTexParameter¦if¦ (GLenum target, GLenum pname, TYPE param);
void glTexParameter¦if¦v (GLenum target, GLenum pname, TYPE *param);
A target param´eternek a GL TEXTURE 1D, GL TEXTURE 2D vagy
GL TEXTURE 3D ´ert´eket adjuk att´ol f¨ ugg˝ oen, hogy h´any dimenzi´os text´ ur´ ar´ol van sz´o.
A pname param´eternek a GL TEXTURE MAG FILTER a nagy´ıt´ ashoz haszn´aland´ o
sz˝ ur˝ o be´all´ıt´as´ ahoz ´es a GL TEXTURE MIN FILTER ´ert´eket a kicsiny´ıt´eshez. param
lehets´eges ´ert´ekeit a 13.1. t´abl´ azat tartalmazza.
Ha a param = GL NEAREST, akkor mind nagy´ıt´as, mind kicsiny´ıt´es eset´en a pixel
k¨oz´eppontj´ahoz legk¨ozelebbi texelt haszn´alja a rendszer. Ez gyakran a k¨ornyezet´et˝ ol
103
13.1. t´abl´ azat. A text´ ur´ ak kicsiny´ıt´es´ehez ´es nagy´ıt´as´ ahoz megadhat´o 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 elt´er˝o pixelt eredm´enyez.
param = GL LINEAR eset´en a text´ ura dimenzi´oj´ anak megfelel˝oen a pixel
k¨oz´eppontj´ahoz legk¨ozelebbi 2, 2 2 vagy 2 2 2 pixelt line´arisan interpol´alja a
rendszer mind kicsiny´ıt´esn´el, mind nagy´ıt´ asn´ al. El˝ofordulhat, hogy az ´ıgy kiv´alasztott
texelek t´ ulny´ ulnak a text´ ura hat´ar´an. Ilyen esetekben az eredm´eny k´et t´enyez˝ot˝ ol
f¨ ugg: egyr´eszt att´ol, hogy a text´ ur´ anak van-e hat´ara, m´asr´eszt a text´ ura ,,ism´etl´es´enek”
be´all´ıt´ as´ at´ol (GL REPEAT, GL CLAMP, GL CLAMP TO EDGE l´asd a 13.11.2. pon-
tot). Nagy´ıt´as eset´en mindig az alapfelbont´as´ u text´ ur´ at haszn´alja a rendszer. Kicsiny´ıt´es
eset´en v´alaszthatunk, hogy az alapfelbont´ as´ ut (GL NEAREST, GL LINEAR), vagy a
legmegfelel˝obb egy vagy k´et felbont´ast haszn´alja a rendszer (a t¨obbi opci´o).
Ha param = GL NEAREST MIPMAP NEAREST, akkor a kicsiny´ıt´es m´ert´ek´enek
megfelel˝o, legk¨ozelebb ´all´o felbont´ asb´ol veszi a rendszer a pixel k¨oz´eppontj´ahoz legk¨oze-
lebbi texelt, param = GL LINEAR MIPMAP NEAREST eset´en pedig a legk¨ozelebbi
felbont´ asban line´aris interpol´aci´ oval sz´am´ıtja ki.
Ha param = GL NEAREST MIPMAP LINEAR, akkor a k´et legk¨ozelebbi fel-
bont´ asban veszi a pixel k¨oz´eppontj´ ahoz legk¨ozelebbi texeleket ´es ezeket line´arisan in-
terpol´alja, m´ıg param = GL LINEAR MIPMAP LINEAR eset´en a k´et legk¨ozelebbi fel-
bont´ asban k¨ ul¨on-k¨ ul¨on line´arisan interpol´alja a pixel k¨oz´eppontj´ ahoz legk¨ozelebbi pixe-
leket, majd az eredm´enyeket ´ ujra line´arisan interpol´alja. A line´aris interpol´aci´ o mindig
lassabb, de jobb eredm´enyt ad´o megold´as.
Ezen sz˝ ur˝ ok n´emelyik´enek m´as elnevez´ese is van. A GL NEAREST opci´ot szok´as
pont-mintav´etelez´esnek is nevezni, a GL LINEAR-t biline´aris mintav´etelez´esnek, a
GL LINEAR MIPMAP LINEAR-t pedig triline´aris mintav´etelez´esnek.
Ha a mipmapre t´amaszkod´o sz˝ ur˝ ot akarunk alkalmazni, de nem hoztuk l´etre
az ¨osszes lehets´eges felbont´ as´at a text´ ur´ anak (a GL TEXTURE BASE LEVEL-t˝ol 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 biztos´ıtj´ ak a text´ uraadatok t´arol´ as´at ´es a t´arolt adatok gyors
el´er´es´et. Haszn´alatuk nagym´ert´ekben felgyors´ıtja a text´ ur´ ak haszn´alat´ at, mivel egy
m´ar l´etrehozott text´ ura aktiviz´al´asa mindig gyorsabb, mint egy ´ uj l´etrehoz´ asa. A
text´ uraobjektumokat az OpenGL 1.1 verzi´ oj´aban vezett´ek be. Az implement´aci´ ok egy
104
r´esze lehet˝ov´e teszi, hogy text´ uraobjektumokb´ol un. munkacsoportot hozzunk l´etre,
mely tagjai a leghat´ekonyabban m˝ uk¨ odnek. Ha ez a lehet˝os´eg rendelkez´es¨ unkre ´all,
c´elszer˝ u a leggyakrabban haszn´alt text´ uraobjektumainkat a munkacsoportba tenni. A
text´ uraobjektomok haszn´alat´ahoz a k¨ovetkez˝o l´ep´eseket kell tenni:
• Text´ uraobjektum neveket kell l´etrehozni.
• L´etre kell hozni a text´ uraobjektomokat, azaz a n´evhez hozz´a kell rendelni a
text´ uraadatokat, ´es be kell ´all´ıtani a tulajdons´agait.
• Ha az implement´aci´ onk t´amogatja a munkacsoportot, meg kell n´ezni, hogy
van-e elegend˝o hely az ¨osszes text´ uraobjektum t´arol´ as´ara. Ha nincs, akkor
az egyes text´ ur´ akhoz priorit´ast kell rendelni, hogy a leggyakrabban haszn´alt
text´ uraobjektumok ker¨ uljenek a munkacsoportba.
• A megfelel˝o text´ uraobjektumot tegy¨ uk akt´ıvv´ a, hogy a megjelen´ıt´es sz´am´ara
el´erhet˝ ok legyenek.
13.9.1. A text´ uraobjektumok elnevez´ese
A text´ ur´ akhoz pozit´ıv eg´esz nevek (azonos´ıt´ok) rendelhet˝ok. A v´eletlen n´ev¨ utk¨ oz´esek
elker¨ ul´ese ´erdek´eben c´elszer˝ u a glGenTextures() f¨ uggv´enyt haszn´alni.
void glGenTextures (GLsizei n, GLuint *textureNames);
n darab, jelenleg haszn´alaton k´ıv¨ uli text´ uraobjektum nevet ad vissza a textureNames
t¨ombben. A visszaadott nevek nem felt´etlen¨ ul egym´ast k¨ovet˝ o pozit´ıv eg´eszek. A 0 a
rendszer ´altal lefoglalt text´ uraazonos´ıt´ o, ezt a glGenTextures() f¨ uggv´eny soha sem adja
vissza.
GLboolean glIsTexture (GLuint textureName);
A GL TRUE ´ert´eket adja vissza, ha a textureName egy l´etez˝ o text´ uraobjektum azo-
nos´ıt´ oja, ´es GL FALSE ´ert´eket, ha nincs ilyen nev˝ u text´ uraobjektum vagy textureName
= 0.
13.9.2. Text´ uraobjektumok l´etrehoz´asa, haszn´alata
void glBindTexture (GLenum target, GLuint textureName);
A target param´eter ´ert´eke GL TEXTURE 1D, GL TEXTURE 2D vagy
GL TEXTURE 3D lehet. Amikor el˝osz¨ or h´ıvjuk meg egy pozit´ıv textureName
azonos´ıt´ oval, akkor l´etrehoz egy text´ uraobjektumot ´es ezt hozz´akapcsolja a n´evhez.
Az ´ıgy l´etrehozott text´ uraobjektum a text´ uraadatokra ´es text´ uratulajdons´agokra az
alap´ertelmezett be´all´ıt´asokat tartalmazza, ezeket k´es˝obb a glTexImage*(), glTexSub-
Image*(), glCopyTexImage*(), glCopyTexSubImage*(), glTexParameter*() ´es
105
glPrioritizeTextures() f¨ uggv´enyek megh´ıv´ as´aval t¨olthetj¨ uk fel a haszn´aland´o text´ ura
jellemz˝oivel.
Ha nem el˝osz¨ or h´ıvjuk meg a textureName azonos´ıt´oval, akkor a textureName azo-
nos´ıt´ oj´ u text´ uraobjektumot teszi kurrenss´e (a text´ uralek´epez´es sz´am´ ara el´erhet˝ov´e) a
target-nek megfelel˝o dimenzi´oj´ u text´ uraobjektumok k¨oz¨ ul.
Ha textureName = 0 ´ert´ekkel h´ıvjuk meg, akkor az OpenGL kikapcsolja a
text´ uraobjektumok haszn´alat´at, ´es a n´evn´elk¨ uli alap´ertelmezett text´ ur´ at teszi kurrenss´e.
13.9.3. Text´ uraobjektumok t¨orl´ese
A nem kurrens text´ uraobjektumok is foglalj´ak a helyet a text´ uramem´ ori´ aban. Ahhoz,
hogy helyet szabad´ıtsunk fel, t¨or¨ olni kell az objektumot.
void glDeleteTextures (GLsizei n, const GLuint *textureNames);
A textureNames t¨ombben t´arolt azonos´ıt´oj´ u text´ uraobjektumokat t¨orli, azaz fels-
zabad´ıtja az adatok, param´eterek sz´am´ ara lefoglalt helyet a mem´ori´ aban ´es az azo-
nos´ıt´ ok haszn´alaton k´ıv¨ uli st´atuszt nyernek. Nem l´etez˝o text´ uraobjektumok t¨orl´ese nem
eredm´enyez hib´at, egyszer˝ uen figyelmen k´ıv¨ ul hagyja a rendszer, a 0 azonos´ıt´ oj´ u objektum
t¨orl´ese a default text´ ur´ at teszi kurrenss´e, mint a textureName = 0 param´eterrel megh´ıvott
glBindTexture() f¨ uggv´eny.
13.9.4. Rezidens text´ ur´ak munkacsoportja
N´eh´ any OpenGL implement´ aci´o lehet˝ov´e teszi, hogy nagy hat´ekonys´aggal m˝ uk¨ od˝o
text´ uraobjektumokb´ol ´all´ o munkacsoportot hozzunk l´etre. A munkacsoporthoz tar-
toz´o objektumokat rezidensnek nevezz¨ uk. Ezekn´el ´altal´ aban speci´alis hardver
t´amogatja a text´ uram˝ uveleteket, ´es egy korl´atozott kapacit´as´ u cache ´all rendelkez´esre
a text´ ur´ak t´arol´ as´ahoz. Ilyen speci´alis cache l´etez´ese eset´en mindenk´eppen c´elszer˝ u
text´ uraobjektumokat haszn´alni.
Ha a haszn´aland´o text´ ur´akhoz sz¨ uks´eges hely meghaladja a cache kapacit´ as´at, akkor nem
lehet minden text´ ur´ ank rezidens. Ha meg akarjuk tudni, hogy egy text´ uraobjektumunk
rezidens-e, tegy¨ uk az objektumot kurrenss´e ´es a glGetTexParameter*v() parancsot
a GL TEXTURE RESIDENT param´eterrel kiadva lek´erdezhetj¨ uk a st´atusz´ at. Ha t¨obb
objektum st´atusz´ara vagyunk k´ıv´ancsiak, akkor haszn´aljuk a glAreTexturesResident()
f¨ uggv´enyt.
GLboolean glAreTexturesResident (GLsizei n, const GLuint *textureNames,
GLboolean *residences);
A textureNames t¨ombben megadott azonos´ıt´ oj´ u n darab text´ uraobjektum st´atusz´at
k´erdezhetj¨ uk le. Az objektumok st´atusz´ at a residences t¨ombben adja vissza. Ha a mega-
dott n darab objektum mindegyike rezidens a f¨ uggv´eny a GL TRUE ´ert´eket adja vissza ´es
a residences t¨omb elemeit nem v´altoztatja meg. Ha az adott objektumok k¨oz¨ ul legal´abb
egy nem rezidens, akkor a f¨ uggv´eny a GL FALSE ´ert´eket adja vissza ´es a residences t¨omb-
nek a nem rezidens objektumokhoz tartoz´o elemeit a GL FALSE ´ert´ekre ´all´ıtja.
106
Ez a f¨ uggv´eny a text´ uraobjektumok pillanatnyi ´allapot´at adja vissza, ami ´altal´ aban
nagyon gyorsan v´altozik. Ha az implement´ aci´o nem t´amogatja a text´ uraobjektumok
munkacsoportj´at, akkor a rendszer minden objektumot rezidensnek tekint ´es a glAre-
TexturesResident() f¨ uggv´eny mindig a GL TRUE ´ert´eket adja vissza.
13.9.5. Text´ uraobjektumok priorit´asa
Ha azt akarjuk, hogy programunk a lehet˝o legnagyobb hat´ekonys´ aggal m˝ uk¨ odj¨on min-
denkor, pl. j´at´ekprogramok eset´en, akkor csak rezidens text´ uraobjektumot haszn´aljunk
text´ ur´ az´asra (ha a rendszer t´amogatja a text´ uraobjektumok munkacsoportj´at). Ha nincs
elegend˝o text´ uramem´ oria az ¨osszes text´ ura befogad´as´ ara, akkor cs¨okkenthetj¨ uk a text´ ur´ak
m´eret´et, a felbont´ asok (mipmap) sz´am´at, vagy a glTexSubImage*() f¨ uggv´ennyel a
text´ ur´ ak tartalm´at folytonosan v´altoztatva ugyanazt a text´ uramem´ori´ at haszn´aljuk. (Ez
ut´obbi mindig hat´ekonyabb, mint text´ ur´ ak t¨orl´ese, majd ´ uj l´etrehoz´ asa.)
Az olyan alkalmaz´asokn´ al, ahol a text´ ur´akat menetk¨ozben hozz´ak l´etre, elker¨ ulhetetlen
a nem rezidens text´ uraobjektumok haszn´alata is. Ilyen esetben a gyakrabban haszn´alt
text´ uraobjektumokhoz c´elszer˝ u magasabb priorit´ast rendelni, mint azokhoz amelyeket
val´osz´ın˝ uleg ritk´abban haszn´alunk.
void glPrioritizeTextures (GLsizei n, const GLuint *textureNames, const GLclampf
*priorities);
A textureNames t¨ombben megadott azonos´ıt´ oj´ u n darab text´ uraobjektumhoz a prio-
rities t¨ombben adott priorit´asokat rendeli. A priorit´asokat a rendszer a [0., 1.] interval-
lumra lev´agja. A 0 ´ert´ek a legalacsonyabb priorit´ast rendeli, az ilyen objektumnak a
legkisebb az es´elye arra, hogy rezidens maradjon az er˝oforr´asok cs¨okken´ese eset´en, az 1
priorit´as´ u´e a legnagyobb. A priorit´as hozz´akapcsol´as´ ahoz nem sz¨ uks´eges, hogy az objek-
tum l´etezzen, de a priorit´asnak csak l´etez˝ o objektumokra van hat´asa. A glTexPara-
meter*() is haszn´alhat´ o a kurrens objektum priorit´as´ anak be´all´ıt´as´ ara, a default text´ ura
priorit´asa csak ezzel ´all´ıthat´ o be.
13.10. Text´ uraf¨ uggv´enyek
A text´ ur´ ak nemcsak arra haszn´alhat´ ok, hogy a text´ ura sz´ıneit r´afess¨ uk az ´abr´azolt alakza-
tra, hanem haszn´alhat´ok az ´abr´azolt alakzat sz´ın´enek m´odos´ıt´as´ ara, vagy kombin´ alhat´ ok
az alakzat eredeti sz´ın´evel. A glTexEnv*() f¨ uggv´ennyel ´ırhatjuk el˝o, hogy a rendszer
hogyan haszn´alja a text´ ur´at.
void glTexEnv¦if¦ (GLenum target, GLenum pname, TYPE param);
void glTexEnv¦if¦v (GLenum target, GLenum pname, TYPE *param);
A target param´eternek a GL TEXTURE ENV ´ert´eket kell adni.
Ha pname = GL TEXTURE ENV MODE, akkor a param ´ert´eke GL DECAL,
GL REPLACE, GL MODULATE vagy GL BLEND lehet, mely ´ert´ekek azt ´ırj´ ak el˝o,
hogy a rendszer a text´ ur´at hogyan kombin´ alja a feldolgozand´o fragmentum sz´ın´evel.
107
Ha pname = GL TEXTURE ENV COLOR, akkor param az R, G, B, A komponen-
seket tartalmaz´o t¨omb c´ıme. Ezeket az ´ert´ekeket csak akkor haszn´alja a rendszer, ha a
GL BLEND text´ uraf¨ uggv´eny is defini´alt.
A text´ uraf¨ uggv´eny ´es a text´ ura bels˝o form´atum´ anak (ezt a glTexImage*()
f¨ uggv´ennyel adjuk meg) kombin´ aci´ oja hat´arozza meg, hogy a text´ ura egyes komponenseit
hogyan haszn´alja a rendszer. A text´ uraf¨ uggv´eny csak a text´ ura kiv´alasztott komponenseit
´es az ´abr´ azoland´o alakzat text´ ur´ az´as n´elk¨ uli sz´ın´et veszi figyelembe.
A 13.2. t´abl´ azat a GL REPLACE ´es GL MODULATE , a 13.3. t´abl´azat pedig a
GL DECAL ´es GL BLEND hat´as´at mutatja. Az f als´o index˝ u elemek a fragmentumra,
a t a text´ ur´ ara, a c pedig a GL TEXTURE ENV COLOR seg´ıts´eg´evel megadott sz´ınre
vonatkoznak. Az index n´elk¨ uli mennyis´egek az eredm´eny¨ ul kapott sz´ınt jelentik, E pedig
a csupa 1 komponens˝ u vektort.
13.2. t´abl´azat. A GL REPLACE ´es GL MODULATE f¨ uggv´enyei
bels˝o form´atum 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 eset´en a fragmentum sz´ın´et fel¨ ul´ırja a text´ ura sz´ın´evel. A GL DECAL
opci´o hat´asa nagyon hasonl´ıt az el˝oz˝ ore, a k¨ ul¨ onbs´eg az, hogy az ut´obbi csak RGB ´es
RGBA bels˝o form´atum eset´en m˝ uk¨ odik ´es az alfa komponenst m´ask´ent dolgozza fel.
RGBA bels˝o form´atum eset´en a text´ ura alfa komponens´enek megfelel˝oen keveri a frag-
mentum sz´ın´et a text´ ura sz´ın´evel, ´es a fragmentum alfa komponens´et v´altozatlanul hagyja.
Alap´ertelmez´es szerint a text´ uram˝ uveleteket a rendszer a megvil´ag´ıt´asi sz´am´ıt´ asok
ut´an hajtja v´egre. A t¨ ukr¨ oz˝ od˝o f´enyes foltok hat´as´at cs¨okkenti, ha azt text´ ur´ aval keverj¨ uk.
Lehet˝os´eg van arra, hogy a t¨ ukr¨ oz¨ ott f´enykomponens hat´as´at a text´ ur´az´ as ut´an vegye
figyelembe a rendszer. Ez az elj´ar´ as sokkal hangs´ ulyosabb´ a teszi a text´ ur´ azott fel¨ uletek
megvil´ag´ıt´as´ at.
13.11. Text´ urakoordin´at´ak megad´asa
Text´ ur´azott fel¨ uletek megad´asakor a cs´ ucspontok geometriai koordin´at´ ai mellett meg kell
adni a cs´ ucspontok text´ urakoordin´at´ ait is. A text´ urakoordin´at´ak azt adj´ak meg, hogy
108
13.3. t´abl´azat. A GL DECAL ´es GL BLEND f¨ uggv´enyei
bels˝o form´atum GL DECAL GL BLEND
GL ALPHA defini´alatlan
C = C
f
A = A
f
A
t
GL LUMINANCE defini´alatlan
C = C
f
∗ (E −L
t
) + C
c
∗ L
t
A = A
f
GL LUMINANCE ALPHA defini´alatlan
C = C
f
∗ (E −L
t
) + C
c
∗ L
t
A = A
f
A
t
GL INTENSITY defini´alatlan
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 tartoz´o texeleket in-
terpol´alja.
A text´ ur´ anak lehet 1, 2, 3 vagy 4 koordin´at´ aja. Ezeket s, t, r ´es q –val jel¨olj¨ uk,
megk¨ ul¨ onb¨oztet´es¨ ul a geometriai koordin´at´ akhoz haszn´alt x, y, z ´es w, valamint a fel¨ ule-
tek param´eterez´es´ehez haszn´alt u, v jel¨ol´esekt˝ol. A q koordin´ata ´ert´eke ´altal´ aban 1, ´es
ez homog´en text´ urakoordin´at´ak l´etrehoz´ as´ at teszi lehet˝ov´e. A text´ urakoordin´at´akat is
a glBegin(), glEnd() f¨ uggv´enyp´ ar k¨oz¨ ott kell megadni, mint a cs´ ucspontokat. Ezek a
koordin´at´ ak ´altal´aban a [0., 1.] intervallumon v´altoznak, de megadhatunk ezen k´ıv¨ ul es˝o
´ert´ekeket is, melyek ´ertelmez´es´et el˝o´ırhatjuk (l´asd a 13.11.2. pontot).
void glTexCoord¦1234¦¦sifd¦ (TYPE coords);
void glTexCoord¦1234¦¦sifd¦v (TYPE *coords);
A kurrens (s, t, r, q) text´ urakoordin´at´akat ´all´ıtja be. Az ezt k¨ovet˝ oen l´etrehozott
cs´ ucspon(ok)hoz a rendszer ezt a text´ urakoordin´at´ at rendeli. Ha a t vagy r koordin´at´ at
nem adjuk, meg akkor azokat a rendszer 0-nak tekinti, a hi´anyz´o q-t pedig 1-nek. A me-
gadott text´ urakoordin´at´akat a rendszer megszorozza a 44 -es text´ uram´ atrixszal, miel˝ott
feldolgozn´a ˝oket.
13.11.1. A megfelel˝o text´ urakoordin´at´ak kisz´amol´asa
Az ´abr´ azoland´o poligonok, poligonh´al´ ok cs´ ucspontjaihoz hozz´arendelj¨ uk a
text´ urakoordin´at´akat. Ez a hozz´arendel´es t¨ort´enhet ´ ugy, hogy a poligonokra
(s´ıkdarabokra) r´atessz¨ uk a szint´en s´ıkdarabot reprezent´ al´o text´ ur´ at. S´ıkbater´ıthet˝ o
fel¨ uletek eset´en (k´ up, henger ´altal´anos ´erint˝ofel¨ ulet) ezt torz´ıt´asmentesen megtehetj¨ uk,
minden m´as esetben azonban torz´ıt´as l´ep fel. P´eld´aul g¨omb eset´en a text´ uralek´epez´es
t¨ort´enhet a g¨omb
109
x(φ, ϕ) = r cos ϕcos φ,
y(φ, ϕ) = r sin ϕcos φ,
z(φ, ϕ) = r sin φ,
ϕ ∈ [0., 2π] , φ ∈ [0., 2π]
param´eteres alakj´ab´ ol kiindulva ´ ugy, hogy az ´ertelmez´esi tartom´any [0., 2π] [0., 2π]
n´egyzet´et k´epezz¨ uk le a text´ ura t´eglalapj´ara. ez a megold´as jelent˝ os torz´ıt´ast eredm´enyez
a g¨omb ´eszaki ´es d´eli p´olusa (a (0., 0., r) ´es (0., 0., −r) ) fel´e haladva. Szabad form´aj´ u,
pl. NURBS fel¨ ulet eset´en a fel¨ ulet u, v param´eterei haszn´alhat´ ok a text´ uralek´epez´eshez,
azonban a poligonh´al´oval k¨ozel´ıtett g¨orb¨ ult fel¨ uletek eszt´etikus text´ ur´az´ as´ anak jelent˝ os
m˝ uv´eszi ¨osszetev˝oi is vannak.
13.11.2. Text´ ur´ak ism´etl´ese
A [0., 1.] intervallumon k´ıv¨ ul es˝o text´ urakoordin´at´ akat is megadhatunk, ´es rendelkez-
het¨ unk arr´ol, hogy a rendszer a text´ ur´akat ism´etelje vagy lev´agja a koordin´at´ akat. A
text´ ura ism´etl´ese azt jelenti, hogy a text´ ura t´eglalapj´at, mit egy csemp´et, a rendszer
egym´as mell´e teszi. A megfelel˝o hat´as el´er´ese ´erdek´eben olyan text´ ur´at c´elszer˝ u me-
gadni, mely j´ol illeszthet˝o. A text´ urakoordin´at´ ak lev´ag´ asa azt jelenti, hogy minden 1-n´el
nagyobb text´ urakoordin´at´at 1-nek, minden 0-n´al kisebbet 0-nak tekint a rendszer. Ezek-
ben az esetekben k¨ ul¨on gondot kell ford´ıtani a text´ ura hat´ar´ ara, ha van. A GL NEAREST
sz˝ ur˝ o eset´en a rendszer a legk¨ozelebbi texelt haszn´alja, ´es a hat´art mindig figyelmen k´ıv¨ ul
hagyja.
void glTexParameter¦if¦ (GLenum target, GLenum pname, TYPE param);
void glTexParameter¦if¦v (GLenum target, GLenum pname, TYPE *param);
Azokat a param´etereket ´all´ıtja be, melyek azt befoly´asolj´ ak, hogy a rendszer ho-
gyan kezeli a texeleket a text´ uraobjektumokba val´o t´arol´ as, illetve a fragmentumo-
kra val´ o alkalmaz´ as sor´an. A target param´etert a text´ ura dimenzi´oj´ anak megfelel˝oen
GL TEXTURE 1D, GL TEXTURE 2D vagy GL TEXTURE 3D ´ert´ekre kell ´all´ıtani. A
pname param´eter lehets´eges ´ert´ekeit a 13.4. t´abl´azat tartalmazza, a hozz´ajuk kapcsolhat´o
´ert´ekekkel egy¨ utt.
13.11.3. Text´ urakoordin´at´ak automatikus l´etrehoz´asa
A text´ ur´az´ assal fel¨ uletek szintvonalainak ´abr´ azol´asa, valamint olyan hat´as is el´erhet˝ o,
mintha a fel¨ uletben t¨ ukr¨ oz˝odne a k¨ornyezete. Ezen hat´asok el´er´ese ´erdek´eben az OpenGL
automatikusan l´etrehozza a text´ urakoordin´at´ akat, vagyis nem kell azokat cs´ ucspontonk´ent
megadni.
110
13.4. t´abl´ azat. Text´ ur´ak ism´etl´ese
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 tetsz˝oleges sz´amn´egyes [0., 1.] -b˝ol
GL TEXTURE PRIORITY egy [0., 1.] intervallumbeli ´ert´ek
GL TEXTURE MIN LOD tetsz˝oleges lebeg˝opontos sz´am
GL TEXTURE MAX LOD tetsz˝oleges lebeg˝opontos sz´am
GL TEXTURE BASE LEVEL tetsz˝oleges nemnegat´ıv eg´esz
GL TEXTURE MAX LEVEL tetsz˝oleges nemnegat´ıv eg´esz
void glTexGen¦ifd¦ (GLenum coord, GLenum pname, TYPE param);
void glTexGen¦ifd¦v (GLenum coord, GLenum pname, TYPE *param);
Text´ urakoordin´at´ak automatikus l´etrehoz´ as´ahoz lehet vele f¨ uggv´enyeket megadni.
A coord param´eter ´ert´ekei GL S, GL T, GL R vagy GL Q lehet att´ol f¨ ugg˝ oen, hogy
az s, t, r vagy q koordin´ata l´etrehoz´ as´ ar´ol van sz´o.
A pname ´ert´eke GL TEXTURE GEN MODE, GL OBJECT PLANE vagy
GL EYE PLANE lehet. pname = GL TEXTURE GEN MODE eset´en param ´ert´eke
GL OBJECT LINEAR, GL EYE LINEAR vagy GL SPHERE MAP lehet, melyekkel
a text´ ur´at lek´epez˝o f¨ uggv´enyt adhatjuk meg. pname m´asik k´et lehets´eges ´ert´ek´en´el a
lek´epez˝o f¨ uggv´enyhez adhatunk meg param´etereket.
A referencias´ıkot akkor c´elszer˝ u objektumkoordin´at´ akban megadni
(GL OBJECT LINEAR), ha a text´ ur´azott k´ep r¨ogz´ıtett marad egy mozg´o ob-
jektumhoz k´epest. Mozg´o objektumok szintvonalainak ´abr´ azol´as´ ahoz c´elszer˝ u a
n´ez˝ opontkoordin´ata-rendszerben (GL EYE LINEAR) megadni a referencias´ıkot. A
GL SPHERE MAP lek´epez´est els˝osorban a k¨ornyezet t¨ ukr¨ oz˝od´es´enek szimul´ aci´ojakor
haszn´aljuk.
111
13.12. Text´ uram´atrix-verem
A rendszer a text´ urakoordin´at´ akat a 4 4 -es text´ uram´ atrixszal megszorozza, miel˝ott
b´armilyen m´as feldolgoz´asnak al´avetn´e. Alap´ertelmez´es szerint a text´ uram´atrix az
egys´egm´ atrix, azaz nincs semmilyen hat´asa. A text´ ur´ azott objektum ´ ujrarajzol´asa el˝ott a
text´ uram´ atrixot megv´altoztatva speci´alis hat´asok ´erhet˝ok el, pl. a text´ ura elmozd´ıthat´ o,
ny´ ujthat´ o, zsugor´ıthat´ o, forgathat´o. Miut´an a m´atrix 44 -es, tetsz˝oleges projekt´ıv tran-
szform´aci´ o ´ırhat´ o le vele. A rendszer egy veremszerkezetet tart karban a text´ uram´ atrixok
t´arol´ as´ara, mely verem legal´abb 2 szint˝ u. A text´ uram´ atrix megad´asa, a verem mani-
pul´al´ asa el˝ott a glMatrixMode(GL TEXTURE) parancsot kell kiadni, ´es ez ut´an a
m´atrixm˝ uveletek ´es a veremm˝ uveletek a text´ uram´ atrixra hatnak.
112
14. fejezet
G¨orb´ek ´es fel¨ uletek rajzol´asa
A geometriai alapelemekkel csak pont, t¨or¨ottvonal ´es poligon rajzolhat´o, azonban
term´eszetesen ig´eny van g¨orb´ek ´es g¨orb¨ ult fel¨ uletek megjelen´ıt´es´ere is. A grafikus rend-
szerekben a g¨orb´eket k¨ozel´ıt˝o (a g¨orb´en valamilyen s˝ ur˝ us´eggel felvett pontokat ¨osszek¨ ot˝ o)
t¨or¨ ottvonallal, a fel¨ uletet pedig k¨ozel´ıt˝ o (a fel¨ uleten valamilyen s˝ ur˝ us´eggel kisz´am´ıtott
pontokkal meghat´arozott) poligonokkal (poligonh´al´oval) szok´as megjelen´ıteni. Ha a
k¨ozel´ıt˝o t¨or¨ ottvonal , illetve poligon oldalai el´eg r¨ovidek, a k´epen nem l´athat´ ok az oldalak
(lapok) t¨or´esei, k¨ovetkez´esk´eppen sima g¨orbe, illetve fel¨ ulet benyom´ as´at keltik vizu´alisan.
A g¨orb´ek, illetve fel¨ uletek ilyen t´ıpus´ u megjelen´ıt´es´et param´eteres form´aban le´ırt alakza-
tokon c´elszer˝ u alkalmazni.
Az OpenGL a B´ezier-g¨ orb´ek ´es fel¨ uletek megjelen´ıt´es´et t´amogatja k¨ozvetlen¨ ul, azon-
ban a B´ezier-alakzatokkal sok m´as, j´ol ismert g¨orbe ´es fel¨ ulet is egzaktul le´ırhat´ o, ´ıgy pl.
az Hermite-´ıv, Ferguson-spline, B-spline.
14.1. B´ezier-g¨ orbe megjelen´ıt´ese
Az n-edfok´ u B´ezier-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)
n−i
=
n!
i! (n −i)!
u
i
(1 −u)
n−i
(14.2)
alakban ´ırhat´ o fel. A b
i
pontokat kontroll, vagy B´ezier pontoknak nevezz¨ uk, B
n
i
(u) pedig
az i-edik n-edfok´ u Bernstein-polinomot jel¨oli.
´
Altal´aban u
1
= 0, u
2
= 1. A (14.1) kifejez´es
olyan g¨orb´et ´ır le, melynek a kezd˝opontja b
0
, v´egpontja b
n
´es a t¨obbi megadott ponton
´altal´ aban nem megy ´at (kiv´eve, ha a pontok egy egyenesre illeszkednek).
Az OpenGL-ben a k¨ovetkez˝ok´eppen tudunk B´ezier-g¨ orb´et megjelen´ıteni:
• Defini´alunk egy ´ ugynevezett egydimenzi´os ki´ert´ekel´est a glMap1*() paranccsal,
azaz megadjuk a B´ezier-g¨orbe rendj´et, param´etertartom´any´at, kontrollpontjait,
valamint azt, hogy a kontrollpontok mit reprezent´ alnak, pl. a modellt´erbeli pontot
vagy sz´ınt.
• Enged´elyezz¨ uk a megfelel˝o objektum ki´ert´ekel´es´et glEnable().
113
• A megadott lek´epez´est ki´ert´ekelj¨ uk a k´ıv´ ant param´eter´ert´ekekn´el, azaz kisz´am´ıtjuk
a helyettes´ıt´esi ´ert´eket glEvalCoord1*().
void glMap1¦fd¦ (GLenum target, TYPE u1, TYPE u2, GLint stride, GLint order,
const TYPE *points);
B´ezier-g¨orb´et le´ır´ o, ´ ugynevezett egydimenzi´os ki´ert´ekel˝ot defini´al. A target pa-
ram´eterrel kell megadnunk, hogy a pontok mit reprezent´ alnak, amib˝ol az is k¨ovetke-
zik, hogy a point t¨ombben h´any adatot kell ´atadni. A lehet˝os´egek teljes list´aj´ at a 14.1.
t´abl´ azat tartalmazza. A pontok reprezent´ alhatnak, cs´ ucspontokat, RGBA vagy sz´ınindex
adatokat, norm´alvektorokat, vagy text´ urakoordin´at´akat. A sz´am´ıt´ ast v´egz˝ o parancs
kiad´asa el˝ott ugyanezzel a param´eterrel kell enged´elyezni (glEnable())a ki´ert´ekel´est.
u1 ´es u2 a B´ezier-g¨orbe param´etertartom´ any´ anak hat´arait jel¨oli, a stride param´eterrel
pedig azt adjuk meg, hogy k´et egym´ast k¨ovet˝o pont k¨oz¨ ott h´any float vagy double t´ıpus´ u
v´altoz´ o van. Az order param´eter a g¨orbe rendje (foksz´am + 1), aminek meg kell egyeznie
a pontok sz´am´ aval. A points param´eter az els˝o pont els˝o koordin´at´aj´ anak a c´ıme.
T¨obb ki´ert´ekel˝ ot is defini´alhatunk, de adatt´ıpusonk´ent csak egyet enged´elyezz¨ unk,
teh´at csak egyfajta cs´ ucspont-, sz´ın- vagy text´ ura-ki´ert´ekel´est enged´elyezz¨ unk. Ha
ugyanabb´ol a t´ıpusb´ol t¨obb is enged´elyezett, a rendszer a legt¨obb komponenssel megad-
hat´ot veszi figyelembe.
14.1. t´abl´ azat. Az glMap1*() parancs target param´eter´enek ´ert´ekei ´es jelent´es¨ uk
target jelent´ese
GL MAP1 VERTEX 3 cs´ ucspontok x, y, z koordin´at´ ai
GL MAP1 VERTEX 4 cs´ ucspontok x, y, z, w koordin´at´ ai
GL MAP1 INDEX sz´ınindex
GL MAP1 COLOR 4 R, G, B, A sz´ınkomponensek
GL MAP1 NORMAL norm´alis koordin´at´ ai
GL MAP1 TEXTURE COORD 1 s text´ urakoordin´at´ ak
GL MAP1 TEXTURE COORD 2 s, t text´ urakoordin´at´ ak
GL MAP1 TEXTURE COORD 3 s, t, r text´ urakoordin´at´ ak
GL MAP1 TEXTURE COORD 4 s, t, r, q text´ urakoordin´at´ ak
void glEvalCoord1¦fd¦ (TYPE u);
void glEvalCoord1¦fd¦v (const TYPE *u);
Az enged´elyezett egydimenzi´os lek´epez´esek u helyen vett helyettes´ıt´esi ´ert´ek´et
sz´am´ıtja ki. A glBegin() ´es glEnd() p´ar k¨oz¨ott aktiviz´alva a megfelel˝o OpenGL
parancs(ok) kiad´as´ anak hat´as´ at is el´erj¨ uk, teh´at ha GL MAP1 VERTEX 3 vagy
GL MAP1 VERTEX 4 enged´elyezett, akkor egy cs´ ucspontot hoz l´etre (mintha a
114
glVertex*() parancsot adtuk volna ki); ha GL MAP1 INDEX enged´elyezett, ak-
kor a glIndex*() parancsot szimul´alja; 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 l´etrehozott cs´ ucspontokhoz a kisz´am´ıtott sz´ınt, sz´ınindexet, norm´alist ´es
text´ urakoordin´at´at rendeli a rendszer, amennyiben azok enged´elyezettek, a nem en-
ged´elyezettekhez pedig a rendszer ´altal t´arolt kurrens ´ert´eket. Az ´ıgy kisz´am´ıtott
´ert´ekekkel azonban nem ´ırja fel¨ ul a kurrens ´ert´ekeket.
A glEvalCoord1*() paranccsal egyetlen g¨orbepontot sz´am´ıthatunk ki. A rendszer
lehet˝ov´e teszi azt is, hogy az [u
1
, u
2
] ´ertelmez´esi tartom´anyt n egyenl˝o r´eszre osztva
a param´etertartom´anyban r´acspontokat hozzunk l´etre, majd egyetlen f¨ uggv´enyh´ıv´ assal
kisz´am´ıtsuk a r´acspontokhoz tartoz´o g¨orbepontokat.
void glMapGrid1¦fd¦ (GLint n, TYPE u1, TYPE u2);
Az [u1, u2] intervallumot n egyenl˝ o r´eszre osztva egy n +1 darab r´acspontot hoz l´etre
az ´ertelmez´esi tartom´anyban.
void glEvalMesh1 (GLenum mode, GLint p1, GLint p2);
Minden enged´elyezett ki´ert´ekel˝ ovel kisz´amolja a kurrens r´acspontok p1-t˝ol p2-ig ter-
jed˝o intervallum´ ahoz tartoz´o ´ert´ekeket ( 0 ≤ p1 ≤ p2 ≤ n , ahol n a glMapGrid1*()
paranccsal megadott oszt´asok sz´ama). A mode param´eter a GL POINT vagy GL LINE
´ert´ekeket veheti fel, melynek megfelel˝oen a g¨orb´en kisz´am´ıtott pontokat pont alapelemmel
jel¨oli meg, vagy t¨or¨ottvonallal k¨oti ¨ossze. A
glMapGrid1f(n,u1,u2);
glEvalMesh1(mode,p1,p2);
parancsok hat´asa, a kerek´ıt´esi hib´ab´ ol ad´od´ o elt´er´est˝ ol eltekintve, megegyezik a k¨ovetkez˝ o
programr´eszlet´evel:
glBegin(mode);
for(i = p1; i <= p2; i++)
glEvalCoord1f(u1 + i* (u2 - u1) / n);
glEnd();
G¨orb´ek megrajzol´asa nem egyszer˝ u feladat, ugyanis igaz, hogy ha az oldalak nagyon
r¨ovidek (pl. 1 pixel hossz´ uak), akkor biztosan j´o vizu´alis hat´ast ´er¨ unk el. Az esetek
t¨obbs´eg´eben azonban az ¨osszes oldal hossz´anak cs¨okkent´ese pazarl´o (t´ ul sok szakaszt tar-
talmaz´o) k¨ozel´ıt´est eredm´enyez. Olyan g¨orb´ek eset´en, melyek ”majdnem” egyenes sza-
kaszt ´es ”nagyon g¨orb¨ ult” r´eszeket is tartalmaznak, az oldalhosszakat addig kell cs¨okken-
teni, m´ıg a nagyon g¨orb¨ ul r´esz is megfelel˝o lesz a k´epen, de ez m´ar biztosan t´ ul sok r´eszre
bontja a majdnem egyenes r´eszt. A feladat megold´as´an´ al teh´at figyelembe kell venni a
g¨orbe g¨orb¨ ulet´enek v´altoz´as´ at is, vagyis az a gyakran haszn´alt durva megold´as, miszerint:
”osszuk fel a param´etertartom´ anyt n egyenl˝o r´eszre, ´es az ezekhez tartoz´o g¨orbepontokat
k¨oss¨ uk ¨ossze egyenes szakaszokkal, ´ıgy n n¨ovel´es´evel el˝obb-ut´obb eszt´etikus k´epet ka-
punk”, csak konstans g¨orb¨ ulet˝ u g¨orb´ek eset´en eredm´enyezhet optim´alis megold´ast. Ilyen
g¨orbe a s´ıkon, mint tudjuk, csak az egyenes ´es a k¨or. A g¨orb¨ ulet v´altoz´ as´ahoz alkalmaz-
kod´o feloszt´asi algoritmust nem k¨onny˝ u tal´alni tetsz˝oleges g¨orb´ehez, de a B´ezier-g¨orb´ek
115
eset´en a de Casteljau-algoritmus biztos´ıtja ezt. A fenti szempontokat mindenk´eppen
c´elszer˝ u figyelembe venni, ha saj´at felbont´ asi algoritmust akarunk kital´alni g¨orb´ek raj-
zol´as´ ara. A fel¨ uletek poligonh´al´ oval val´o k¨ozel´ıt´ese m´eg ¨osszetettebb feladat. Ez´ert azt
tan´acsoljuk, hogy ha csak lehet, haszn´aljuk a GLU, vagy a GLUJ f¨ uggv´enyk¨onyvt´ arak
NURBS objektumok megjelen´ıt´es´ere felk´ın´ alt lehet˝os´egeit.
14.2. B´ezier-fel¨ ulet megjelen´ıt´ese
A B´ezier-fel¨ ulet param´eteres 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) ´ertelmez´ese (14.2) szerinti. A fel¨ ulet ´atmegy a b
00
, b
0m
, b
n0
, b
nm
kontrollpontokon, a t¨obbi ponton azonban ´altal´ aban nem, kiv´eve, ha a kontrollpontok egy
s´ıkra illeszkednek.
A B´ezier fel¨ ulet megjelen´ıt´esekor k¨ovetend˝ o elj´ar´ as anal´og a B´ezier-g¨ orbe megje-
len´ıt´es´ehez k¨ovetend˝ovel, bele´ertve a parancsok nev´et is.
void glMap2¦fd¦ (GLenum target, TYPE u1, TYPE u2, GLint ustride, GLint uorder,
TYPE v1, TYPE v2, GLint vstride, GLint vorder, const TYPE *points);
B´ezier-fel¨ uletet le´ır´o, ´ ugynevezett k´etdimenzi´os ki´ert´ekel˝ ot defini´al. A target pa-
ram´eter a 14.2. t´abl´ azat szerinti ´ert´ekeket veheti fel, vagyis a g¨orb´ehez hasonl´oan azt
´ırja el˝o, hogy a pontok hol adottak. A sz´am´ıt´ast v´egz˝ o parancs kiad´asa el˝ott ugyanezzel
a param´eterrel kell enged´elyezni (glEnable())a ki´ert´ekel´est. A fel¨ ulet ´ertelmez´esi tar-
tom´anya az (u, v) param´eters´ık [u1, u2] [v1, v2] t´eglalapja. uorder a fel¨ ulet u, vorder
pedig a v ir´any´ u rendj´et (foksz´am + 1) jel¨oli. Az ustride ´es vstride param´eterek k´et
egym´ast k¨ovet˝o pontnak a koordin´at´ak t´ıpus´aban (float, double) m´ert t´avols´ag´ at adja
meg. A points param´eter az els˝o pont els˝o koordin´at´ aj´anak a c´ıme.
P´eld´aul, ha a kontrollpontok t¨ombje
GLdouble ctrlpoints[50][30][3];
´es az els˝o kontrollpont els˝o koordin´at´ aja a ctrlpoints[10][10][0], akkor ustride = 303,
vstride = 3 ´es points = &(ctrlpoints[10][10][0]).
void glEvalCoord2¦fd¦ (TYPE u, TYPE v);
void glEvalCoord2¦fd¦v (const TYPE *u, const TYPE *v);
Az enged´elyezett k´etdimenzi´os lek´epez´eseknek a param´eters´ık (u, v) koordin´at´aj´ u
pontj´ aban vett ´ert´ek´et sz´am´ıtja ki. Ha az enged´elyezett lek´epez´es cs´ ucspontra
vonatkozik - a glMap2*() parancs target param´etere GL MAP2 VERTEX 3
vagy GL MAP2 VERTEX 4 - a rendszer automatikusan l´etrehozza a norm´alisokat
is, ´es a cs´ ucsponthoz kapcsolja, ha a norm´alisok automatikus l´etrehoz´ as´ at a
glEnable(GL AUTO NORMAL) parancs kiad´as´aval kor´abban enged´elyezt¨ uk. Ha nem
enged´elyezt¨ uk a norm´alisok automatikus l´etrehoz´ as´at, akkor a megfelel˝o k´etdimenzi´os
116
14.2. t´abl´azat. Az glMap2*() parancs target param´eter´enek ´ert´ekei
target jelent´ese
GL MAP2 VERTEX 3 cs´ ucspontok x, y, z koordin´at´ ai
GL MAP2 VERTEX 4 cs´ ucspontok x, y, z, w koordin´at´ ai
GL MAP2 INDEX sz´ınindex
GL MAP2 COLOR 4 R, G, B, A sz´ınkomponensek
GL MAP2 NORMAL norm´alis koordin´at´ ai
GL MAP2 TEXTURE COORD 1 s text´ urakoordin´at´ ak
GL MAP2 TEXTURE COORD 2 s, t text´ urakoordin´at´ ak
GL MAP2 TEXTURE COORD 3 s, t, r text´ urakoordin´at´ ak
GL MAP2 TEXTURE COORD 4 s, t, r, q text´ urakoordin´at´ ak
norm´alis-lek´epez´es defini´al´as´ aval ´es enged´elyez´es´evel hozhatjuk l´etre a norm´alisokat. Ha
az el˝oz˝ ok egyik´et sem enged´elyezt¨ uk, akkor a rendszer a kurrens norm´alist rendeli a
cs´ ucsponthoz.
void glMapGrid2¦fd¦ (GLint nu, TYPE u1, TYPE u2, GLint nv, TYPE v1, TYPE
v2);
Az [u1, u2] param´etertartom´ anyt nu , a [v1, v2] param´etertartom´ anyt nv egyenl˝o r´eszre
osztva egy (nu +1) (nv +1) pontb´ ol ´all´ o r´acsot hoz l´etre az ´ertelmez´esi tartom´anyban.
void glEvalMesh2 (GLenum mode, GLint p1, GLint p2, GLint q1, GLint q2);
A glMapGrid2*() paranccsal l´etrehozott r´acspontokban minden enged´elyezett
ki´ert´ekel˝ovel kisz´am´ıtja a fel¨ ulet pontjait az (nu + 1) (nv + 1) r´acspontokban, ´es a
mode param´eter GL POINT ´ert´eke eset´en ponth´ al´oval, GL LINE eset´en poligonh´al´ oval,
GL FILL eset´en pedig kit¨olt¨ott poligonh´al´ oval jelen´ıti meg. A
glMapGrid2f(nu,u1,u2,nv,v1,v2);
glEvalMesh1(mode,p1,p2,q1,q2);
parancsok hat´asa gyakorlatilag a k¨ovetkez˝ o programr´eszletek valamelyik´evel egyezik meg,
elt´er´es csak a kerek´ıt´esi hib´ab´ ol ad´odhat.
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. Racion´alis B-spline (NURBS) g¨orb´ek ´es fel¨ ule-
tek megjelen´ıt´ese
Napjaink sz´am´ıt´og´epes rendszereinek legelterjedtebb g¨orbe- ´es fel¨ uletle´ır´ asi m´odszere a
racion´alis B-spline. Szinonimak´ent haszn´alatos a NURBS (Non-Uniform Rational B-
Spline) elnevez´es is. Nagy n´epszer˝ us´eg¨ uket az is indokolja, hogy sokf´ele alak ´ırhat´ o le
vel¨ uk egzaktul, ´ıgy pl. a B´ezier-g¨ orbe vagy a hagyom´anyosan haszn´alt k´ upszeletek is.
Jelen anyagban csak a vonatkoz´o OpenGL f¨ uggv´enyek meg´ert´es´ehez elengedhetetlen¨ ul
sz¨ uks´eges defin´ıci´okat adjuk meg.
Az OpenGL-ben az al´abbi elj´ar´ ast k¨ovetve tudunk NURBS g¨orb´et vagy fel¨ uletet meg-
jelen´ıteni:
• L´etrehozunk egy ´ uj NURBS objektumstrukt´ ur´ at a gluNewNurbsRenderer() pa-
ranccsal. Az itt visszakapott c´ımmel tudunk hivatkozni az objektumra a tulajd-
ons´agok be´all´ıt´asakor ´es a megjelen´ıt´eskor.
• A gluNurbsProperty() paranccsal be´all´ıthatjuk az objektum megjelen´es´et be-
foly´asol´ o param´etereket, tov´abb´ a ezzel enged´elyezhetj¨ uk a k¨ozel´ıt˝ o t¨or¨ ottvonal, il-
letve poligonh´al´ o adatainak visszanyer´es´et.
• A gluNurbsCallback() paranccsal megadhatjuk azt a f¨ uggv´enyt, amit a rendszer
megh´ıv, ha a NURBS objektum megjelen´ıt´ese sor´an hiba fordul el˝o, valamint me-
gadhatjuk azt a f¨ uggv´enyt, amivel a k¨ozel´ıt˝o t¨or¨ ottvonal, illetve poligonh´al´ o adatait
visszakapjuk.
• A g¨orbe-, illetve fel¨ uletmegad´ast ´es rajzol´ast a gluBeginCurve(), illetve gluBeg-
inSurface() parancsokkal kezdj¨ uk.
• A g¨orb´ek, illetve fel¨ uletek megad´as´ara a gluNurbsCurve(), illetve gluNurbsSur-
face() parancsok szolg´alnak. Ezeket legal´abb egyszer ki kell adni a k¨ozel´ıt˝o t¨or¨ott-
vonal, illetve poligonh´al´o l´etrehoz´ asa ´erdek´eben, de megh´ıvhat´ok a fel¨ uleti norm´alis
´es a text´ urakoordin´at´ ak l´etrehoz´as´ ahoz is.
118
• A gluEndCurve(), illetve gluEndSurface() parancsokkal z´arjuk a NURBS ob-
jektum megjelen´ıt´es´et.
GLUnurbsObj *gluNewNurbsRenderer (void);
Egy ´ uj NURBS objektumstrukt´ ur´at hoz l´etre ´es ad vissza. Az objektumra a tulajd-
ons´agok be´all´ıt´as´ an´ al ´es a megrajzol´asn´ al ezzel az azonos´ıt´oval kell hivatkozni. Ha nincs
el´eg mem´oria az objektum allok´al´ as´ahoz, akkor a visszaadott c´ım NULL.
void gluDeleteNurbsRenderer (GLUnurbsObj *nobj );
T¨orli az nobj c´ımen t´arolt NURBS objektumot, felszabad´ıtja a lefoglalt mem´ori´at.
void gluNurbsProperty (GLUnurbsObj *nobj, GLenum property, GLfloat value);
Az nobj azonos´ıt´ oj´ u NURBS objektum megjelen´es´enek tulajdons´agai ´all´ıthat´ok be
seg´ıts´eg´evel. A property param´eter a tulajdons´ag azonos´ıt´ oja, value pedig az ´ert´eke. A
property param´eter lehets´eges ´ert´ekei ´es jelent´es¨ uk:
• GLU DISPLAY MODE eset´en a megjelen´ıt´es m´odja ´ırhat´ o el˝o, ekkor
a value param´eter ´ert´eke GLU FILL, GLU OUTLINE POLYGON vagy
GLU OUTLINE PATCH lehet. GLU FILL eset´en kit¨olt¨ott poligonok-
kal, GLU OUTLINE POLYGON eset´en a k¨ozel´ıt˝ o poligonok oldalaival,
GLU OUTLINE PATCH eset´en pedig a fel¨ uletfolt hat´arol´ o g¨orb´eivel (bele´ertve a
trimmel˝o g¨orb´eket is) ´abr´azolja a NURBS fel¨ uletet a rendszer. Alap´ertelmez´es:
GLU FILL.
• GLU NURBS MODE eset´en azt ´ırhatjuk el˝o, hogy a k¨ozel´ıt˝ o t¨or¨ ottvonal, il-
letve poligonh´al´ ot meg kell jelen´ıteni, vagy a visszah´ıv´asi mechanizmust kell
aktiviz´alni, hogy a k¨ozel´ıt˝o t¨or¨ ottvonal, illetve poligonh´al´o adatai el´erhet˝ok
legyenek. Az els˝o esetben a value param´etert GLU NURBS RENDERER
´ert´ekre kell ´all´ıtani, ami egyben az alap´ertelmez´es is, a m´asodik esetben pedig
GLU NURBS TESSELLATOR-ra.
• GLU CULLING eset´en a GL TRUE ´ert´ek megad´as´ aval a megjelen´ıt´esi folyamat fel-
gyors´ıthat´o, ugyanis ekkor a rendszer nem v´egzi el a t¨or¨ ottvonallal, illetve poligonok-
kal val´ o k¨ozel´ıt´est, ha az objektum az ´abr´ azoland´o t´err´eszt le´ır´o csonka g´ ul´an (vagy
has´abon) k´ıv¨ ul esik. Ha ez a param´eter GL FALSE - ami egyben az alap´ertelmez´es
is -, akkor ilyen esetben is elv´egzi.
• GLU SAMPLING METHOD eset´en a mintav´etelez´esi m´odszert adhatjuk meg,
m´ask´ent n´ezve azt, hogy a k¨ozel´ıt´es pontoss´ ag´ at milyen m´odon akarjuk el˝o´ırni. Ha
value ´ert´eke:
– GLU PARAMETRIC ERROR, a k¨ozel´ıt˝o t¨or¨ ottvonalnak, illetve poligonoknak
a g¨orb´et˝ ol, illetve a fel¨ ulett˝ ol pixelekben m´ert t´avols´ aga nem lehet nagyobb a
gluNurbsProperty() type = GLU SAMPLING TOLERANCE param´eterrel
val´o megh´ıv´ as´ an´al megadott value ´ert´ekn´el.
119
– GLU PATH LENGTH, a k¨ozel´ıt˝ o t¨or¨ottvonal, illetve poligonok oldalainak pi-
xelekben m´ert hossza nem lehet nagyobb a gluNurbsProperty() type =
GLU SAMPLING TOLERANCE param´eterrel val´ o megh´ıv´as´ an´al megadott
value ´ert´ekn´el.
– GLU OBJECT PATH LENGTH hat´asa csaknem teljesen megegyezik a
GLU PATH LENGTH-n´el le´ırtakkal, egyetlen elt´er´es, hogy a t´avols´agot nem
pixelben, hanem az objektum ter´enek egys´eg´eben ´ırjuk el˝o.
– GLU OBJECT PARAMETRIC ERROR hat´asa majdnem megegyezik a
GLU PARAMETRIC ERROR-n´ al le´ırtakkal, egyetlen elt´er´es, hogy a
t´avols´ agot nem pixelben, hanem az objektum ter´enek egys´eg´eben ´ırjuk el˝o.
– GLU DOMAIN DISTANCE, akkor azt adjuk meg, hogy a k¨ozel´ıt˝ o t¨or¨ ottvonal,
illetve poligonh´al´ o cs´ ucspontjait a param´etertartom´ anyon m´erve milyen s˝ ur˝ un
sz´am´ıtsa ki a rendszer. Ezt a s˝ ur˝ us´eget u ir´anyban a gluNurbsProperty()
type = GLU U STEP megh´ıv´as´ aval, v ir´anyban a type = GLU V STEP
megh´ıv´as´ aval ´ırhatjuk el˝o. Ezekn´el a h´ıv´ asokn´al a value param´eterrel azt ad-
hatjuk meg, hogy egys´egnyi param´etertartom´ anyon h´any oszt´aspont legyen.
• GLU SAMPLING TOLERANCE eset´en a k¨ozel´ıt´es pontoss´ ag´at ´ırhatjuk el˝o. Ha a
mintav´etelez´esi m´odszer:
– GLU PATH LENGTH, akkor a value param´eterrel a k¨ozel´ıt˝o t¨or¨ ottvonal,
illetve poligonok oldalainak pixelekben m´ert maxim´alis hossz´at ´ırjuk el˝o.
Alap´ertelmez´es: 50.
– GLU OBJECT PATH LENGTH, akkor a value param´eterrel a k¨ozel´ıt˝o t¨or¨ott-
vonal, illetve poligonok oldalainak az objektumkoordin´ata-rendszerben m´ert
maxim´alis hossz´at ´ırjuk el˝o. Alap´ertelmez´es: 50.
• GLU PARAMETRIC TOLERANCE eset´en a k¨ozel´ıt´es pontoss´ag´ at adhatjuk meg.
Ha a mintav´etelez´esi m´odszer:
– GLU PARAMETRIC ERROR, a k¨ozel´ıt˝o t¨or¨ ottvonalnak, illetve poligonoknak
a g¨orb´et˝ ol, illetve a fel¨ ulett˝ ol m´ert elt´er´es´enek pixelekben m´ert maximum´at
´ırhatjuk el˝o a value param´eterrel. Alap´ertelmez´es: 0.5.
– GLU OBJECT PARAMETRIC ERROR, a k¨ozel´ıt˝o t¨or¨ottvonalnak, illetve po-
ligonoknak a g¨orb´et˝ol, illetve a fel¨ ulett˝ol m´ert elt´er´es´enek maximum´ at ´ırhatjuk
el˝o az objektumkoordin´ata-rendszerben a value param´eterrel. Alap´ertelmez´es:
0.5.
• GLU U STEP eset´en azt adhatjuk meg, hogy az u ir´any´ u param´eter 1 egys´eg´ere
h´any oszt´aspont jusson a g¨orb´en, illetve a fel¨ uleten, felt´eve, hogy a mintav´etelez´esi
m´odszer GLU DOMAIN DISTANCE. Alap´ertelmez´es: 100.
• GLU V STEP eset´en azt adhatjuk meg, hogy az v ir´any´ u param´eter 1 egys´eg´ere
h´any oszt´aspont jusson a g¨orb´en, illetve a fel¨ uleten, felt´eve, hogy a mintav´etelez´esi
m´odszer GLU DOMAIN DISTANCE. Alap´ertelmez´es: 100.
120
• GLU AUTO LOAD MATRIX eset´en a GL TRUE ´ert´ek, ami az alap´ertelmez´es is,
megad´as´ aval azt jelezz¨ uk, hogy az OpenGL szerverr˝ol kell let¨olteni a n´ez˝opont-
modell, a vet´ıt´esi ´es a k´epmez˝o-transzform´ aci´o m´atrix´ at a megjelen´ıt´eshez. Ha
ennek a param´eternek a GL FALSE ´ert´eket adjuk, akkor a felhaszn´al´ oi programnak
kell szolg´altatnia ezeket a m´atrixokat a gluSamplingMatricies() paranccsal.
14.3.1. NURBS g¨orb´ek rajzol´asa
Mindenekel˝ott defini´aljuk a NURBS g¨orb´eket ´es az ezekhez sz¨ uks´eges normaliz´alt B-spline
alapf¨ uggv´enyt. Az
N
1
j
(u) =
_
1, ha u
j
≤ u < u
j+1
0, egy´ebk´ent
N
k
j
(u) =
u −u
j
u
j+k−1
−u
j
N
k−1
j
(u) +
u
j+k
−u
u
j+k
−u
j+1
N
k−1
j+1
(u)
(14.3)
rekurzi´oval defini´alt f¨ uggv´enyt k − 1–edfok´ u ( k–adrend˝ u) normaliz´alt B–spline
alapf¨ uggv´enynek nevezz¨ uk, az u
j
≤ u
j+1
∈ R sz´amokat pedig csom´o´ert´ekeknek.
Meg´allapod´as 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
k−1
, u
n+1
] (14.4)
kifejez´essel adott g¨orb´et k−1–edfok´ u (k–adrend˝ u) NURBS (racion´alis B–spline) g¨orb´enek
nevezz¨ uk, a d
l
pontokat kontrollpontoknak vagy de Boor–pontoknak, a w
l
≥ 0
skal´arokat pedig s´ ulyoknak nevezz¨ uk. N
k
l
(u) az l–edik k −1–edfok´ u normaliz´alt B–spline
alapf¨ uggv´enyt jel¨oli, melyek ´ertelmez´es´ehez az u
0
, u
1
, . . . , u
n+k
csom´o´ert´ekek sz¨ uks´egesek.
Az ´ıgy defini´alt g¨orbe ´altal´ aban egyik kontrollponton sem megy ´at, azonban egy-
bees˝o szomsz´edos csom´o´ert´ekek megad´as´aval ez el´erhet˝ o. Ha az els˝o k darab csom´o´ert´ek
megegyezik (u
0
= u
1
= = u
k−1
), akkor a g¨orbe ´atmegy a d
0
kontrollponton, ha-
sonl´ok´eppen, ha az utols´o k darab csom´o´ert´ek megegyezik (u
n+1
= u
n+2
= = u
n+k
),
akkor a g¨orbe ´atmegy a d
n
kontrollponton. A k¨ozb¨ uls˝o csom´o´ert´ekek eset´eben legfeljebb
k −1 egym´ast k¨ovet˝ o eshet egybe.
void gluBeginCurve (GLUnurbsObj *nobj );
void gluEndCurve (GLUnurbsObj *nobj );
A gluBeginCurve() parancs az nobj azonos´ıt´ oj´ u NURBS g¨orbe megad´as´ anak kez-
det´et jelzi, a gluEndCurve() parancs pedig a v´eg´et. A kett˝o k¨oz¨ ott a gluNurbsCurve()
parancs egy vagy t¨obb megh´ıv´as´ aval lehet a g¨orb´et le´ırni. A gluNurbsCurve() parancsot
pontosan egyszer kell a GL MAP1 VERTEX 3 vagy GL MAP1 VERTEX 4 param´eterrel
megh´ıvni.
void gluNurbsCurve (GLUnurbsObj *nobj, GLint uknot count, GLfloat *uknot,
GLint u stride, GLfloat *ctrlarray, GLint uorder, GLenum type);
Az nobj azonos´ıt´ oj´ u NURBS g¨orb´et rajzolja meg. uorder a g¨orbe rendje (a (14.4)
121
kifejez´esbeli k), u knot count a csom´o´ert´ekek sz´ama (a kontrollpontok sz´ama + a rend,
a (14.4) jel¨ol´es´evel n + k + 1), uknot az els˝o csom´o´ert´ek c´ıme, ctrlarray az els˝o kontroll-
pont els˝o koordin´at´ aj´ anak c´ıme, ustride k´et egym´ast k¨ovet˝ o kontrollpontnak GLfloat-
ban m´ert t´avols´ aga, type ´ert´eke GL MAP1 VERTEX 3 nem racion´alis B-spline eset´en,
GL MAP1 VERTEX 4 racion´alis B-spline eset´en.
Racion´alis g¨orb´ekn´el a kontrollpontokat homog´en koordin´at´ akban kell megadni, teh´at
a (14.4) kifejez´es 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. koordin´ata maga a s´ uly lesz.
14.3.2. NURBS fel¨ uletek megjelen´ıt´ese
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
k−1
, u
n+1
] , v ∈ [v
l−1
, v
m+1
] (14.5)
kifejez´essel adott fel¨ uletet NURBS (racion´alis B–spline) fel¨ uletnek nevezz¨ uk, a d
ij
pon-
tokat kontrollpontoknak vagy de Boor–pontoknak, a w
ij
≥ 0 skal´ arokat pedig s´ ulyoknak
nevezz¨ uk. N
k
i
(u) az i–edik k − 1–edfok´ u normaliz´alt B–spline alapf¨ uggv´enyt jel¨oli (l´asd
a (14.3) kifejez´est), melyek ´ertelmez´es´ehez az u
0
, u
1
, . . . , u
n+k
csom´o´ert´ekek sz¨ uks´egesek,
N
l
j
(v)-hez pedig a v
0
, v
1
, . . . , v
m+l
csom´o´ert´ekek.
Az ´ıgy defini´alt fel¨ ulet ´altal´aban egyik kontrollponton sem megy ´at, ´am egybees˝o
szomsz´edos csom´o´ert´ekek megad´as´ aval ez el´erhet˝ o. A g¨orb´ekkel anal´og m´odon, ha u
0
=
u
1
= = u
k−1
, u
n+1
= u
n+2
= = u
n+k
, v
0
= v
1
= = v
l−1
´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 azonos´ıt´oj´ u NURBS fel¨ ulet megad´as´ anak kez-
det´et jelzi, a gluEndSurface() parancs pedig a v´eg´et. A kett˝o k¨oz¨ ott a gluNurbsSur-
face() parancs egy vagy t¨obb megh´ıv´ as´aval lehet a g¨orb´et le´ırni. A gluNurbsSurface()
parancsot pontosan egyszer kell a GL MAP2 VERTEX 3 vagy GL MAP2 VERTEX 4
param´eterrel megh´ıvni.
A fel¨ ulet trimmel´ese a gluBeginTrim(), gluEndTrim() parancsok k¨oz¨ott kiadott
gluPwlCurve() ´es gluNurbsCurve() parancsokkal ´erhet˝ o el.
void gluNurbsSurface (GLUnurbsObj *nobj, GLint uknot count, GLfloat *uknot,
GLint vknot count, GLfloat *vknot, GLint u stride, GLint v stride, GLfloat *ctrlar-
ray, GLint uorder, GLint vorder, GLenum type);
Az nobj azonos´ıt´ oj´ u NURBS fel¨ uletet rajzolja meg. uorder a fel¨ ulet u ir´any´ u rendje
(foksz´am + 1), vorder pedig a v ir´any´ u. uknot count az u param´eter csom´o´ert´ekeinek
122
sz´ama (uknot count = uorder + az u ir´any´ u kontrollpontok sz´ama), vknot count pe-
dig a v param´eter´e. ctrlarray a kontrollh´al´ o els˝o pontj´ anak c´ıme. A type pa-
ram´eter lehets´eges ´ert´ekei: GL MAP2 VERTEX 3 nem racion´alis B-spline fel¨ ulet eset´en,
GL MAP2 VERTEX 4 racion´alis B-spline fel¨ uletn´el, GL MAP2 TEXTURE COORD *
text´ urakoordin´at´ak, GL MAP2 NORMAL norm´alisok l´etrehoz´as´ ahoz.
Az u stride, illetve v stride param´eterekkel azt kell megadnunk, hogy u, illetve v
ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga h´any GLfloat v´altoz´o.
14.3.3. Trimmelt fel¨ uletek
El˝ofordulhat, hogy a NURBS fel¨ uletfoltnak csak valamely darabj´at (darabjait) akarjuk
megjelen´ıteni. Ezt ´ ugy tehetj¨ uk meg, hogy az ´ertelmez´esi tartom´anyt, mely a (14.5)
kifejez´es jel¨ol´eseit haszn´alva eredetileg az [u
k−1
, u
n+1
][v
l−1
, v
m+1
] t´eglalap, t¨or¨ ottvonalak
´es NURBS g¨orb´ek felhaszn´al´ as´aval lesz˝ uk´ıtj¨ uk. Az ilyen fel¨ uletfoltokat trimmelt NURBS
foltnak nevezz¨ uk. A trimmel´es hat´ar´at a param´eters´ık egys´egn´egyzet´eben ([0, 1] [0, 1])
t¨or¨ ottvonalakb´ol ´es NURBS g¨orb´ekb˝ ol ´all´ o z´art g¨orb´ekkel adhatjuk meg. T¨obb ilyen
z´art hat´art is megadhatunk, melyek egym´asba ´agyazhat´ ok (a trimmelt ter¨ uletben is lehet
lyuk), de nem metszhetik egym´ast. A hat´arol´ o g¨orb´ek ir´any´ıtottak, ´es ´ ugy kell ˝oket
megadni, hogy a rendszer a g¨orb´et˝ ol balra l´ev˝o pontokat tekinti az ´ertelmez´esi tartom´any
pontjainak.
void gluBeginTrim (GLUnurbsObj *nobj );
void gluEndTrim (GLUnurbsObj *nobj );
Az nobj azonos´ıt´oj´ u NURBS fel¨ ulethez, annak defini´al´asa sor´an a gluBeginTrim()
´es gluEndTrim() z´ar´ojelp´ ar k¨oz¨ ott adhatunk meg z´art trimmel˝o g¨orb´eket. A trimmel˝o
g¨orbe egy ir´any´ıtott z´art hurok, mely a NURBS fel¨ ulet hat´ar´at ´ırja le. A trimmel˝o
g¨orb´eket (t¨obb is megadhat´o) a fel¨ ulet defini´al´ asakor, vagyis a gluBeginSurface(nobj);
´es gluEndSurface(nobj); k¨oz¨ott kell megadni. Egy-egy trimmel˝o g¨orbe t¨obb NURBS
g¨orb´eb˝ol (gluNurbsCurve())´es t¨or¨ ottvonalb´ol (gluPwlCurve()) is ´allhat, azonban
¨ ugyeln¨ unk kell arra, hogy egy z´art - az egyik v´egpontja essen egybe a k¨ovetkez˝o
kezd˝opontj´ aval, valamint az utols´o v´egpontja az els˝o kezd˝opontj´ aval - , ¨onmag´ at nem
metsz˝o hurkot alkossanak.
A rendszer ´altal megjelen´ıtett fel¨ ulet mindig az ir´any´ıtott trimmel˝o g¨orb´et˝ ol balra van
(a param´eters´ıkon n´ezve), az els˝odleges ´ertelmez´esi tartom´any hat´ar´ anak ir´any´ıt´asa teh´at
´oramutat´ o j´ar´ as´aval ellent´etes. Ha ebbe a fel¨ uletbe egy lyukat akarunk v´agni, akkor a
lyuk hat´ar´at az ´oramutat´ o j´ar´ as´aval megegyez˝ o ir´any´ıt´ as´ u g¨orb´evel kell le´ırni.
Egy fel¨ ulethez t¨obb trimmel˝o g¨orbe is megadhat´o, de ezek nem metszhetik egym´ast,
´es ¨ ugyeln¨ unk kell az ir´any´ıt´asok helyes megv´alaszt´ as´ ara.
void gluPwlCurve (GLUnurbsObj *nobj, GLint count, GLfloat *array, GLint stride,
GLenum type);
Az nobj azonos´ıt´ oj´ u NURBS fel¨ ulethez egy trimmel˝o t¨or¨ottvonalat ad meg. A trim-
mel˝o t¨or¨ ottvonal cs´ ucsainak sz´ama count, ´es a cs´ ucspontok koordin´at´ ai az array c´ımen
kezd˝odnek. A type param´eter leggyakrabban GLU MAP1 TRIM 2, ami azt jelenti, hogy
123
a param´eters´ıkra illeszked˝o cs´ ucspontokat az (u, v) koordin´at´ akkal adjuk meg, de lehet
GLU MAP1 TRIM 3 is, mely esetben az (u, v, w) homog´en koordin´at´ akkal. A stride
param´eterrel az egym´ast k¨ovet˝ o cs´ ucspontoknak GLfloatokban m´ert t´avols´ag´ at kell me-
gadni.
14.3.4. Hibakezel´es
A GLU f¨ uggv´enyk¨onyvt´ ar a NURBS objektumokkal kapcsolatban 37 k¨ ul¨onb¨oz˝ o hibale-
het˝os´eget figyel. Ha regisztr´aljuk hibaf¨ uggv´eny¨ unket, akkor ´ertes¨ ulhet¨ unk az ´altalunk
elk¨ovetett hib´akr´ ol. Ezt a regisztr´aci´ ot a gluNurbsCallback() paranccsal v´egezhetj¨ uk
el.
void gluNurbsCallback (GLUnurbsObj *nobj, GLenum which, void (*fn)(GLenum
errorCode));
which a visszah´ıv´ as t´ıpusa, hibafigyel´es eset´en ´ert´eke GLU ERROR (ez a f¨ uggv´eny
m´as c´elra is haszn´alhat´ o, a which param´eter lehets´eges ´ert´ekeinek teljes list´aj´ at a 14.3.
t´abl´ azat tartalmazza). Amikor az nobj NURBS objektummal kapcsolatos f¨ uggv´enyek
v´egrehajt´asa sor´an a rendszer hib´at ´eszlel, megh´ıvja az fn f¨ uggv´enyt. Az errorCode a
GLU NURBS ERRORi (i = 1, 2, . . . , 37) ´ert´ekek valamelyike lehet, mely jelent´es´et a
gluErrorString() f¨ uggv´ennyel k´erdezhetj¨ uk le.
gluNurbsCallback(nurbs, GLU ERROR, nurbshiba); // a hibaf¨uggv´ eny
regisztr´al´ asa
void CALLBACK nurbshiba(GLenum errorCode); //a hibaf¨uggv´ eny
¦
const GLubyte *hiba;
hiba = gluErrorString(errorCode);
fprintf(stderr,’’NURBS hiba: %s¸n’’,hiba);
exit(0);
¦
14.3.5. A NURBS objektumokat k¨ozel´ıt˝o adatok visszanyer´ese
A rendszer a NURBS objektumokat t¨or¨ ottvonalakkal, illetve poligonokkal k¨ozel´ıti, ´es
ezeket jelen´ıti meg a be´all´ıtott tulajdons´agoknak megfelel˝oen. A GLU f¨ uggv´enyk¨ onyvt´ar
1.3 verzi´ oja lehet˝ov´e teszi, hogy a k¨ozel´ıt˝ o adatokat ne jelen´ıtse meg a rendszer, hanem
azokat visszaadja a felhaszn´al´ oi programnak tov´ abbi feldolgoz´asra. A k¨ovetkez˝ o l´ep´esek
sz¨ uks´egesek ennek el´er´ese ´erdek´eben:
• H´ıvjuk meg a gluNurbsProperty() f¨ uggv´enyt a property = GLU NURBS MODE,
value = GLU NURBS TESSELLATOR param´eterekkel.
• A gluNurbsCallback() f¨ uggv´eny megh´ıv´ asaival regisztr´aljuk a rendszer ´altal
megh´ıvand´o f¨ uggv´enyeket (l´asd a 14.3. t´abl´ azatot).
124
void gluNurbsCallback (GLUnurbsObj *nobj, GLenum which, void (*fn)());
nobj a NURBS objektum azonos´ıt´oja, which a regisztr´aland´ o f¨ uggv´enyt le´ır´ o, a rend-
szer ´altal defini´alt konstans a 14.3. t´abl´azat szerint. Ha a gluNurbsProperty()
f¨ uggv´enyt a property = GLU NURBS MODE, value = GLU NURBS TESSELLATOR
param´eterekkel h´ıvtuk meg el˝oz˝oleg, akkor a GLU ERROR-on k´ıv¨ ul 12 tov´abbi viss-
zah´ıvand´ o f¨ uggv´enyt regisztr´ahatunk (l´asd a 14.3. t´abl´ azatot).
A regisztr´alt f¨ uggv´enyt b´armikor kicser´elhetj¨ uk egy m´asikra a gluNurbsCallback()
´ ujabb megh´ıv´ as´aval, illetve t¨or¨ olhetj¨ uk a regisztr´aci´ ot, ha a f¨ uggv´eny nevek´ent a NULL
pointert adjuk meg. Az adatokhoz az ´altalunk regisztr´alt f¨ uggv´enyeken kereszt¨ ul jutha-
tunk hozz´a.
A visszah´ıvand´ o f¨ uggv´enyek k¨oz¨ ul hat lehet˝ov´e teszi, hogy a felhaszn´al´o adatokat adjon
´at neki.
void gluNurbsCallbackData (GLUnurbsObj *nobj void *userData);
nobj a NURBS objektum azonos´ıt´oja, userData az ´atadand´o adat c´ıme.
14.3. t´abl´azat. A gluNurbsCallback() parancs param´etereinek ´ert´ekei
a which param´eter ´ert´eke protot´ıpus
GLU NURBS BEGIN void begin(GLenum type);
GLU NURBS BEGIN DATA void beginDat(GLenum type, void
*uData);
GLU NURBS TEXTURE COORD void texCoord(GLfloat *tCoord);
GLU NURBS TEXTURE COORD DATA void texCoordDat(GLfloat *tCoord,
void *uData);
GLU NURBS COLOR void color(GLfloat *color);
GLU NURBS COLOR DATA void colorDat(GLfloat *color, void
*uData);
GLU NURBS NORMAL void normal(GLfloat *norm);
GLU NURBS NORMAL DATA void normalDat(GLfloat *norm, void
*uData);
GLU NURBS VERTEX void vertex(GLfloat *vertex);
GLU NURBS VERTEX DATA void vertexDat(GLfloat *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. G¨omb, k´ up ´es k¨orgy˝ ur˝ u rajzol´asa
A GLU f¨ uggv´enyk¨ onyvt´ ar lehet˝os´eget biztos´ıt g¨omb, forg´asi csonkak´ up, k¨orgy˝ ur˝ u ´es
k¨orgy˝ ur˝ ucikk megjelen´ıt´es´ere. A k¨onyvt´ ar k´esz´ıt˝ oi ezeket az alakzatokat ¨osszefoglal´ oan
125
m´asodrend˝ u fel¨ uletnek nevezik, ami helytelen, mivel a k¨orgy˝ ur˝ u nem m´asodrend˝ u fel¨ ulet,
a forg´ask´ up csak speci´alis esete a m´asodrend˝ u k´ upnak (r´aad´asul a rendszer ezt henger-
nek nevezi) ´es a m´asodrend˝ u fel¨ uletek t´ ulnyom´o t¨obbs´ege hi´anyzik (ellipszoid, egy- ´es
k´etk¨ openy˝ u hiperboloid, elliptikus ´es hiperbolikus paraboloid, ´altal´ anos m´asodrend˝ u k´ up
´es henger).
A NURBS fel¨ uletekhez hasonl´oan ezeket az alakzatokat is poligonh´al´ oval k¨ozel´ıti a
rendszer ´es a k¨ozel´ıt˝ o poligonh´al´ ot ´abr´ azolja. Az objektumok ´abr´ azol´as´ anak a menete is
nagym´ert´ekben hasonl´ıt a NURBS g¨orb´ek ´es fel¨ uletek megjelen´ıt´es´ehez.
• L´etre kell hoznunk egy objektumstrukt´ ur´ at a gluNewQuadric() paranccsal.
• Be´all´ıthatjuk az objektum megjelen´es´et befoly´asol´ o attrib´ utumokat, ´ıgy:
– A gluQuadricOrientation() paranccsal az ir´any´ıt´ ast adhatjuk meg, vagyis
azt, hogy mi tekintend˝ o k¨ uls˝ o, illetve bels˝o r´esznek.
– A gluQuadricDrawStyle() paranccsal azt ´ırhatjuk el˝o, hogy a k¨ozel´ıt˝ o poli-
gonh´al´ot a cs´ ucspontjaival, ´eleivel vagy kit¨olt¨ ott poligonjaival ´abr´azolja a rend-
szer.
– A gluQuadricNormal() paranccsal kiv´alaszthatjuk, hogy a norm´alisokat
minden cs´ ucspontban kisz´amolja a rendszer, vagy laponk´ent csak egyet, vagy
egy´altal´an ne sz´amoljon norm´alist.
– A gluQuadricTexture() paranccsal ´ırhatjuk el˝o a text´ urakoordin´at´ak
l´etrehoz´as´ at.
• Hibaf¨ uggv´enyt regisztr´alhatunk a gluQuadricCallback() paranccsal, vagyis azt a
f¨ uggv´enyt, amit a rendszer megh´ıv, ha hib´at ´eszlel az objektum l´etrehoz´asa vagy
´abr´ azol´asa sor´an.
• Meg kell h´ıvni az objektumot megjelen´ıt˝ o parancsot (gluSphere(), gluCylinder(),
gluDisk(), gluPartialDisk()).
• T¨or¨ olhetj¨ uk az objektumot a gluDeleteQuadric() paranccsal, amennyiben a
tov´ abbiakban m´ar nincs r´a sz¨ uks´eg¨ unk.
GLUquadricObj* gluNewQuadric (void);
Egy ´ uj GLUquadricObj t´ıpus´ u strukt´ urav´altoz´ ot hoz l´etre, ´es ennek a c´ım´et adja
vissza. Sikertelen h´ıv´as eset´en a visszaadott c´ım NULL.
void gluDeleteQuadric (GLUquadricObj *qobj );
T¨orli a qobj c´ımen t´arolt GLUquadricObj t´ıpus´ u v´altoz´ot, azaz felszabad´ıtja a
l´etrehoz´ asakor lefoglalt mem´ori´at.
void gluQuadricCallback (GLUquadricObj *qobj, GLenum which, void(*fn)());
Az itt megadott fn f¨ uggv´enyt h´ıvja meg a rendszer, ha a qobj megjelen´ıt´ese sor´an
hib´at ´eszlel. A which v´altoz´ o ´ert´eke csak GLU ERROR lehet. Ha a megh´ıvand´ o f¨ uggv´eny
126
c´ımek´ent a NULL c´ımet adjuk ´at, akkor a rendszer ezen objektummal kapcsolatos hiba
eset´en nem fog semmit megh´ıvni. A felhaszn´al´oi program az fn f¨ uggv´eny param´eter´eben
kapja vissza a hiba k´odj´ at, melynek sz¨oveges le´ır´as´ at ezen k´oddal megh´ıvott gluError-
String() f¨ uggv´ennyel kapjuk meg (l´asd m´eg a 14.3.4. pontot).
void gluQuadricDrawStyle (GLUquadricObj *qobj, GLenum drawStyle);
A qobj objektum ´abr´ azol´ as´anak m´odj´ at ´all´ıtja be. drawStyle lehets´eges ´ert´ekei:
• GLU POINT, az objektumot a k¨ozel´ıt˝ o poligonh´al´o cs´ ucspontjaival ´abr´azolja.
• GLU LINE, az objektumot a k¨ozel´ıt˝ o poligonh´al´o ´eleivel ´abr´azolja.
• GLU SILHOUETTE, az objektumot a k¨ozel´ıt˝ o poligonh´al´ o ´eleivel ´abr´ azolja, de a
komplan´ aris, k¨oz¨os oldallal b´ır´ o poligonoknak a k¨oz¨ os oldalait nem rajzolja meg
(ennek az opci´onak pl. a k´ upok ´es hengerek alkot´ oinak megrajzol´asakor van je-
lent˝ os´ege).
• GLU FILL, az objektumot a k¨ozel´ıt˝ o poligonh´al´ o kit¨olt¨ ott poligonjaival ´abr´azolja.
A poligonokat a norm´alisukhoz k´epest pozit´ıv (az ´oramutat´ o j´ar´ as´aval ellent´etes)
ir´any´ıt´ as´ unak tekinti.
void gluQuadricOrientation (GLUquadricObj *qobj, GLenum orientation);
A qobj objektum norm´alisainak ir´any´ıt´as´ at hat´arozza meg. Az orientation pa-
ram´eter lehets´eges ´ert´ekei GLU OUTSIDE, illetve GLU INSIDE, melyek kifel´e, il-
letve befel´e mutat´ o norm´alisokat eredm´enyeznek. Ezek ´ertelmez´ese g¨omb ´es forg´ask´ up
eset´en ´ertelemszer˝ u, k¨orgy˝ ur˝ u eset´en a kifel´e ir´any a lap z tengely´enek pozit´ıv fele.
Alap´ertelmez´es: GLU OUTSIDE.
void gluQuadricNormals (GLUquadricObj *qobj, GLenum normals);
A qobj objektum norm´alisainak kisz´am´ıt´asi m´odj´at hat´arozza meg. A normals pa-
ram´eter lehets´eges ´ert´ekei:
• GLU NONE, a rendszer nem hoz l´etre norm´alisokat. Ez csak akkor aj´anlott, ha a
megvil´ag´ıt´as nem enged´elyezett.
• GLU FLAT, laponk´ent csak egy norm´alist hoz l´etre a rendszer, ami konstans
´arnyal´ashoz (l´asd a 4. fejezetet) aj´anlott.
• GLU SMOOTH, minden cs´ ucsponthoz k¨ ul¨ on norm´alist hoz l´etre, ami folytonos
´arnyal´as (l´asd a 4. fejezetet) eset´en aj´anlott.
Alap´ertelmez´es: GLU NONE.
127
void gluQuadricTexture (GLUquadricObj *qobj, GLboolean textureCoords);
A qobj objektumhoz a textureCoords param´eter ´ert´ek´enek megfelel˝oen
text´ urakoordin´at´akat is l´etrehoz (GL TRUE), vagy nem hoz l´etre (GLU FALSE).
Alap´ertelmez´es: GLU FALSE. A text´ uralek´epez´es m´odja az objektum t´ıpus´at´ ol f¨ ugg.
void gluSphere (GLUquadricObj *qobj, GLdouble radius, GLint slices, GLint stacks);
Megjelen´ıti a qobj azonos´ıt´ oj´ u, orig´o k¨oz´eppont´ u, radius sugar´ u g¨omb¨ot. A
k¨ozel´ıt´eshez a rendszer a z tengelyre mer˝olegesen slices darab s´ıkkal metszi a g¨omb¨ot
(sz´eless´egi k¨or¨ ok), tov´ abb´a stacks darab z tengelyre illeszked˝ o s´ıkkal (hossz´ us´ agi k¨or¨ ok). A
text´ ura lek´epez´ese a k¨ovetkez˝ o: a text´ ura t koordin´at´ aj´at line´arisan k´epezi le a hossz´ us´ agi
k¨or¨ okre az al´abbiak szerint t = 0 → z = −radius, t = 1 → z = radius; az s koor-
din´at´ akat pedig a sz´eless´egi k¨or¨ okre a k¨ovetkez˝o megfeleltet´es 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 magass´agban l´ev˝ o sz´eless´egi k¨or sugara.
void gluCylinder (GLUquadricObj *qobj, GLdouble baseRadius, GLdouble topRadius,
GLdouble height, GLint slices, GLint stacks);
Azt a qobj azonos´ıt´oj´ u z tengely˝ u forg´asi csonkak´ upot ´abr´azolja, melynek alapk¨ore a
z = 0, fed˝ok¨ore a z = height magass´agban van. A k¨ozel´ıt´eshez a rendszer slices darab
z tengelyre mer˝oleges k¨ort ´es stacks darab alkot´ ot vesz fel. Az alapk¨or sugara baseRa-
dius, a fed˝ok¨or sugara pedig topRadius. baseRadius = 0 eset´en forg´ask´ up fel¨ uletet ka-
punk, topRadius = baseRadius eset´en pedig forg´ashengert. A rendszer csak a csonkak´ up
pal´astj´ at ´abr´ azolja, az alap ´es fed˝ok¨ ort nem. A text´ ura lek´epez´ese a k¨ovetkez˝ o: a text´ ura
t koordin´at´ aj´ at line´arisan k´epezi le az alkot´okra ´ ugy, hogy a megfeleltet´es t = 0 → z = 0,
t = 1 → z = height legyen. Az s koordin´at´ ak lek´epez´ese megegyezik a g¨ombn´el le´ırtakkal.
void gluDisk (GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius,
GLint slices, GLint rings);
A qobj azonos´ıt´oj´ u k¨orgy˝ ur˝ ut ´abr´ azolja a z = 0 s´ıkon. A k¨orgy˝ ur˝ u k¨ uls˝o sugara
outerRadius, bels˝o sugara pedig innerRadius. innerRadius = 0 eset´en teljes k¨orlap
j¨on l´etre. A k¨ozel´ıt´eshez a rendszer slices darab k¨orcikkre ´es rings darab koncentrikus
k¨orgy˝ ur˝ ure osztja az alakzatot. A norm´alisok ir´any´ıt´ asakor a z tengely pozit´ıv fel´et te-
kinti kifel´e ir´anynak, ami a gluQuadricOrientation() paranccsal megv´altoztathat´o. A
text´ ura lek´epez´es´et line´arisan v´egzi el a k¨ovetkez˝ o megfeleltet´es 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 azonos´ıt´oj´ u k¨orgy˝ ur˝ ucikket ´abr´ azolja. A k¨orgy˝ ur˝ ucikk a z = 0 s´ıkon j¨on
l´etre, k¨ uls˝ o sugara outerRadius, bels˝o sugara innerRadius, a cikk kezd˝ osz¨oge az y tengely
128
pozit´ıv fel´et˝ol m´ert startAngle, k¨oz´epponti sz¨oge sweepAngle. A sz¨ogeket fokban kell
megadni. innerRadius = 0 eset´en k¨orcikket kapunk. A norm´alisok ir´any´ıt´asa ´es a text´ ura
lek´epez´ese megegyezik a k¨orgy˝ ur˝ un´el le´ırtakkal.
129
15. fejezet
A gluj f¨ uggv´enyk¨onyvt´ar
A GLUJ f¨ uggv´enyk¨onyvt´ ar az OpenGL g¨orbe- ´es fel¨ uletmegjelen´ıt˝ o k´epess´eg´enek
kieg´esz´ıt´es´ere k´esz¨ ult. Haszn´alat´ahoz inklud´alni kell a gluj.h f´ajlt, valamint a program-
hoz kell szerkeszteni a gluj32.lib k¨onyvt´arat. A mell´ekelt v´altozat a Visual C/C++ 6.0
rendszerhez k´esz´ıtett¨ uk.
15.1. G¨orb´eket ´es fel¨ uleteket megjelen´ıt˝o f¨ uggv´enyek
Haszn´alatuk gyakorlatilag megegyezik a GLU f¨ uggv´enyk¨onyvt´ ar NURBS g¨orb´et, illetve
fel¨ uletet megjelen´ıt˝ o f¨ uggv´enyeinek haszn´alat´aval, teh´at a gluNewNurbsRenderer()
f¨ uggv´ennyel l´etre kell hozni egy NURBS objektum strukt´ ur´at, mely ut´an ennek a tu-
lajdons´agai a gluNurbsProperty() f¨ uggv´ennyel be´all´ıthat´ ok (a tulajdons´agok k¨oz¨ ul
a k¨ozel´ıt´es pontoss´ ag´ at - GLU SAMPLING TOLERANCE - veszik figyelembe a GLUJ
f¨ uggv´enyek), majd g¨orb´ek eset´en a gluBeginCurve(), gluEndCurve(), fel¨ uletekn´el pe-
dig a gluBeginSurface(), gluNurbsSurface() f¨ uggv´enyek k¨oz¨ ott megh´ıvhatjuk a meg-
felel˝o g¨orbe-, illetve fel¨ uletrajzol´o gluj f¨ uggv´enyt.
15.1.1. G¨orb´ek rajzol´asa
void glujBezierCurve (GLUnurbsObj *nobj, GLint cp count, GLint stride, GLfloat
*ctrlarray, GLenum type);
Az nobj azonos´ıt´oj´ u B´ezier-g¨ orb´et rajzolja meg.
cp count a kontrollpontok sz´ama,
stride az egym´ast k¨ovet˝o kontrollpontok GLfloatban m´ert t´avols´aga,
*ctrlarray az els˝o kontrollpont c´ıme,
type param´eter lehets´eges ´ert´ekei: GL MAP1 VERTEX 3 nem racion´alis B´ezier-
g¨orbe eset´en (a pontok h´arom, vagyis Descartes-f´ele koordin´at´aval adottak),
GL MAP1 VERTEX 4 racion´alis B´ezier-g¨ orbe eset´en (a pontok n´egy, azaz homog´en ko-
ordin´at´ aval adottak).
130
void glujHermiteSpline (GLUnurbsObj *hs, GLint cp count, GLint cp stride,
GLfloat *cp, GLenum type, GLint tg stride, GLfloat *tg);
A hs azonos´ıt´oj´ u Hermite-spline g¨orb´et rajzolja meg.
cp stride az egym´ast k¨ovet˝ o pontok GLfloatban m´ert t´avols´ aga,
*cp az els˝o pont c´ıme,
type param´eter lehets´eges ´ert´ekei: GL MAP1 VERTEX 3 ha a pontok h´arom, vagyis
Descartes-f´ele koordin´at´ aval adottak, GL MAP1 VERTEX 4 ha a pontok n´egy, azaz ho-
mog´en koordin´at´ aval adottak,
tg stride az egym´ast k¨ovet˝ o ´erint˝ ovektorok GLfloatban m´ert t´avols´ aga,
*tg az els˝o ´erint˝ ovektor c´ıme.
void glujCircle (GLUnurbsObj *nobj, GLint stride, GLfloat *points, GLfloat radius,
GLenum type);
Az nobj azonos´ıt´oj´ u k¨ort rajzolja meg.
stride az egym´ast k¨ovet˝o pontok GLfloatban m´ert t´avols´ aga,
*points a k¨or k¨oz´eppontj´ at ´es s´ıkj´ anak norm´alis´ at tartalmaz´o vektor c´ıme,
radius a k¨or sugara,
type param´eter lehets´eges ´ert´ekei: GL MAP1 VERTEX 3 ha a pontok h´arom, vagyis
Descartes-f´ele koordin´at´ aval adottak, GL MAP1 VERTEX 4 ha a pontok n´egy, azaz ho-
mog´en koordin´at´ aval adottak.
void glujTrimmedNurbsCurve (GLUnurbsObj *nobj, GLint knot count, GLfloat
*knot, GLint stride, GLfloat *ctrlarray, GLint order, GLenum type, GLfloat u min,
GLfloat u max);
Az [u min, u max] ´es [knot[order −1], knot[knot count −order]] intervallumok met-
szet´et veszi ´es az nobj azonos´ıt´ oj´ u NURBS g¨orb´enek ezen intervallum f¨ol¨ otti darabj´at
jelen´ıti meg.
knot count a csom´o´ert´ekek sz´ama (knot count = order + a kontrollpontok sz´ama),
*knot az els˝o csom´o´ert´ek c´ıme,
stride a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban m´erve,
*ctrlarray a kontrollpoligon els˝o pontj´ anak a c´ıme,
order a g¨orbe rendje,
type param´eter lehets´eges ´ert´ekei: GL MAP1 VERTEX 3 nem racion´alis B-
spline g¨orbe eset´en (a pontok h´arom, vagyis Descartes-f´ele koordin´at´ aval adottak),
GL MAP1 VERTEX 4 racion´alis B-spline g¨orbe eset´en (a pontok n´egy, azaz homog´en
koordin´at´ aval adottak).
void glujParamCurve (void (*fn)(float, float *), GLenum mode, GLint ufixed count,
GLfloat *u fixed, GLfloat u min, GLfloat u max);
Az fn f¨ uggv´ennyel le´ırt param´eteres g¨orb´enek az [u min, u max] intervallum f¨ol¨ otti
r´esz´et ´abr´azolja t¨or¨ottvonallal vagy pontjaival.
fn a g¨orbe egy pontj´at kisz´am´ıt´ o f¨ uggv´eny. A f¨ uggv´eny protot´ıpusa:
131
void fn(float u, float p[3] );
mely a g¨orbe u param´eter˝ u pontj´ at kisz´am´ıtja ´es a p vektorban visszaadja.
mode a megjelen´ıt´es m´odj´ at ´ırja el˝o, lehets´eges ´ert´ekei:
GLUJ LINES a g¨orb´et ufixed count ≥ 0 sz´am´ u r¨ogz´ıtett u ´ert´ekhez tar-
toz´o g¨orbepontot ¨osszek¨ ot˝o t¨or¨ottvonallal jelen´ıti meg. *u fixed a r¨ogz´ıtett u ´ert´ekeket
tartalmaz´o vektor c´ıme. Ha ufixed count > 1 ´es ∗u fixed = NULL, akkor a pa-
ram´etertartom´ anyban egym´ast´ol egyenl˝ o t´avols´agra l´ev˝ o ufixed count darab u ´ert´eket
r¨ogz´ıt a f¨ uggv´eny, ´es az ezekhez tartoz´o pontokat ¨osszek¨ot˝ o t¨or¨ ottvonalat ´abr´ azolja.
GLUJ POINT MESH a g¨orb´et az adott u ´ert´ekekhez tartoz´o pontokkal
´abr´ azolja. A ufixed count, *u fixed param´eterekre a GLUJ LINES -n´al le´ırtak ´erv´enyesek.
P´eld´aul az x (u) = 1/ cosh (u) , y (u) = u − tanh (u) koordin´ataf¨ uggv´enyekkel adott
traktrixot a
void traktrix(float u,float p[3])
¦
p[0] = 1./cosh(u);
p[1] = u - tanh(u);
p[2] = 0.;
¦
f¨ uggv´ennyel ´ırjuk le. A
glujParamCurve(traktrix,GLUJ POINT MESH,20,NULL,-4.0,4.);
f¨ uggv´enyh´ıv´ as eredm´enye a 15.1./a ´abra, a
glujParamCurve(traktrix,GLUJ LINES,100,NULL,-4.0,4.);
h´ıv´ as´e pedig a 15.1./b ´abra.
15.1. ´abra. A glujParamCurve( ) f¨ uggv´ennyel ´abr´azolt g¨orb´ek
132
15.1.2. Fel¨ uletek szeml´eltet´ese
void glujNurbsSurface (GLUnurbsObj *nobj, GLint uknot count, GLfloat *uknot,
GLint vknot count, GLfloat *vknot, GLint u stride, GLint v stride, GLfloat *ctrlar-
ray, GLint uorder, GLint vorder, GLenum type, GLenum mode, GLint ufixed count,
GLfloat *u fixed, GLint vfixed count, GLfloat *v fixed, GLfloat u min, GLfloat
u max, GLfloat v min, GLfloat v max, GLfloat fl, int ud, int vd);
Az nobj azonos´ıt´ oj´ u NURBS fel¨ ulet kontrollpontjait, kontrollpoligonj´at,
vagy a ([u min, u max] ∩ [uknt[uorder −1], uknt[uknot count −uorder]])
([v min, v max] ∩ [vknt[vorder −1], vknt[vknot count −vorder]]) tartom´any f¨ol¨otti
param´etervonalait, pontjait, vagy norm´alisait jelen´ıti meg.
uknot count az u param´eter csom´o´ert´ekeinek sz´ama (uknot count = uorder + az u
ir´any´ u kontrollpontok sz´ama),
*uknot az els˝o u ir´any´ u csom´o´ert´ek c´ıme,
vknot count az v param´eter csom´o´ert´ekeinek sz´ama (vknot count = vorder + az v
ir´any´ u kontrollpontok sz´ama),
*vknot az els˝o v ir´any´ u csom´o´ert´ek c´ıme,
u stride u ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
v stride v ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
*ctrlarray a kontrollh´al´ o els˝o pontj´anak a c´ıme,
uorder a fel¨ ulet u ir´any´ u rendje,
vorder a fel¨ ulet v ir´any´ u rendje,
type param´eter lehets´eges ´ert´ekei: GL MAP2 VERTEX 3 nem racion´alis B-
spline fel¨ ulet eset´en (a pontok h´arom, vagyis Descartes-f´ele koordin´at´ aval adottak),
GL MAP2 VERTEX 4 racion´alis B-spline fel¨ ulet eset´en (a pontok n´egy, azaz homog´en
koordin´at´ aval adottak),
mode a megjelen´ıt´es m´odj´ at ´ırja el˝o, lehets´eges ´ert´ekei:
GLUJ CONTROL POLYGON MESH a kontrollh´ al´ ot rajzolja meg,
GLUJ CONTROL POINT MESH a kontrollpontokat jelen´ıti meg,
GLUJ ISO LINES a fel¨ uletet param´etervonalaival ´abr´azolja, m´egpedig az
ufixed count ≥ 0 sz´am´ u r¨ogz´ıtett u ´ert´ekhez tartoz´o v ir´any´ u, ´es a vfixed count ≥ 0
sz´am´ u r¨ogz´ıtett v ´ert´ekhez tartoz´o u ir´any´ u param´etervonallal. *u fixed a r¨ogz´ıtett u
´ert´ekeket tartalmaz´o vektor c´ıme, *v fixed a r¨ogz´ıtett v ´ert´ekeket tartalmaz´o vektor´e.
Ha ufixed count > 1 ´es ∗u fixed = NULL, akkor a param´etertartom´ anyban egym´ast´ ol
egyenl˝o t´avols´ agra l´ev˝ o ufixed count darab u ´ert´eket r¨ogz´ıt a f¨ uggv´eny ´es az ezekhez
tartoz´o v ir´any´ u param´etervonalakat jelen´ıti meg. A vfixed count ´es *v fixed param´eterek
haszn´alata ezzel anal´og.
GLUJ ISO LINES WITH OFFSET a fel¨ uletet param´etervonalaival ekvi-
diszt´ans (att´ol adott t´avols´ agra l´ev˝ o) g¨orb´ekkel ´abr´ azolja. Az ufixed count, vfixed count,
*u fixed ´es *v fixed param´eterek jelent´ese megegyezik a GLUJ ISO LINES m´odn´ al
le´ırtakkal. u ir´any´ u param´etervonalak eset´en az ´ertelmez´esi tartom´anyt ud egyenl˝ o r´eszre
osztja, az ezekhez tartoz´o fel¨ uleti pontokat a pontbeli norm´alis ment´en fl m´ert´ekben el-
133
tolja ´es ezeket a pontokat k¨oti ¨ossze egyenes szakaszokkal. A v ir´any´ u param´etervonalak
l´etrehoz´ asa ezzel anal´og.
GLUJ POINT MESH a fel¨ uletet a megadott u ´es v ´ert´ekekhez tartoz´o
pontokkal ´abr´azolja. Az ufixed count, *u fixed, vfixed count, *v fixed param´eterekre a
GLUJ ISO LINES -n´al le´ırtak ´erv´enyesek.
GLUJ NORMAL MESH a fel¨ uletnek a megadott u ´es v ´ert´ekekhez tartoz´o
norm´alisait ´abr´azolja. Az ufixed count, *u fixed, vfixed count, *v fixed param´eterekre a
GLUJ ISO LINES -n´al le´ırtak ´erv´enyesek. A norm´alvektorok hossz´at ´es ir´any´ıt´as´ at az fl
param´eter befoly´asolja: fl = 0 eset´en a norm´alvektorok hossza ´es ir´any´ıt´ asa a kisz´am´ıtott
lesz, egy´ebk´ent a normaliz´alt norm´alvektor fl-szerese.
15.2. ´abra. A fel¨ ulet kontrollh´ al´oja ´es kontrollpontjai
A 15.2. - 15.6. ´abr´ak ugyanannak a fel¨ uletnek a glujNurbsSurface() f¨ uggv´ennyel
el´erhet˝ o n´eh´ any szeml´eltet´esi m´odj´ at demonstr´alj´ ak. A 15.2. ´abr´an a fel¨ ulet kon-
trollh´al´ oj´at ´es a kontrollpontjait l´athatjuk. Ehhez a glujNurbsSurface() f¨ uggv´enyt
k´etszer kell megh´ıvni: egyszer a GLUJ CONTROL POLYGON MESH, egyszer a
GLUJ CONTROL POINT MESH param´eterrel. A 15.3. ´abr´an a kit¨olt¨ott poligonokkal
´abr´ azolt megvil´ag´ıtott fel¨ uletet l´athatjuk (ezt a gluNurbsSurface() f¨ uggv´ennyel rajzol-
tuk), valamint fel¨ uleti pontokat ´es ezekben az egys´egnyi hossz´ us´ ag´ u norm´alvektorokat.
Az ut´obbiakat a glujNurbsSurface() f¨ uggv´enynek a GLUJ POINT MESH, illetve
GLUJ NORMAL MESH param´eterekkel val´o megh´ıv´as´ aval hoztuk l´etre. A 15.4. ´abra
param´etervonalaival szeml´elteti a fel¨ uletet (GLUJ ISO LINES opci´o). A 15.5. ´es a 15.6.
´abra azt demonstr´alja, hogy mi´ert van sz¨ uks´eg a param´etervonallal ekvidiszt´ans g¨orb´ekre
(GLUJ ISO LINES WITH OFFSET opci´o). A 15.5. ´abr´ an a fel¨ ulet ´arnyalt k´ep´et l´atjuk,
amire folytonos vonallal r´arajzoltuk a param´etervonalakat. A k´epen a param´etervonalak
nem folytonosak, szinte v´eletlenszer˝ uen hol a fel¨ ulet, hol a param´etervonal l´atszik a meg-
felel˝o pixeleken. Ez´ert csal´ashoz folyamodunk, a param´etervonalak helyett a vel¨ uk ekvi-
134
diszt´ans g¨orb´eket rajzoljuk meg, l´asd a 15.6. ´abr´ at. M´ar nagyon csek´ely eltol´as - ´abr´ankon
ez 0.016 egys´eg - is elegend˝o a k´ıv´ant hat´as el´er´ese ´erdek´eben.
135
15.3. ´abra. A megvil´ag´ıtott fel¨ ulet, n´eh´any fel¨ uleti pont ´es azokban a fel¨ uleti norm´alis
15.4. ´abra. A fel¨ ulet n´eh´any param´etervonala
136
15.5. ´abra. A fel¨ ulet param´etervonalakkal
15.6. ´abra. A fel¨ ulet ´es a param´etervonalaival ekvidiszt´ans g¨orb´ek
137
void glujBezierSurface (GLUnurbsObj *nobj, GLint ucp count, GLint vcp count,
GLint u stride, GLint v stride, GLfloat *ctrlarray, GLenum type, GLenum mode,
GLint ufixed count, GLfloat *u fixed, GLint vfixed count, GLfloat *v fixed, GLfloat
u min, GLfloat u max, GLfloat v min, GLfloat v max, GLfloat fl, int ud, int vd);
Az nobj azonos´ıt´ oj´ u B´ezier-fel¨ ulet kontrollpontjait, kontrollpoligonj´at, vagy a
fel¨ uletet k¨ozel´ıt˝o kit¨olt¨ ott poligonokat, azok hat´ar´at, a fel¨ ulet hat´arol´o g¨orb´eit je-
len´ıti 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]]) tartom´any f¨ol¨otti pa-
ram´etervonalait, pontjait, vagy norm´alisait ´abr´ azolja.
ucp count az u ir´any´ u kontrollpontok sz´ama,
vcp count a v ir´any´ u kontrollpontok sz´ama,
u stride u ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
v stride v ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
*ctrlarray a kontrollh´al´ o els˝o pontj´anak a c´ıme,
type param´eter lehets´eges ´ert´ekei: GL MAP2 VERTEX 3 nem racion´alis B-
spline fel¨ ulet eset´en (a pontok h´arom, vagyis Descartes-f´ele koordin´at´ aval adottak),
GL MAP2 VERTEX 4 racion´alis B-spline fel¨ ulet eset´en (a pontok n´egy, azaz homog´en
koordin´at´ aval adottak),
mode a megjelen´ıt´es m´odj´ at ´ırja el˝o, lehets´eges ´ert´ekei:
GLUJ CONTROL POLYGON MESH a kontrollh´ al´ ot rajzolja meg,
GLUJ CONTROL POINT MESH a kontrollpontokat jelen´ıti meg,
GLUJ ISO LINES a fel¨ uletet param´etervonalaival ´abr´azolja, m´egpedig az
ufixed count ≥ 0 sz´am´ u r¨ogz´ıtett u ´ert´ekhez tartoz´o v ir´any´ u, ´es a vfixed count ≥ 0
sz´am´ u r¨ogz´ıtett v ´ert´ekhez tartoz´o u ir´any´ u param´etervonallal. *u fixed a r¨ogz´ıtett u
´ert´ekeket tartalmaz´o vektor c´ıme, *v fixed a r¨ogz´ıtett v ´ert´ekeket tartalmaz´o vektor´e.
Ha ufixed count > 1 ´es ∗u fixed = NULL, akkor a param´etertartom´ anyban egym´ast´ ol
egyenl˝o t´avols´ agra l´ev˝ o ufixed count darab u ´ert´eket r¨ogz´ıt a f¨ uggv´eny ´es az ezekhez
tartoz´o v ir´any´ u param´etervonalakat jelen´ıti meg. A vfixed count ´es *v fixed param´eterek
haszn´alata ezzel anal´og.
GLUJ ISO LINES WITH OFFSET a fel¨ uletet param´etervonalaival
´abr´ azolja, m´egpedig ´ ugy, hogy a param´etervonalat a fel¨ uletre mer˝olegesen eltolja.
Az ufixed count, vfixed count, *u fixed ´es *v fixed param´eterek jelent´ese megegyezik a
GLUJ ISO LINES m´odn´al le´ırtakkal. u ir´any´ u param´etervonalak eset´en az ´ertelmez´esi
tartom´anyt ud egyenl˝o r´eszre osztja, az ezekhez tartoz´o fel¨ uleti pontokat a pontbeli
norm´alis ment´en fl m´ert´ekben eltolja ´es ezeket a pontokat k¨oti ¨ossze egyenes szakaszokkal.
A v ir´any´ u param´etervonalak l´etrehoz´ asa ezzel anal´og.
GLUJ POINT MESH a fel¨ uletet a megadott u ´es v ´ert´ekekhez tartoz´o
pontokkal ´abr´azolja. Az ufixed count, *u fixed, vfixed count, *v fixed param´eterekre a
GLUJ ISO LINES -n´al le´ırtak ´erv´enyesek.
GLUJ NORMAL MESH a fel¨ uletnek a megadott u ´es v ´ert´ekekhez tartoz´o
norm´alisait ´abr´azolja. Az ufixed count, *u fixed, vfixed count, *v fixed param´eterekre a
GLUJ ISO LINES -n´al le´ırtak ´erv´enyesek. A norm´alvektorok hossz´at ´es ir´any´ıt´as´ at az fl
param´eter befoly´asolja: fl = 0 eset´en a norm´alvektorok hossza ´es ir´any´ıt´ asa a kisz´am´ıtott
138
lesz, egy´ebk´ent a normaliz´alt norm´alvektor fl-szerese,
GLU FILL a fel¨ uletet k¨ozel´ıt˝o kit¨olt¨ ott poligonokat jelen´ıti meg (mint a
NURBS fel¨ uletek eset´en),
GLU OUTLINE POLYGON a fel¨ uletet k¨ozel´ıt˝o poligonok ´eleit jelen´ıti meg
(mint a NURBS fel¨ uletek eset´en),
GLU OUTLINE PATCH a fel¨ ulet hat´arol´ o g¨orb´eit jelen´ıti meg (mint a
NURBS fel¨ uletek eset´en).
void glujParamSurface (void (*fn)(float, float, float *), GLenum mode, GLint ufi-
xed count, GLfloat *u fixed, GLint vfixed count, GLfloat *v fixed, GLfloat u min,
GLfloat u max, GLfloat v min, GLfloat v max, int ud, int vd);
Az fn f¨ uggv´ennyel le´ırt param´eteres fel¨ uletnek az [u min, u max] [v min, v max]
tartom´any f¨ol¨otti r´esz´et ´abr´ azolja param´etervonalaival, pontjaival, h´aromsz¨ogh´ al´oval,
vagy kit¨olt¨ ott h´aromsz¨ogekkel.
fn a fel¨ ulet egy pontj´ at kisz´am´ıt´ o f¨ uggv´eny. A f¨ uggv´eny protot´ıpusa:
void fn(float u, float v, float p[3] );
mely a fel¨ ulet (u, v) param´eter˝ u pontj´at kisz´am´ıtja ´es a p vektorban visszaadja.
mode a megjelen´ıt´es m´odj´ at ´ırja el˝o, lehets´eges ´ert´ekei:
GLUJ ISO LINES a fel¨ uletet param´etervonalaival ´abr´azolja, m´egpedig az
ufixed count ≥ 0 sz´am´ u r¨ogz´ıtett u ´ert´ekhez tartoz´o v ir´any´ u, ´es a vfixed count ≥ 0,
sz´am´ u r¨ogz´ıtett v ´ert´ekhez tartoz´o u ir´any´ u param´etervonallal. *u fixed a r¨ogz´ıtett u
´ert´ekeket tartalmaz´o vektor c´ıme, *v fixed a r¨ogz´ıtett v ´ert´ekeket tartalmaz´o vektor´e.
Ha ufixed count > 1 ´es ∗u fixed = NULL, akkor a param´etertartom´ anyban egym´ast´ ol
egyenl˝o t´avols´ agra l´ev˝ o ufixed count darab u ´ert´eket r¨ogz´ıt a f¨ uggv´eny ´es az ezekhez
tartoz´o v ir´any´ u param´etervonalakat jelen´ıti meg. A megjelen´ıt´eshez a param´etervonal
´ertelmez´esi tartom´any´ at vd-1 egyenl˝ o r´eszre osztja, ´es az ezekhez tartoz´o g¨orbepontokat
egyenes szakaszokkal k¨oti ¨ossze. A vfixed count, *v fixed ´es ud param´eter haszn´alata ezzel
anal´og.
GLUJ POINT MESH a fel¨ uletet a megadott u ´es v ´ert´ekekhez tartoz´o pon-
tokkal ´abr´ azolja. A ufixed count, *u fixed, ud, vfixed count, *v fixed, vd param´eterekre a
GLUJ ISO LINES -n´al le´ırtak ´erv´enyesek.
GLUJ TESS POLYGON a fel¨ uletet k¨ozel´ıt˝ o h´aromsz¨ ogh´al´ oval ´abr´ azolja,
melyet ´ ugy ´all´ıt el˝o, hogy a param´etertartom´anyt u ir´anyban ud, v ir´anyban vd egyenl˝o
r´eszre osztja.
GLUJ FILL POLYGON a fel¨ uletet k¨ozel´ıt˝ o kit¨olt¨ ott h´aromsz¨ ogh´ al´oval
´abr´ azolja. A h´aromsz¨ogh´ al´ o el˝o´all´ıt´asa a GLUJ TESS POLYGON opci´on´ al le´ırt m´odon
t¨ort´enik.
15.2. Pontok, ´erint˝ok, norm´alvektorok
Az itt ismertetend˝o f¨ uggv´enyek nem rajzolnak, csak g¨orb´ekre ´es fel¨ uletekre illeszked˝o pon-
tokat, g¨orb´ek ´erint˝ oj´et, valamint fel¨ uletek norm´alvektor´at sz´am´ıtj´ ak ki. Ezek a f¨ uggv´enyek
139
teh´at ink´abb a geometriai modellez´eshez tartoznak, tapasztalatunk szerint azonban sok
esetben sz¨ uks´eg van r´ajuk az ig´enyesebb szeml´eltet´es sor´an is.
int glujPointOnNurbsCurve (GLint uknot count, GLfloat *uknot, GLint u stride,
GLfloat *ctrlarray, GLint uorder, GLfloat u, GLfloat *pt, int ncoord);
NURBS g¨orbe adott param´eter´ert´ekhez tartoz´o pontj´anak koordin´at´ait sz´am´ıtja ki.
uknot count a csom´o´ert´ekek sz´ama (uknot count = uorder + a kontrollpontok sz´ama),
*uknot az els˝o csom´o´ert´ek c´ıme,
u stride a szomsz´edos kontrollpontok adatainak t´avols´aga GLfloat-okban m´erve,
*ctrlarray a kontrollpoligon els˝o pontj´ anak a c´ıme,
uorder a g¨orbe rendje,
u a kisz´am´ıtand´ o ponthoz tartoz´o param´eter´ert´ek,
*pt ebben a vektorban adja vissza a kisz´am´ıtott pont koordin´at´ait,
ncoord a kontrollpontok koordin´at´ainak sz´ama: 3, ha a pontok Descartes-f´ele koor-
din´at´ aval adottak; 4, ha homog´en koordin´at´ aval.
A visszaadott ´ert´ek negat´ıv, ha a pont kisz´am´ıt´ asa meghi´ usult, egy´ebk´ent 0.
int glujPointOnBezierCurve (GLint cp count, GLint u stride, GLfloat *ctrlarray,
GLfloat u, GLfloat *pt, int ncoord);
B´ezier-g¨orbe adott param´eter´ert´ekhez tartoz´o pontj´anak koordin´at´ait sz´am´ıtja ki.
cp count a kontrollpontok sz´ama,
u stride a szomsz´edos kontrollpontok adatainak t´avols´aga GLfloat-okban m´erve,
*ctrlarray a kontrollpoligon els˝o pontj´ anak a c´ıme,
u a kisz´am´ıtand´ o ponthoz tartoz´o param´eter´ert´ek,
*pt ebben a vektorban adja vissza a kisz´am´ıtott pont koordin´at´ait,
ncoord a kontrollpontok koordin´at´ainak sz´ama: 3, ha a pontok Descartes-f´ele koor-
din´at´ aval adottak; 4, ha homog´en koordin´at´ aval.
A visszaadott ´ert´ek negat´ıv, ha a pont kisz´am´ıt´ asa meghi´ usult, egy´ebk´ent 0.
int glujDerBsplineCurve (GLint uknot count, GLfloat *uknot, GLint u stride,
GLfloat *ctrlarray, GLint uorder, GLfloat u,GLfloat *p, int ncoord);
B-spline g¨orbe deriv´altj´ at (´erint˝ ovektor´ at) sz´am´ıtja ki az adott pontban.
uknot count a csom´o´ert´ekek sz´ama (uknot count = uorder + a kontrollpontok sz´ama),
*uknot az els˝o csom´o´ert´ek c´ıme,
u stride a szomsz´edos kontrollpontok adatainak t´avols´aga GLfloat-okban m´erve,
*ctrlarray a kontrollpoligon els˝o pontj´ anak a c´ıme,
uorder a g¨orbe rendje,
u az a param´eter´ert´ek, ahol a deriv´altat ki kell sz´am´ıtani,
*p ebben a vektorban adja vissza a kisz´am´ıtott deriv´alt koordin´at´ ait,
ncoord a kontrollpontok koordin´at´ainak sz´ama: 2 vagy 3.
A visszaadott ´ert´ek negat´ıv, ha a pont kisz´am´ıt´ asa meghi´ usult, egy´ebk´ent 0.
140
int glujDerNurbsCurve (GLint uknot count, GLfloat *uknot, GLint u stride, GLfloat
*ctrlarray, GLint uorder, GLfloat u,GLfloat *p, int ncoord);
NURBS g¨orbe deriv´altj´ at (´erint˝ ovektor´ at) sz´am´ıtja ki az adott pontban.
uknot count a csom´o´ert´ekek sz´ama (uknot count = uorder + a kontrollpontok sz´ama),
*uknot az els˝o csom´o´ert´ek c´ıme,
u stride a szomsz´edos kontrollpontok adatainak t´avols´aga GLfloat-okban m´erve,
*ctrlarray a kontrollpoligon els˝o pontj´ anak a c´ıme,
uorder a g¨orbe rendje,
u az a param´eter´ert´ek, ahol a deriv´altat ki kell sz´am´ıtani,
*p ebben a vektorban adja vissza a kisz´am´ıtott deriv´alt koordin´at´ ait,
ncoord a kontrollpontok koordin´at´ainak sz´ama: 3, ha a pontok Descartes-f´ele koor-
din´at´ akkal adottak (vagyis B-spline g¨orb´er˝ ol van sz´o); 4, ha homog´en koordin´at´akkal
(vagyis a g¨orbe racion´alis).
A visszaadott ´ert´ek negat´ıv, ha a pont kisz´am´ıt´ asa meghi´ usult, egy´ebk´ent 0.
int glujPointOnNurbsSurface (GLint uknot count, GLfloat *uknot, GLint
vknot count, GLfloat *vknot, GLint u stride, GLint v stride, GLfloat *ctrlarray,
GLint uorder, GLint vorder, GLfloat u, GLfloat v, GLfloat *pt, int ncoord);
NURBS fel¨ ulet (u, v) param´eter˝ u pontj´ anak koordin´at´ ait sz´am´ıtja ki.
uknot count a fel¨ ulet u ir´any´ u csom´o´ert´ekeinek sz´ama (uknot count = uorder + az u
ir´any´ u kontrollpontok sz´ama),
*uknot az els˝o u ir´any´ u csom´o´ert´ek c´ıme,
vknot count az v param´eter csom´o´ert´ekeinek sz´ama (vknot count = vorder + az v
ir´any´ u kontrollpontok sz´ama),
*vknot az els˝o v ir´any´ u csom´o´ert´ek c´ıme,
u stride u ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
v stride v ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
*ctrlarray a kontrollh´al´ o els˝o pontj´anak a c´ıme,
uorder a fel¨ ulet u ir´any´ u rendje,
vorder a fel¨ ulet v ir´any´ u rendje,
u, v a kisz´am´ıtand´ o pont param´eterei,
*pt ebben a vektorban adja vissza a kisz´am´ıtott pont koordin´at´ait,
ncoord a kontrollpontok koordin´at´ainak sz´ama: 3, ha a pontok Descartes-f´ele koor-
din´at´ akkal adottak; 4, ha homog´en koordin´at´ akkal.
A visszaadott ´ert´ek negat´ıv, ha a pont kisz´am´ıt´ asa meghi´ usult, egy´ebk´ent 0.
int glujIsolineOnNurbsSurface (GLint uknot count, GLfloat *uknot, GLint
vknot count, GLfloat *vknot, GLint u stride, GLint v stride, GLfloat *ctrlarray,
GLint uorder, GLint vorder, int ncoord, int dir, float val, GLfloat *pv);
NURBS fel¨ ulet u vagy v ir´any´ u param´etervonal´ anak kontrollpontjait sz´am´ıtja ki.
141
uknot count a fel¨ ulet u ir´any´ u csom´o´ert´ekeinek sz´ama (uknot count = uorder + az u
ir´any´ u kontrollpontok sz´ama),
*uknot az els˝o u ir´any´ u csom´o´ert´ek c´ıme,
vknot count az v param´eter csom´o´ert´ekeinek sz´ama (vknot count = vorder + az v
ir´any´ u kontrollpontok sz´ama),
*vknot az els˝o v ir´any´ u csom´o´ert´ek c´ıme,
u stride u ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
v stride v ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
*ctrlarray a kontrollh´al´ o els˝o pontj´anak a c´ıme,
uorder a fel¨ ulet u ir´any´ u rendje,
vorder a fel¨ ulet v ir´any´ u rendje,
ncoord a kontrollpontok koordin´at´ainak sz´ama: 3, ha a pontok Descartes-f´ele koor-
din´at´ akkal adottak; 4, ha homog´en koordin´at´ akkal.
dir a kisz´am´ıtand´o param´etervonal ir´any´ at jelz˝o sz´am. Ha ´ert´eke 1, akkor v ir´any´ u
param´etervonal kontrollpontjait sz´am´ıtja ki (azaz egy u ´ert´ek r¨ogz´ıtett), ha ´ert´eke 2,
akkor u ir´any´ u param´etervonal kontrollpontjait sz´am´ıtja ki (azaz egy v ´ert´ek r¨ogz´ıtett).
val a kisz´am´ıtand´o param´etervonalhoz tartoz´o r¨ogz´ıtett u vagy v param´eter´ert´ek, a
dir param´eternek megfelel˝oen.
*pv ebben a vektorban adja vissza a kisz´am´ıtott kontrollpontok koordin´at´ait.
A visszaadott ´ert´ek negat´ıv, ha a kontrollpontok kisz´am´ıt´ asa meghi´ usult, egy´ebk´ent
0.
int glujNormalOfNurbsSurface (GLint uknot count, GLfloat *uknot, GLint
vknot count, GLfloat *vknot, GLint u stride, GLint v stride, GLfloat *ctrlarray,
GLint uorder, GLint vorder, GLfloat u, GLfloat v, GLfloat *norm, int ncoord);
NURBS fel¨ ulet (u, v) param´eter˝ u pontj´aban a fel¨ ulet norm´alis´anak koordin´at´ait
sz´am´ıtja ki.
uknot count a fel¨ ulet u ir´any´ u csom´o´ert´ekeinek sz´ama (uknot count = uorder + az u
ir´any´ u kontrollpontok sz´ama),
*uknot az els˝o u ir´any´ u csom´o´ert´ek c´ıme,
vknot count az v param´eter csom´o´ert´ekeinek sz´ama (vknot count = vorder + az v
ir´any´ u kontrollpontok sz´ama),
*vknot az els˝o v ir´any´ u csom´o´ert´ek c´ıme,
u stride u ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
v stride v ir´anyban a szomsz´edos kontrollpontok adatainak t´avols´ aga GLfloat-okban
m´erve,
*ctrlarray a kontrollh´al´ o els˝o pontj´anak a c´ıme,
uorder a fel¨ ulet u ir´any´ u rendje,
vorder a fel¨ ulet v ir´any´ u rendje,
u, v a kisz´am´ıtand´ o pont param´eterei,
*norm ebben a vektorban adja vissza a kisz´am´ıtott norm´alis koordin´at´ait,
ncoord a kontrollpontok koordin´at´ainak sz´ama: 3, ha a pontok Descartes-f´ele koor-
din´at´ akkal adottak; 4, ha homog´en koordin´at´ akkal.
142
A visszaadott ´ert´ek negat´ıv, ha a pont kisz´am´ıt´ asa meghi´ usult, egy´ebk´ent 0.
143
16. fejezet
K´epess´egek enged´elyez´ese, letilt´asa
´es lek´erdez´ese
Az OpenGL-nek sz´amos olyan k´epess´ege van, amelyet enged´elyezhet¨ unk (akti-
viz´alhatunk), letilthatunk, illetve lek´erdezhetj¨ uk az ´allapot´at.
void glEnable (GLenum cap);
void glDisable (GLenum cap);
cap az enged´elyezett, illetve letiltott k´epess´eget azonos´ıt´ o szimbolikus konstans.
Indul´askor a GL DITHER enged´elyezett, az ¨osszes t¨obbi nem enged´elyezett. A rend-
szer egy-egy ´allapotv´altoz´ oban t´arolja ezen k´epess´egek kurrens be´all´ıt´asait, amiket a
glIsEnabled() vagy glGet*() f¨ uggv´enyekkel lek´erdezhet¨ unk.
A cap param´eter lehets´eges ´ert´ekei ´es jelent´es¨ uk:
• GL ALPHA TEST Alfa-vizsg´alat,l´asd a 11.2. szakaszt.
• GL AUTO NORMAL Norm´alisok automatikus l´etrehoz´asa, ha a cs´ ucspontok
l´etrehoz´ as´ahoz a GL MAP2 VERTEX 3 vagy GL MAP2 VERTEX 4 opci´ot
haszn´aljuk, l´asd a 14.2.szakaszt.
• GL BLEND A fragmentum ´es a pixel sz´ın´enek alfa szerinti vegy´ıt´ese (´atl´atsz´ os´ag
modellez´ese), l´asd a 8.1. szakaszt.
• GL CLIP PLANEi Az i-edik v´ag´os´ık haszn´alata, l´asd az 5.2. szakaszt.
• GL COLOR LOGIC OP A fragmentum ´es a pixel sz´ın´en logikai m˝ uvelet v´egz´ese,
l´asd a 11.5.3. pontot.
• GL COLOR MATERIAL Az anyagtulajdons´ag hozz´akapcsol´asa a rajzol´asi sz´ınhez,
l´asd a 6.4. szakaszt.
• GL COLOR TABLE A pixelek sz´ın´enek cser´eje t´abl´azat alapj´an.
• GL CONVOLUTION 1D A pixelek egydimenzi´os konvol´ uci´os sz˝ ur´ese.
• GL CONVOLUTION 2D A pixelek k´etdimenzi´ os konvol´ uci´ os sz˝ ur´ese.
144
• GL CULL FACE H´ats´ o lapok elhagy´asa, l´asd a 3.3.4. pontot.
• GL DEPTH TEST L´athat´ os´agi vizsg´alat, l´asd a 11.4. szakaszt.
• GL DITHER Dithering, l´asd a 11.5. szakaszt.
• GL FOG K¨od modellez´ese, l´asd a 8.3. szakaszt.
• GL HISTOGRAM Egy k´epen a sz´ınek eloszl´as´ar´ ol statisztika k´esz´ıt´ese.
• GL INDEX LOGIC OP A fragmentum ´es a pixel sz´ınindex´en logikai m˝ uvelet
v´egz´ese, l´asd a 11.5.3. pontot.
• GL LIGHTi Az i-edik f´enyforr´ as haszn´alata, l´asd a 6.2. szakaszt.
• GL LIGHTING A megvil´ag´ıt´as haszn´alata, l´asd a 6.5. szakaszt.
• GL LINE SMOOTH Szakaszok hat´ar´ anak sim´ıt´asa, l´asd a 8.2.1. pontot.
• GL LINE STIPPLE Vonalt´ıpus haszn´alata, l´asd a 3.3.2. pontot.
• GL MAP1 COLOR 4 Az egydimenzi´os ki´ert´ekel˝ o RGBA ´ert´ekeket sz´amoljon, l´asd
a 14.1. szakaszt.
• GL MAP1 INDEX Az egydimenzi´os ki´ert´ekel˝ o sz´ınindexeket sz´amoljon, l´asd a 14.1.
szakaszt.
• GL MAP1 NORMAL Az egydimenzi´os ki´ert´ekel˝ o norm´alisokat sz´amoljon, l´asd
a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 1 Az egydimenzi´os ki´ert´ekel˝ o a text´ ura s ´ert´ekeit
sz´amolja, l´asd a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 2 Az egydimenzi´os ki´ert´ekel˝ o a text´ ura s ´es t
´ert´ekeit sz´amolja, l´asd a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 3 Az egydimenzi´os ki´ert´ekel˝ o a text´ ura s, t ´es r
´ert´ekeit sz´amolja, l´asd a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 4 Az egydimenzi´os ki´ert´ekel˝ o a text´ ura s, t, r ´es q
´ert´ekeit sz´amolja, l´asd a 14.1. szakaszt.
• GL MAP1 VERTEX 3 Az egydimenzi´os ki´ert´ekel˝o a cs´ ucspont x, y, ´es z ´ert´ekeit
sz´amolja, l´asd a 14.1. szakaszt.
• GL MAP1 VERTEX 4 Az egydimenzi´os ki´ert´ekel˝o a cs´ ucspont x, y, z ´es w ´ert´ekeit
sz´amolja, l´asd a 14.1. szakaszt.
• GL MAP2 COLOR 4 A k´etdimenzi´ os ki´ert´ekel˝o RGBA ´ert´ekeket sz´amoljon, l´asd
a 14.2. szakaszt.
• GL MAP2 INDEX A k´etdimenzi´ os ki´ert´ekel˝o sz´ınindexeket sz´amoljon, l´asd a 14.2.
szakaszt.
145
• GL MAP2 NORMAL A k´etdimenzi´ os ki´ert´ekel˝o norm´alisokat sz´amoljon, l´asd
a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 1 A k´etdimenzi´ os ki´ert´ekel˝o a text´ ura s ´ert´ekeit
sz´amolja, l´asd a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 2 A k´etdimenzi´os ki´ert´ekel˝ o a text´ ura s ´es t
´ert´ekeit sz´amolja, l´asd a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 3 A k´etdimenzi´os ki´ert´ekel˝ o a text´ ura s, t ´es r
´ert´ekeit sz´amolja, l´asd a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 4 A k´etdimenzi´os ki´ert´ekel˝ o a text´ ura s, t, r ´es q
´ert´ekeit sz´amolja, l´asd a 14.2. szakaszt.
• GL MAP2 VERTEX 3 A k´etdimenzi´ os ki´ert´ekel˝ o a cs´ ucspont x, y, ´es z ´ert´ekeit
sz´amolja, l´asd a 14.2. szakaszt.
• GL MAP2 VERTEX 4 A k´etdimenzi´os ki´ert´ekel˝o a cs´ ucspont x, y, z ´es w ´ert´ekeit
sz´amolja, l´asd a 14.2. szakaszt.
• GL MINMAX Pixelt¨omb¨ok sz´ınkomponensei minimum´ anak, maximum´ anak
sz´am´ıt´asa.
• GL NORMALIZE A norm´alisok automatikus normaliz´al´asa, l´asd a 3.1. szakaszt.
• GL POINT SMOOTH Pont hat´ar´anak sim´ıt´asa, l´asd a 3.3.1. pontot.
• GL POLYGON OFFSET FILL Poligonok kit¨olt¨ ott megjelen´ıt´esekor, a fragmentu-
mokhoz egy offset ´ert´ek hozz´aad´ asa.
• GL POLYGON OFFSET LINE Poligonok hat´ar´ anak megjelen´ıt´esekor, a fragmen-
tumokhoz egy offset ´ert´ek hozz´aad´ asa.
• GL POLYGON OFFSET POINT Poligonok cs´ ucspontjainak megjelen´ıt´esekor, a
fragmentumokhoz egy offset ´ert´ek hozz´aad´ asa.
• GL POLYGON SMOOTH Poligon hat´ar´ anak sim´ıt´asa, l´asd a 3.3.3. pontot ´es a 8.2.
szakaszt.
• GL POLYGON STIPPLE Poligon kit¨olt´ese mint´ aval, l´asd a 3.3.5. pontot.
• GL POST COLOR MATRIX COLOR TABLE A sz´ınm´atrixszal val´ o transz-
form´al´ as ut´an t´abl´ azat szerinti sz´ıncsre.
• GL POST CONVOLUTION COLOR TABLE A konvol´ uci´os sz˝ ur´es ut´an t´abl´azat
szerinti sz´ıncsre.
• GL RESCALE NORMAL A transzform´aci´ ok ut´an a glNormal*() f¨ uggv´ennyel
l´etrehozott norm´alisokat normaliz´alja, l´asd a 3.1. szakaszt.
• GL SEPARABLE 2D K´et egydimenzi´os konvol´ uci´ os sz˝ ur˝ore sz´etv´ alaszthat´o
k´etdimenzi´ os konvol´ uci´os sz˝ ur˝ o.
146
• GL SCISSOR TEST Kiv´ag´asi vizsg´alat, l´asd a 11.1. szakaszt.
• GL STENCIL TEST Stencilvizsg´alat, l´asd a 11.3. szakaszt.
• GL TEXTURE 1D Egydimenzi´os text´ ur´az´ as, l´asd a 13.1. szakaszt.
• GL TEXTURE 2D K´etdimenzi´ os text´ ur´ az´as, l´asd a 13.1. szakaszt.
• GL TEXTURE 3D H´aromdimenzi´ os text´ ur´ az´as, l´asd a 13.1. szakaszt.
• GL TEXTURE GEN Q A text´ ura q koordin´at´ aj´at a glTexGen*() f¨ uggv´eny szerint
hozza l´etre, l´asd a 13.11.3. pontot.
• GL TEXTURE GEN R A text´ ura r koordin´at´ aj´at a glTexGen*() f¨ uggv´eny szerint
hozza l´etre, l´asd a 13.11.3. pontot.
• GL TEXTURE GEN S A text´ ura s koordin´at´ aj´at a glTexGen*() f¨ uggv´eny szerint
hozza l´etre, l´asd a 13.11.3. pontot.
• GL TEXTURE GEN T A text´ ura t koordin´at´ aj´at a glTexGen*() f¨ uggv´eny szerint
hozza l´etre, l´asd a 13.11.3. pontot.
• A k¨ovetkez˝ o f¨ uggv´ennyel azt tudhatjuk meg, hogy egy k´epess´eg enged´elyezett-e.
GLboolean glIsEnabled (GLenum cap);
A f¨ uggv´eny a GL TRUE ´ert´eket adja vissza, ha a cap szimbolikus konstanssal azo-
nos´ıtott k´epess´eg enged´elyezett, egy´ebk´ent a visszaadott ´ert´ek GL FALSE. A k´epess´egek
alaphelyzetben nem enged´elyezettek, kiv´eve a ditheringet. A cap param´eter lehets´eges
´ert´ekei:
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
´
Allapotv´altoz´ok ´ert´ek´enek
lek´erdez´ese
Az itt ismertetett f¨ uggv´enyekkel a glob´alis v´altoz´ ok, ´allapotv´altoz´ ok kurrens ´ert´ekeit
k´erdezhetj¨ uk le.
A glGet*() f¨ uggv´ennyel az OpenGL ´allapotv´altoz´oinak, glob´alis param´etereinek az
´ert´ek´et k´erdezhetj¨ uk le. pname a lek´erdezend˝o param´etert azonos´ıt´o szimbolikus konst-
ans. A lek´erdezett ´ert´eket a params c´ımen kapjuk meg. Ha nem a v´altoz´ onak megfelel˝o
f¨ uggv´ennyel k´erdezz¨ uk le az ´ert´eket, a rendszer t´ıpuskonverzi´ ot hajt v´egre.
void glGetBooleanv (GLenum pname, GLboolean *params);
void glGetDoublev (GLenum pname, GLdouble *params);
void glGetFloatv (GLenum pname, GLfloat *params);
void glGetIntegerv (GLenum pname, GLint *params);
A pname param´eter a lek´erdezend˝ o v´altoz´ot azonos´ıt´ o szimbolikus konstans, a pa-
rams c´ımen pedig a lek´erdezett ´ert´eket kapjuk vissza. A lek´erdezend˝o ´ert´ek t´ıpus´ anak
megfelel˝o f¨ uggv´enyt kell haszn´alni. Ha a lek´erdezend˝ o adat ´es a megh´ıvott f¨ uggv´eny t´ıpusa
k¨ ul¨ onb¨ozik, akkor a rendszer konverzi´ot hajt v´egre.
Az al´abbiakban felsoroljuk pname hely´ere ´ırhat´ o szimbolikus konstansokat, valamint
a hat´asukra a params c´ımen visszaadott ´ert´eket.
• GL ACCUM ALPHA BITS A gy˝ ujt˝ opufferben az alfa komponensek sz´am´ ara fennt-
artott bits´ıkok sz´ama, l´asd a 10.4. szakaszt.
• GL ACCUM BLUE BITS A gy˝ ujt˝ opufferben a k´ek komponens sz´am´ara fenntartott
bits´ıkok sz´ama, l´asd a 10.4. szakaszt.
• GL ACCUM CLEAR VALUE A gy˝ ujt˝opuffer t¨orl´esi sz´ın´enek RGBA komponensei,
l´asd a 10.4. szakaszt.
• GL ACCUM GREEN BITS A gy˝ ujt˝opufferben a z¨old komponens sz´am´ara fenntar-
tott bitek sz´ama, l´asd a 10.4. szakaszt.
148
• GL ACCUM RED BITS A gy˝ ujt˝ opufferben a v¨or¨ os komponens sz´am´ ara fenntartott
bitek sz´ama, l´asd a 10.4. szakaszt.
• GL ACTIVE TEXTURE ARB Az akt´ıv t¨obbsz¨or¨ os text´ uraegys´eg.
• GL ALIASED POINT SIZE RANGE A kisim´ıtott pont alapelemek m´eret´enek mi-
nimuma ´es maximuma, l´asd a 3.3.1. pontot.
• GL ALIASED LINE WIDTH RANGE A kisim´ıtott szakasz alapelemek vonalvas-
tags´ag´ anak minimuma ´es maximuma, l´asd a 3.3.2. pontot.
• GL ALPHA BIAS A pixelmozgat´asok sor´an az alfa komponensre alkalmazott el-
tol´as.
• GL ALPHA BITS A sz´ınpufferek h´any biten t´arolj´ak az alfa komponenst, l´asd
a 10.1. szakaszt.
• GL ALPHA SCALE A pixelmozgat´asok sor´an az alfa komponensre alkalmazott
sk´al´ az´as.
• GL ALPHA TEST Az alfa-vizsg´alat enged´elyezett-e, l´asd a 11.2. szakaszt.
• GL ALPHA TEST FUNC Az alfa-vizsg´alathoz haszn´alt f¨ uggv´eny szimbolikus neve,
l´asd a 11.2. szakaszt.
• GL ALPHA TEST REF Az alfa-vizsg´alathoz haszn´alt referencia´ert´ek, l´asd a 11.2.
szakaszt.
• GL ATTRIB STACK DEPTH Az attrib´ utumverem haszn´alatban l´ev˝o szintjeinek
sz´ama, l´asd az 1. fejezetet.
• GL AUTO NORMAL A k´etdimenzi´os ki´ert´ekel˝ o automatikusan l´etrehozza-e a
norm´alisokat, l´asd a 14.2. szakaszt.
• GL AUX BUFFERS Az opcion´alis sz´ınpufferek sz´ama, l´asd a 10.1. szakaszt.
• GL BLEND Az alfa szerinti sz´ınvegy´ıt´es enged´elyezett-e, l´asd a 8.1. szakaszt.
• GL BLEND COLOR Az alfa szerinti sz´ınvegy´ıt´eshez haszn´alt egy¨ utthat´ ok RGBA
komponensei.
• GL BLEND DST Alfa szerinti sz´ınvegy´ıt´eskor a c´el kombin´ al´o t´enyez˝ oj´ehez haszn´alt
f¨ uggv´eny azonos´ıt´ oja, l´asd a 8.1. szakaszt.
• GL BLEND EQUATION A forr´as ´es a c´el sz´ıneinek kombin´ al´ asi m´odj´ at azonos´ıt´o
szimbolikus konstans.
• GL BLEND SRC Alfa szerinti sz´ınvegy´ıt´eskor a forr´as kombin´ al´o t´enyez˝oj´ehez
haszn´alt f¨ uggv´eny azonos´ıt´oja, l´asd a 8.1. szakaszt.
• GL BLUE BIAS A pixelmozgat´asok sor´an a k´ek sz´ınkomponensre alkalmazott el-
tol´as.
149
• GL BLUE BITS A sz´ınpufferek h´any biten t´arolj´ak a k´ek sz´ınkomponenst, l´asd
a 10.1. szakaszt.
• GL BLUE SCALE A pixelmozgat´asok sor´an a k´ek sz´ınkomponensre alkalmazott
sk´al´ az´as.
• GL CLIENT ACTIVE TEXTURE ARB A kliens akt´ıv t¨obbsz¨or¨ os text´ uraegys´ege.
• GL CLIENT ATTRIBE STACK DEPTH A kliens attrib´ utumverm´eben a
haszn´alatban l´ev˝o szintjeinek sz´ama.
• GL CLIP PLANEi Az i-edik opcion´alis v´ag´ os´ık enged´elyezett-e, l´asd az 5.2. sza-
kaszt.
• GL COLOR ARRAY A sz´ınt¨ omb enged´elyezett-e.
• GL COLOR ARRAY SIZE A sz´ınt¨omb h´any komponensben t´arolja a sz´ınt.
• GL COLOR ARRAY STRIDE A sz´ınt¨ ombben az egym´ast k¨ovet˝o sz´ınek t´avols´aga.
• GL COLOR ARRAY TYPE A sz´ınt¨omb milyen t´ıpus´ u v´altoz´ okban t´arolja a
sz´ınkomponenseket.
• GL COLOR CLEAR VALUE A sz´ınpufferek t¨orl´esi sz´ın´enek RGBA komponensei,
l´asd a 2.1. szakaszt.
• GL COLOR LOGIC OP A fragmentumok sz´ın´en a logikai m˝ uveletek en-
ged´elyezettek-e, l´asd a 11.5.3. pontot.
• GL COLOR MATERIAL Az anyagtulajdons´agnak a rajzol´asi sz´ınhez kapcsol´asa
enged´elyezett-e, l´asd a 6.4. szakaszt.
• GL COLOR MATERIAL FACE A poligonok melyik oldal´anak anyagtulajdons´aga
van hozz´akapcsolva a rajzol´asi sz´ınhez, l´asd a 6.4. szakaszt.
• GL COLOR MATERIAL PARAMETER Melyik anyagtulajdons´ag van
hozz´akapcsolva a rajzol´asi sz´ınhez, l´asd a 6.4. szakaszt.
• GL COLOR MATRIX A sz´ınm´atrix-verem legfels˝o szintj´en t´arolt m´atrix 16 eleme.
• GL COLOR MATRIX STACK DEPTH A sz´ınm´ atrix-verem szintjeinek maxim´alis
sz´ama.
• GL COLOR TABLE A t´abl´ azat szerinti sz´ıncsere enged´elyezett-e.
• GL COLOR WRITEMASK Az R, G, B, A szerinti sz´ınmaszkol´ as enged´elyezett-e,
l´asd a 10.7. szakaszt.
• GL CONVOLUTION 1D A pixelek egydimenzi´os konvol´ uci´ os sz˝ ur´ese enged´elyezett-
e.
• GL CONVOLUTION 2D A pixelek k´etdimenzi´ os konvol´ uci´ os sz˝ ur´ese enged´elyezett-
e.
150
• GL CULL FACE A h´ats´o lapok elhagy´asa enged´elyezett-e, l´asd a 3.3.4. pontot.
• GL CULL FACE MODE Fel´enk melyik oldal´at mutat´ o poligonokat kell elhagyni,
l´asd a 3.3.4. pontot.
• GL CURRENT COLOR A kurrens rajzol´asi sz´ın RGBA komponensei, l´asd a 4.1.
szakaszt.
• GL CURRENT INDEX A kurrens sz´ınindex, l´asd a 4.1. szakaszt.
• GL CURRENT NORMAL A kurrens norm´alis x, y, z komponensei, l´asd a 3.1.
szakaszt.
• GL CURRENT RASTER COLOR A kurrens raszterpoz´ıci´o sz´ın´enek RGBA kom-
ponensei, l´asd a 9.2. szakaszt.
• GL CURRENT RASTER DISTANCE A kurrens raszterpoz´ıci´onak a n´ez˝opontt´ ol
m´ert t´avols´aga.
• GL CURRENT RASTER INDEX A kurrens raszterpoz´ıci´ o sz´ınindexe, l´asd a 9.2.
szakaszt.
• GL CURRENT RASTER POSITION A kurrens raszterpoz´ıci´ o x, y, z ´es w kom-
ponensei: x, y, z ablakkoordin´ata-rendszerben, w v´ag´ o koordin´at´akban, l´asd a 9.2.
szakaszt.
• GL CURRENT RASTER POSITION VALID A kurrens raszterpoz´ıci´ o ´erv´enyes-e,
l´asd a 9.2. szakaszt.
• GL CURRENT RASTER TEXTURE COORDS A kurrens raszterpoz´ıci´ o
text´ ur´ aj´anak s, r, t ´es q koordin´at´ ai.
• GL CURRENT TEXTURE COORDS A kurrens s, r, t ´es q text´ urakoordin´at´ak,
l´asd a 13.11. szakaszt.
• GL DEPTH BIAS A pixelmozgat´asok sor´an alkalmazott eltol´as.
• GL DEPTH BITS H´any bitben t´arolja a rendszer a pixelek m´elys´eg´et, l´asd a 11.4.
szakaszt.
• GL DEPTH CLEAR VALUE A m´elys´egpuffer t¨orl´esi ´ert´eke, l´asd a 10.5. szakaszt.
• GL DEPTH FUNC A m´elys´egek ¨osszehasonl´ıt´ as´ara haszn´alt f¨ uggv´eny szimbolikus
azonos´ıt´ oja, l´asd a 11.4. szakaszt.
• GL DEPTH RANGE Az ablakkoordin´at´ ak intervalluma, l´asd az 5.3. szakaszt.
• GL DEPTH SCALE A pixelmozgat´asok sor´an a m´elys´egre alkalmazott sk´al´az´ as.
• GL DEPTH TEST A m´elys´egvizsg´alat enged´elyezett-e, l´asd a 11.4. szakaszt.
• GL DEPTH WRITEMASK A m´elys´egpuffer ´ırhat´o-e, l´asd a 10.7. szakaszt.
151
• GL DITHER A dithering enged´elyezett-e, l´asd a 11.5.2. pontot.
• GL DOUBLEBUFFER A dupla k´eps´ık haszn´alata (pl. anim´aci´ ohoz) enged´elyezett-
e, l´asd a 10.1 szakaszt.
• GL DRAW BUFFER Az ´ırhat´ o sz´ınpuffer szimbolikus azonos´ıt´ oja, l´asd a 10.6 sza-
kaszt.
• GL EDGE FLAG A hat´arol´ o ´el jelz˝oj´enek ´ert´eke, l´asd a 3.3.6. pontot.
• GL EDGE FLAG ARRAY A hat´arol´o ´elek t¨ombben val´o t´arol´ asa enged´elyezett-e.
• GL EDGE FLAG ARRAY STRIDE A hat´arol´o ´elek t¨ombj´eben az egym´ast k¨ovet˝ o
´ert´ekek t´avols´aga.
• GL FEEDBACK BUFFER SIZE A visszacsatol´asi puffer m´erete, l´asd a 12.2 sza-
kaszt.
• GL FEEDBACK BUFFER TYPE A visszacsatol´asi puffer t´ıpusa, l´asd a 12.2 sza-
kaszt.
• GL FOG A k¨od effektus enged´elyezett-e, l´asd a 8.3 szakaszt.
• GL FOG COLOR A k¨od sz´ın´enek RGBA komponensei, l´asd a 8.3 szakaszt.
• GL FOG DENSITY A k¨od s˝ ur˝ us´ege, l´asd a 8.3 szakaszt.
• GL FOG END A line´aris k¨od-interpol´aci´ohoz az end param´eter, l´asd a 8.3 szakaszt.
• GL FOG HINT A k¨od megval´os´ıt´as´ anak pontoss´ ag´at azonos´ıt´o szimbolikus konst-
ans, l´asd a 8.2 szakaszt.
• GL FOG INDEX A k¨od sz´ınindexe, l´asd a 8.3 szakaszt.
• GL FOG MODE A k¨od kisz´am´ıt´as´ anak m´odja, l´asd a 8.3 szakaszt.
• GL FOG START A line´aris k¨od-interpol´aci´ ohoz a start param´eter, l´asd a 8.3 sza-
kaszt.
• GL FRONT FACE Milyen ir´any´ıt´ as´ u poligonokat tekint a rendszer fel´enk n´ez˝ onek,
l´asd a 3.3.3. pontot.
• GL GREEN BIAS A pixelmozgat´asok sor´an a z¨old sz´ınkomponensre alkalmazott
eltol´as.
• GL GREEN BITS A sz´ınpufferek h´any biten t´arolj´ ak a z¨old sz´ınkomponenst, l´asd
a 10.1. szakaszt.
• GL GREEN SCALE A pixelmozgat´asok sor´an a z¨old sz´ınkomponensre alkalmazott
sk´al´ az´as.
• GL HISTOGRAM A sz´ınek eloszl´as´ ar´ol statisztika k´esz´ıt´ese enged´elyezett-e.
152
• GL INDEX ARRAY A sz´ınindex t¨omb haszn´alata enged´elyezett-e.
• GL INDEX ARRAY STRIDE A sz´ınindex t¨omb egym´ast k¨ovet˝ o elemeinek
t´avols´aga.
• GL INDEX ARRAY TYPE A sz´ınindex t¨omb elemeinek t´ıpusa.
• GL INDEX BITS A sz´ınpufferek h´any biten t´arolj´ak a sz´ınindexet, l´asd a 10.1.
szakaszt.
• GL INDEX CLEAR VALUE A sz´ınpuffer t¨orl´es´ere haszn´alt sz´ınindexe, l´asd a 2.1
szakaszt.
• GL INDEX LOGIC OP A sz´ınindexeken a logikai m˝ uveletek enged´elyezettek-e, l´asd
a 11.5.3. pontot.
• GL INDEX MODE A rendszer sz´ınindex m´odban m˝ uk¨odik-e, l´asd a 4 fejezetet.
• GL INDEX OFFSET A pixelmozgat´asok sor´an a sz´ın- ´es stencilindexhez
hozz´aadand´ o ´ert´ek, l´asd a 9.7. szakaszt.
• GL INDEX SHIFT A pixelmozgat´asok sor´an a sz´ın- ´es stencilindexek eltol´asa, l´asd
a 9.7. szakaszt.
• GL INDEX WRITEMASK A sz´ınindex puffer mely bitjei ´ırhat´ ok, l´asd a 10.7. sz-
akaszt.
• GL LIGHTi Az i-edik f´enyforr´ as enged´elyezett-e, l´asd a 6.2. szakaszt.
• GL LIGHTING A megvil´ag´ıt´as enged´elyezett-e, l´asd a 6.1. szakaszt.
• GL LIGHT MODEL AMBIENT A glob´alis k¨ornyezeti f´eny RGBA komponensei,
l´asd a 6.1. szakaszt.
• GL LIGHT MODEL COLOR CONTROL A t¨ ukr¨ oz¨ ott visszaver˝od´es sz´am´ıt´asait a
rendszer elk¨ ul¨ on´ıti-e a norm´al megvil´ag´ıt´asi sz´am´ıt´ asokt´ol.
• GL LIGHT MODEL LOCAL VIEWER A t¨ ukr¨oz¨ ott visszaver˝ od´esi sz´am´ıt´ asokn´al
a t´enyleges n´ez˝opontot, vagy v´egtelen t´avoli n´ez˝opontot haszn´al a rendszer, l´asd
a 6.1. szakaszt.
• GL LIGHT MODEL TWO SIDE A poligonok k¨ ul¨ onb¨oz˝ o oldalainak k¨ ul¨ onb¨ oz˝oek-e
az anyagtulajdons´agai, l´asd a 6.1. szakaszt.
• GL LINE SMOOTH A szakasz alapelemek hat´ar´anak sim´ıt´ asa enged´elyezett-e, l´asd
a 8.2.1. pontot.
• GL LINE SMOOTH HINT A szakasz alapelem hat´ar´anak sim´ıt´asa milyen
min˝os´eg˝ u, l´asd a 8.2. szakaszt.
• GL LINE STIPPLE A vonalt´ıpus haszn´alata enged´elyezett-e, l´asd a 3.3.2. pontot.
• GL LINE STIPPLE PATTERN A vonalmint´ at le´ır´o 16 bit, l´asd a 3.3.2. pontot.
153
• GL LINE STIPPLE REPEAT A vonalminta nagy´ıt´asi t´enyez˝ oje, l´asd a 3.3.2. pon-
tot.
• GL LINE WIDTH A kurrens vonalvastags´ ag, l´asd a 3.3.2. pontot.
• GL LINE WIDTH GRANULARITY A rendszer ´altal t´amogatott vonalvastags´ agok
k¨ozti k¨ ul¨onbs´eg sim´ıtott hat´ar´ u megjelen´ıt´esn´el, l´asd a 3.3.2. pontot.
• GL LINE WIDTH RANGE Sim´ıtott hat´ar´ u szakaszok vonalvastags´ ag´ anak mini-
muma ´es maximuma, l´asd a 3.3.2. pontot.
• GL LIST BASE A glCallLists() v´egrehajt´asakor haszn´alt offset, l´asd a 7.5. sza-
kaszt.
• GL LIST INDEX A felt¨olt´es alatt ´all´ o display-lista azonos´ıt´oja, l´asd a 7.1. szakaszt.
• GL LIST MODE A felt¨olt´es alatt ´all´o display-lista l´etrehoz´as´ anak m´odja, l´asd a 7.1.
szakaszt.
• GL LOGIC OP MODE A sz´ıneken v´egrehajtand´o logikai m˝ uvelet k´odja, l´asd
a 11.5.3. pontot.
• GL MAP1 COLOR 4 Az egydimenzi´os ki´ert´ekel˝ o sz´ıneket hoz-e l´etre, l´asd a 14.1.
szakaszt.
• GL MAP1 GRID DOMAIN A glMapGrid1*() f¨ uggv´eny ´ertelmez´esi tar-
tom´any´anak hat´arai, l´asd a 14.1. szakaszt.
• GL MAP1 GRID SEGMENTS A glMapGrid1*() f¨ uggv´ennyel l´etrehozand´o
r´acspontok sz´ama, l´asd a 14.1. szakaszt.
• GL MAP1 INDEX Az egydimenzi´os ki´ert´ekel˝o sz´ınindexeket hoz-e l´etre, l´asd a 14.1.
szakaszt.
• GL MAP1 NORMAL Az egydimenzi´os ki´ert´ekel˝ o norm´alisokat hoz-e l´etre, l´asd
a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 1 Az egydimenzi´os ki´ert´ekel˝o r
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 2 Az egydimenzi´os ki´ert´ekel˝ o r, s
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 3 Az egydimenzi´os ki´ert´ekel˝ o r, s, t
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.1. szakaszt.
• GL MAP1 TEXTURE COORD 4 Az egydimenzi´os ki´ert´ekel˝ o r, s, t, q
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.1. szakaszt.
• GL MAP1 VERTEX 3 Az egydimenzi´os ki´ert´ekel˝ o a cs´ ucspontok x, y, z koor-
din´at´ ait hoz-e l´etre, l´asd a 14.1. szakaszt.
154
• GL MAP1 VERTEX 4 Az egydimenzi´os ki´ert´ekel˝o a cs´ ucspontok x, y, z, w koor-
din´at´ ait hoz-e l´etre, l´asd a 14.1. szakaszt.
• GL MAP2 COLOR 4 A k´etdimenzi´os ki´ert´ekel˝o sz´ıneket hoz-e l´etre, l´asd a 14.2.
szakaszt.
• GL MAP2 GRID DOMAIN A glMapGrid2*() f¨ uggv´eny u, illetve v param´eterei
´ertelmez´esi tartom´any´anak hat´arai, l´asd a 14.2. szakaszt.
• GL MAP2 GRID SEGMENTS A glMapGrid2*() f¨ uggv´ennyel l´etrehozand´o
r´acspontok sz´ama u, illetve v ir´anyban, l´asd a 14.2. szakaszt.
• GL MAP2 INDEX A k´etdimenzi´ os ki´ert´ekel˝ o sz´ınindexeket hoz-e l´etre, l´asd a 14.2.
szakaszt.
• GL MAP2 NORMAL A k´etdimenzi´ os ki´ert´ekel˝o norm´alisokat hoz-e l´etre, l´asd
a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 1 A k´etdimenzi´ os ki´ert´ekel˝o r
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 2 A k´etdimenzi´ os ki´ert´ekel˝ o r, s
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 3 A k´etdimenzi´os ki´ert´ekel˝ o r, s, t
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.2. szakaszt.
• GL MAP2 TEXTURE COORD 4 A k´etdimenzi´os ki´ert´ekel˝o r, s, t, q
text´ urakoordin´at´akat hoz-e l´etre, l´asd a 14.2. szakaszt.
• GL MAP2 VERTEX 3 A k´etdimenzi´os ki´ert´ekel˝ o a cs´ ucspontok x, y, z koordin´at´ ait
hoz-e l´etre, l´asd a 14.2. szakaszt.
• GL MAP2 VERTEX 4 A k´etdimenzi´os ki´ert´ekel˝o a cs´ ucspontok x, y, z, w koor-
din´at´ ait hoz-e l´etre, l´asd a 14.2. szakaszt.
• GL MAP COLOR A pixelmozgat´asok sor´an a sz´ınek ´es sz´ınindexek t´abl´ azat alapj´an
cser´elend˝ ok-e, l´asd a 9.7. szakaszt.
• GL MAP STENCIL A pixelmozgat´asok sor´an a stencilindexek t´abl´ azat alapj´an
cser´elend˝ ok-e, l´asd a 9.7. szakaszt.
• GL MATRIX MODE A kurrens m´atrixverem, l´asd az 5.4. szakaszt.
• GL MAX 3D TEXTURE SIZE Az OpenGL implement´ aci´o ´altal kezelhet˝ o 3D-s
text´ ur´ ak m´eret´enek durva becsl´ese, l´asd a 13.6. szakaszt.
• GL MAX ATTRIB STACK DEPTH A kliens attrib´ utumverm´eben a szintek ma-
xim´alis sz´ama.
• GL MAX CLIENT ATTRIB STACK DEPTH Az attrib´ utumverem szintjeinek ma-
xim´alis sz´ama.
155
• GL MAX CLIP PLANES Az opcion´alis v´ag´ os´ıkok maxim´alis sz´ama, l´asd az 5.2.
szakaszt.
• GL MAX COLOR MATRIX STACK DEPTH A sz´ınm´ atrixok verm´eben a szintek
maxim´alis sz´ama.
• GL MAX ELEMENTS INDICES A t¨ombben t´arolhat´ o cs´ ucspontok indexei
sz´am´ anak javasolt maximuma.
• GL MAX ELEMENTS VERTICES A t¨ombben t´arolhat´ o cs´ ucspontok sz´am´ anak ja-
vasolt maximuma.
• GL MAX EVAL ORDER A glMap1*() ´es glMap2*() ki´ert´ekel˝ ok ´altal kezelt
B´ezier-g¨ orb´ek, ´es fel¨ uletek rendj´enek maximuma, l´asd a 14.1. ´es a 14.2.szakaszokat.
• GL MAX LIGHTS A f´enyforr´asok sz´am´anak maximuma, l´asd a 6.2. szakaszt.
• GL MAX LIST NESTING A display-list´ak egym´asba ´agyaz´ as´ anak maxim´alis
szintje, l´asd a 7.3. szakaszt.
• GL MAX MODELVIEW STACK DEPTH A n´ez˝opont-modell transzform´aci´ok
m´atrixai sz´am´ara fenntartott veremben a szintek sz´am´ anak maximuma.
• GL MAX NAME STACK DEPTH A kiv´alaszt´ asi n´evverem szintjeinek maximuma,
l´asd a 12.1. szakaszt.
• GL MAX PIXEL MAP TABLE A t´abl´azat szerinti sz´ıncser´ehez haszn´alhat´ o
t´abl´ azatok sz´am´ anak maximuma, l´asd a 9.8. szakaszt.
• GL MAX PROJECTION STACK DEPTH A vet´ıt´esi transzform´aci´ok m´atrixai
sz´am´ ara fenntartott veremben a szintek sz´am´ anak maximuma.
• GL MAX TEXTURE SIZE Az OpenGL implement´aci´ o ´altal kezelhet˝o text´ ur´ ak
m´eret´enek durva becsl´ese, l´asd a 13.2. szakaszt.
• GL MAX TEXTURE STACK DEPTH A text´ ur´ ak m´atrixai sz´am´ ara fenntartott
veremben a szintek sz´am´anak maximuma.
• GL MAX TEXTURE UNITS ARB A t´amogatott text´ uraegys´egek sz´ama.
• GL MAX VIEWPORT DIMS A k´epmez˝o m´ereteinek maximuma, l´asd az 5.3. sza-
kaszt.
• GL MINMAX A pixelekhez t´arolt ´ert´ekek minimum´anak ´es maximum´anak
sz´am´ıt´asa enged´elyezett-e.
• GL MODELVIEW MATRIX A kurrens n´ez˝ opont-modell transzform´aci´ os m´atrix 16
eleme.
• GL MODELVIEW STACK DEPTH A n´ez˝ opont-modell transzform´aci´ok m´atrixai
sz´am´ ara fenntartott veremben a szintek pillanatnyi sz´ama.
156
• GL NAME STACK DEPTH A kiv´alaszt´ asi n´evverem szintjeinek pillanatnyi sz´ama,
l´asd a 12.1. szakaszt.
• GL NORMAL ARRAY A norm´alisok t¨omb¨ okben val´ o t´arol´ asa enged´elyezett-e.
• GL NORMAL ARRAY STRIDE A norm´alisok t¨ombj´eben az egym´ast k¨ovet˝o ada-
tok t´avols´ aga.
• GL NORMAL ARRAY TYPE A norm´alisok t¨ombj´enek t´ıpusa.
• GL NORMALIZE A norm´alisok automatikus normaliz´al´ asa enged´elyezett-e, l´asd
a 3.1. szakaszt.
• GL PACK ALIGNMENT A pixelek adatainak a mem´ori´aba ´ır´asa sor´an a byte-ok
elrendez´ese, l´asd a 9.6. szakaszt.
• GL PACK IMAGE HIGHT A pixelek adatainak a mem´ori´aba ´ır´ asa sor´an a k´ep
magass´aga, l´asd a 9.6. szakaszt.
• GL PACK LSB FIRST Az 1 bit/pixel t´ıpus´ u adatoknak a mem´ori´aba ´ır´ asa sor´an
a mem´oria byte-jainak legkisebb helyi´ert´ek˝ u bitj´ebe kezdi-e az ´ır´ ast, l´asd a 9.6.
szakaszt.
• GL PACK ROW LENGTH A pixelek adatainak a mem´ori´aban haszn´alt sorhossza,
l´asd a 9.6. szakaszt.
• GL PACK SKIP IMAGES Az els˝o pixelek adatainak a mem´ori´aba ´ır´ asa el˝ott ki-
hagyand´ o k´eppixelek sz´ama, l´asd a 9.6. szakaszt.
• GL PACK SKIP PIXELS Az els˝o pixelek adatainak a mem´ori´ aba ´ır´ asa el˝ott ki-
hagyand´ o pixelek sz´ama, l´asd a 9.6. szakaszt.
• GL PACK SKIP ROWS Az els˝o pixelek adatainak a mem´ori´ aba ´ır´asa el˝ott ki-
hagyand´ o pixelsorok sz´ama, l´asd a 9.6. szakaszt.
• GL PACK SWAP BYTES Az pixelek adatainak a mem´ori´ aba ´ır´ asa el˝ott a 2 vagy
4 byte-on t´arolt adatok felcser´elend˝ok-e, l´asd a 9.6. szakaszt.
• GL PERSPECTIVE CORRECTION HINT A sz´ıneknek ´es text´ ur´ aknak a per-
spekt´ıv torz´ıt´ as miatt sz¨ uks´eges intepol´aci´ oj´ ahoz a pontoss´ag, l´asd a 8.2. szakaszt.
• GL PIXEL MAP A TO A SIZE Az pixelek adatainak a mem´ori´aba ´ır´ asakor az
alf´ab´ ol alf´aba t´ıpus´ u eltol´ashoz haszn´alt t´abl´ azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP B TO B SIZE Az pixelek adatainak a mem´ori´aba ´ır´asakor a
k´ekb˝ ol k´ekbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´ azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP G TO G SIZE Az pixelek adatainak a mem´ori´aba ´ır´ asakor a
z¨oldb˝ ol z¨oldbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´ azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP I TO A SIZE Az pixelek adatainak a mem´ori´aba ´ır´asakor az
alf´ab´ ol indexbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´azat m´erete, l´asd a 9.6. szakaszt.
157
• GL PIXEL MAP I TO B SIZE Az pixelek adatainak a mem´ori´ aba ´ır´ asakor az in-
dexb˝ol k´ekbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP I TO G SIZE Az pixelek adatainak a mem´ori´ aba ´ır´asakor az in-
dexb˝ol z¨oldbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP I TO I SIZE Az pixelek adatainak a mem´ori´aba ´ır´asakor az in-
dexb˝ol indexbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´ azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP I TO R SIZE Az pixelek adatainak a mem´ori´ aba ´ır´ asakor az in-
dexb˝ol v¨or¨os t´ıpus´ u eltol´ashoz haszn´alt t´abl´ azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP R TO R SIZE Az pixelek adatainak a mem´ori´aba ´ır´ asakor a
v¨or¨ osb˝ol v¨or¨osbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´ azat m´erete, l´asd a 9.6. szakaszt.
• GL PIXEL MAP S TO S SIZE Az pixelek adatainak a mem´ori´aba ´ır´ asakor a sten-
cilb˝ol stencilbe t´ıpus´ u eltol´ashoz haszn´alt t´abl´ azat m´erete, l´asd a 9.6. szakaszt.
• GL POINT SIZE A pont alapelem m´erete, l´asd a 3.3.1. pontot.
• GL POINT SIZE GRANULARITY A rendszer ´altal t´amogatott pontm´eretek k¨ozti
k¨ ul¨ onbs´eg sim´ıtott hat´ar´ u megjelen´ıt´esn´el, l´asd a 8.2.1. pontot.
• GL POINT SIZE RANGE Sim´ıtott hat´ar´ u pontok m´eret´enek minimuma ´es maxi-
muma, l´asd a 8.2.1. pontot.
• GL POINT SMOOTH A pont alapelemek hat´ar´anak sim´ıt´ asa enged´elyezett-e, l´asd
a 8.2.1. pontot.
• GL POINT SMOOTH HINT A pont alapelem hat´ar´ anak sim´ıt´asa milyen min˝os´eg˝ u,
l´asd a 8.2. szakaszt.
• GL POLYGON MODE A poligonok k´et oldal´anak megjelen´ıt´esi m´odja
(oldalank´ent), l´asd a 3.3.3. pontot.
• GL POLYGON OFFSET FACTOR A poligon offsetj´enek sk´al´az´ as´ ahoz haszn´alt
t´enyez˝o.
• GL POLYGON OFFSET UNITS A poligon raszteriz´al´ asakor a fragmentumhoz
adand´o ´ert´ek.
• GL POLYGON OFFSET FILL Kit¨olt¨ ott poligonok offsettel val´ o megjelen´ıt´ese en-
ged´elyezett-e.
• GL POLYGON OFFSET LINE Hat´arukkal reprezent´alt poligonok offsettel val´o
megjelen´ıt´ese enged´elyezett-e.
• GL POLYGON OFFSET POINT Cs´ ucspontjaival reprezent´alt poligonok offsettel
val´ o megjelen´ıt´ese enged´elyezett-e.
• GL POLYGON SMOOTH A poligonok hat´ar´ anak sim´ıt´asa enged´elyezett-e, l´asd
a 8.2.2. pontot.
158
• GL POLYGON SMOOTH HINT A poligon alapelem hat´ar´ anak sim´ıt´asa milyen
min˝os´eg˝ u, l´asd a 8.2. szakaszt.
• GL POLYGON STIPPLE A poligonok mint´ aval val´ o kit¨olt´ese enged´elyezett-e, l´asd
a 3.3.5. pontot.
• GL POST COLOR MATRIX COLOR TABLE A sz´ınm´atrixszal val´ o transz-
form´al´ as ut´an t´abl´ azat szerinti sz´ıncsre enged´elyezett-e.
• GL POST COLOR MATRIX RED BIAS A sz´ınm´atrixszal val´ o transzform´al´ as
ut´an a fragmentumokra alkalmazand´o, v¨or¨os szerinti eltol´as, l´asd a 9.7. szakaszt.
• GL POST COLOR MATRIX GREEN BIAS A sz´ınm´atrixszal val´ o transzform´al´ as
ut´an a fragmentumokra alkalmazand´o, z¨old szerinti eltol´as, l´asd a 9.7. szakaszt.
• GL POST COLOR MATRIX BLUE BIAS A sz´ınm´atrixszal val´o transzform´al´ as
ut´an a fragmentumokra alkalmazand´o, k´ek szerinti eltol´as, l´asd a 9.7. szakaszt.
• GL POST COLOR MATRIX ALPHA BIAS A sz´ınm´ atrixszal val´o transzform´al´as
ut´an a fragmentumokra alkalmazand´o, alfa szerinti eltol´as, l´asd a 9.7. szakaszt.
• GL POST COLOR MATRIX RED SCALE A sz´ınm´atrixszal val´o transzform´al´ as
ut´an a fragmentumokra alkalmazand´ o, v¨or¨ os szerinti sk´al´az´ as t´enyez˝oje, l´asd a 9.7.
szakaszt.
• GL POST COLOR MATRIX GREEN SCALE A sz´ınm´ atrixszal val´ o transz-
form´al´ as ut´an a fragmentumokra alkalmazand´ o, z¨old szerinti sk´al´az´ as t´enyez˝ oje,
l´asd a 9.7. szakaszt.
• GL POST COLOR MATRIX BLUE SCALE A sz´ınm´atrixszal val´o transzform´al´as
ut´an a fragmentumokra alkalmazand´ o, k´ek szerinti sk´al´ az´as t´enyez˝ oje, l´asd a 9.7.
szakaszt.
• GL POST COLOR MATRIX ALPHA SCALE A sz´ınm´atrixszal val´o transz-
form´al´ as ut´an a fragmentumokra alkalmazand´ o, alfa szerinti sk´al´ az´as t´enyez˝ oje, l´asd
a 9.7. szakaszt.
• GL POST CONVOLUTION COLOR TABLE A pixelek konvol´ uci´os sz˝ ur´ese ut´an
t´abl´ azat szerinti sz´ıncsre enged´elyezett-e.
• GL POST CONVOLUTION RED BIAS A pixelek konvol´ uci´os sz˝ ur´ese ut´an a frag-
mentumokra alkalmazand´ o, v¨or¨os szerinti eltol´as, l´asd a 9.7. szakaszt.
• GL POST CONVOLUTION GREEN BIAS A pixelek konvol´ uci´ os sz˝ ur´ese ut´an a
fragmentumokra alkalmazand´ o, z¨old szerinti eltol´as, l´asd a 9.7. szakaszt.
• GL POST CONVOLUTION BLUE BIAS A pixelek konvol´ uci´os sz˝ ur´ese ut´an a
fragmentumokra alkalmazand´ o, k´ek szerinti eltol´as, l´asd a 9.7. szakaszt.
• GL POST CONVOLUTION ALPHA BIAS A pixelek konvol´ uci´ os sz˝ ur´ese ut´an a
fragmentumokra alkalmazand´ o, alfa szerinti eltol´as, l´asd a 9.7. szakaszt.
159
• GL POST CONVOLUTION RED SCALE A pixelek konvol´ uci´ os sz˝ ur´ese ut´an a
fragmentumokra alkalmazand´ o, v¨or¨ os szerinti sk´al´ az´ as t´enyez˝oje, l´asd a 9.7. sza-
kaszt.
• GL POST CONVOLUTION GREEN SCALE A pixelek konvol´ uci´ os sz˝ ur´ese ut´an a
fragmentumokra alkalmazand´ o, z¨old szerinti sk´al´ az´ as t´enyez˝oje, l´asd a 9.7. szakaszt.
• GL POST CONVOLUTION BLUE SCALE A pixelek konvol´ uci´ os sz˝ ur´ese ut´an a
fragmentumokra alkalmazand´ o, k´ek szerinti sk´al´ az´as t´enyez˝ oje, l´asd a 9.7. szakaszt.
• GL POST CONVOLUTION ALPHA SCALE A pixelek konvol´ uci´ os sz˝ ur´ese ut´an a
fragmentumokra alkalmazand´ o, alfa szerinti sk´al´az´ as t´enyez˝oje, l´asd a 9.7. szakaszt.
• GL PROJECTION MATRIX A kurrens vet´ıt´esi m´atrix 16 eleme, l´asd az 5.2. sza-
kaszt.
• GL PROJECTION STACK DEPTH A vet´ıt´esi transzform´aci´ ok m´atrixai sz´am´ ara
fenntartott veremben a szintek pillanatnyi sz´ama.
• GL READ BUFFER Az olvashat´o sz´ınpuffert azonos´ıt´o szimbolikus konstans.
• GL RED BIAS A pixelmozgat´asok sor´an a v¨or¨os sz´ınkomponensre alkalmazott el-
tol´as.
• GL RED BITS A sz´ınpufferek h´any biten t´arolj´ak a v¨or¨os sz´ınkomponenst, l´asd
a 10.1. szakaszt.
• GL RED SCALE A pixelmozgat´asok sor´an a v¨or¨os sz´ınkomponensre alkalmazott
sk´al´ az´as.
• GL RENDER MODE A megjelen´ıt´es m´odj´ at azonos´ıt´ o szimbolikus konstans, l´asd
a 12. fejezetet.
• GL RESCALE NORMAL A transzform´aci´ok ut´an a norm´alisok normaliz´al´ asa en-
ged´elyezett-e.
• GL RGBA MODE Az OpenGL RGBA m´odban m˝ uk¨ odik-e.
• GL SCISSOR BOX A kiv´ag´asi vizsg´alatokhoz haszn´alt ablak bal als´o sark´anak ko-
ordin´at´ ai, sz´eless´ege, magass´aga, l´asd a 11.1. szakaszt.
• GL SCISSOR TEST A kiv´ag´ asi vizsg´alat enged´elyezett-e, l´asd a 11.1. szakaszt.
• GL SELECTION BUFFER SIZE A kiv´alaszt´asi puffer m´erete, l´asd a 12.1. sza-
kaszt.
• GL SEPARABLE 2D A sz´etv´ alaszthat´o k´etdimenzi´ os konvol´ uci´ os sz˝ ur˝ o en-
ged´elyezett-e.
• GL SHADE MODEL A kurrens ´arnyal´ asi modell szimbolikus konstansa, l´asd a 4.2.
szakaszt.
160
• GL SMOOTH LINE WIDTH RANGE Sim´ıtott hat´ar´ u szakaszok vonalvas-
tags´ag´ anak minimuma ´es maximuma, l´asd a 3.3.2. pontot.
• GL SMOOTH LINE WIDTH GRANUALITY A rendszer ´altal t´amogatott vonal-
vastags´ agok k¨ozti k¨ ul¨ onbs´eg sim´ıtott hat´ar´ u megjelen´ıt´esn´el, l´asd a 3.3.2. pontot.
• GL SMOOTH POINT SIZE RANGE Sim´ıtott hat´ar´ u pontok m´eret´enek mini-
muma ´es maximuma, l´asd a 8.2.1. pontot.
• GL SMOOTH POINT SIZE GRANUALITY A rendszer ´altal t´amogatott
pontm´eretek k¨ozti k¨ ul¨onbs´eg sim´ıtott hat´ar´ u megjelen´ıt´esn´el, l´asd a 8.2.1.
pontot.
• GL STENCIL BITS A stencilpuffer bits´ıkjainak sz´ama, l´asd a 11.3. szakaszt.
• GL STENCIL CLEAR VALUE A stencilpuffer t¨orl´esi ´ert´eke, l´asd a 10.5. szakaszt.
• GL STENCIL FAIL Azt a m˝ uveletet azonos´ıt´ o szimbolikus konstans, amit a sten-
cilvizsg´alaton fennakad´o fragmentumokra alkalmaz a rendszer, l´asd a 11.3. szakaszt.
• GL STENCIL FUNC A stencilvizsg´alathoz haszn´alt f¨ uggv´enyt azonos´ıt´ o szimboli-
kus konstans, l´asd a 11.3. szakaszt.
• GL STENCIL PASS DEPTH FAIL Azt a m˝ uveletet azonos´ıt´o szimbolikus konst-
ans, amit a stencilvizsg´alaton ´atmen˝o, de a m´elys´egvizsg´ alaton fennakad´ o fragmen-
tumokra alkalmaz a rendszer, l´asd a 11.3. szakaszt.
• GL STENCIL PASS DEPTH PASS Azt a m˝ uveletet azonos´ıt´o szimbolikus konst-
ans, amit a stencilvizsg´alaton ´es a m´elys´egvizsg´alaton is ´atmen˝ o fragmentumokra
alkalmaz a rendszer, l´asd a 11.3. szakaszt.
• GL STENCIL REF A stencilvizsg´alathoz haszn´alt referencia´ert´ek, l´asd a 11.3. sz-
akaszt.
• GL STENCIL TEST A stencilvizsg´alat enged´elyezett-e, l´asd a 11.3. szakaszt.
• GL STENCIL VALUE MASK A stencilvizsg´alathoz haszn´alt maszk, l´asd a 11.3.
szakaszt.
• GL STENCIL WRITEMASK A stencilpuffer maszkol´ as´ahoz haszn´alt ´ert´ek, l´asd
a 10.7. szakaszt.
• GL STEREO A sztereoszk´opikus (bicentr´ alis) lek´epez´est t´amogatja-e az imple-
ment´ aci´o.
• GL SUBPIXEL BITS Az alpixelek (amiket a rendszer az ablakkoordin´ata-
rendszerben a raszteriz´alt alakzatok poz´ıcion´al´ asakor haszn´al) felbont´ as´ahoz
haszn´alt bitek becs¨ ult sz´ama.
• GL TEXTURE 1D Az egydimenzi´os text´ uralek´epez´es enged´elyezett-e, l´asd a 13.5.
szakaszt.
161
• GL TEXTURE BINDING 1D A kurrens egydimenzi´os text´ uraobjektum azo-
nos´ıt´ oja, l´asd a 13.9.2. pontot.
• GL TEXTURE 2D A k´etdimenzi´ os text´ uralek´epez´es enged´elyezett-e, l´asd a 13.2.
szakaszt.
• GL TEXTURE BINDING 2D A kurrens k´etdimenzi´ os text´ uraobjektum azo-
nos´ıt´ oja, l´asd a 13.9.2. pontot.
• GL TEXTURE 3D A h´aromdimenzi´ os text´ uralek´epez´es enged´elyezett-e, l´asd a 13.6.
szakaszt.
• GL TEXTURE BINDING 3D A kurrens h´aromdimenzi´ os text´ uraobjektum azo-
nos´ıt´ oja, l´asd a 13.9.2. pontot.
• GL TEXTURE COORD ARRAY A text´ urakoordin´at´ ak t¨ombj´enek haszn´alata en-
ged´elyezett-e.
• GL TEXTURE COORD ARRAY SIZE A text´ urakoordin´at´ak t¨ombj´enek egy-egy
elem´eben h´any koordin´ata t´arolhat´o.
• GL TEXTURE COORD ARRAY STRIDE A text´ urakoordin´at´ ak t¨ombj´eben az
egym´ast k¨ovet˝o elemek t´avols´ aga.
• GL TEXTURE COORD ARRAY TYPE A text´ urakoordin´at´ak t¨ombj´eben az ele-
mek t´ıpusa.
• GL TEXTURE GEN Q A text´ ur´ ak q koordin´at´ aj´anak automatikus l´etrehoz´ asa en-
ged´elyezett-e, l´asd a 13.11.3. pontot.
• GL TEXTURE GEN R A text´ ur´ ak r koordin´at´aj´ anak automatikus l´etrehoz´ asa en-
ged´elyezett-e, l´asd a 13.11.3. pontot.
• GL TEXTURE GEN S A text´ ur´ak s koordin´at´ aj´anak automatikus l´etrehoz´asa en-
ged´elyezett-e, l´asd a 13.11.3. pontot.
• GL TEXTURE GEN T A text´ ur´ ak t koordin´at´ aj´ anak automatikus l´etrehoz´asa en-
ged´elyezett-e, l´asd 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 sz´ama.
• GL UNPACK ALIGNMENT Pixeleknek a mem´ori´ ab´ol val´ o olvas´asakor a byte-ok
elrendez´ese, l´asd a 9.6. szakaszt.
• GL UNPACK IMAGE HIGHT Pixeleknek a mem´ori´ ab´ol val´ o olvas´asakor a k´ep ma-
gass´aga, l´asd a 9.6. szakaszt.
• GL UNPACK LSB FIRST Az 1 bit/pixel t´ıpus´ u adatoknak a mem´ori´ ab´ ol val´o ol-
vas´ asa sor´an a mem´oria byte-jainak legkisebb helyi´ert´ek˝ u bitj´ebe kezdi-e az ´ır´ast,
l´asd a 9.6. szakaszt.
162
• GL UNPACK ROW LENGTH Pixeleknek a mem´ori´ ab´ol val´o olvas´ asakor haszn´alt
sorhossz, l´asd a 9.6. szakaszt.
• GL UNPACK SKIP IMAGES Az els˝o pixelek adatainak a mem´ori´ ab´ ol val´o olvas´ asa
el˝ott kihagyand´ o pixelek sz´ama, l´asd a 9.6. szakaszt.
• GL UNPACK SKIP PIXELS Az els˝o pixelek adatainak a mem´ori´ ab´ol val´ o olvas´asa
el˝ott kihagyand´ o pixelek sz´ama, l´asd a 9.6. szakaszt.
• GL UNPACK SKIP ROWS Az els˝o pixelek adatainak a mem´ori´ ab´ol val´o olvas´asa
el˝ott kihagyand´ o pixelsorok sz´ama, l´asd a 9.6. szakaszt.
• GL UNPACK SWAP BYTES Pixeleknek a mem´ori´ab´ ol val´o olvas´asakor a 2 vagy
4 byte-on t´arolt adatok felcser´elend˝ok-e, l´asd a 9.6. szakaszt.
• GL VERTEX ARRAY A cs´ ucspontok t¨ombj´enek haszn´alata enged´elyezett-e.
• GL VERTEX ARRAY SIZE A cs´ ucspontokat h´any koordin´at´ aval t´aroljuk a t¨omb-
ben.
• GL VERTEX ARRAY STRIDE A cs´ ucspontok t¨ombj´eben az egym´ast k¨ovet˝ o ele-
mek t´avols´ aga.
• GL VERTEX ARRAY TYPE A cs´ ucspontok t¨ombj´enek t´ıpusa.
• GL VIEWPORT A k´epmez˝ o bal als´o sark´anak koordin´at´ai, sz´eless´ege ´es magass´aga,
l´asd az 5.3. szakaszt.
• GL ZOOM X Pixelmozgat´askor az x ir´any´ u sk´al´az´ asi t´enyez˝ o, l´asd a 9.4.2. pontot.
• GL ZOOM Y Pixelmozgat´askor az y ir´any´ u sk´al´az´ asi t´enyez˝ o, l´asd a 9.4.2. pontot.
void glGetClipPlane (GLenum plane, GLdouble *equation);
A plane param´eterrel azonos´ıtott opcion´alis v´ag´os´ık n´ez˝opontkoordin´ata-rendszerbeli
implicit alakj´anak egy¨ utthat´oit adja vissza az equation c´ımen. A plane param´eter ´ert´eke
GL CLIP PLANEi lehet, (i = 0, . . . , v´ag´os´ıkok sz´ama−1) (l´asd az 5.2. szakaszt).
GLenum glGetError (void);
Visszaadja a kurrens hibak´odot ´es t¨orli a hibajelz˝ot (GL NO ERROR). A rendszer
minden ´altala figyelt hib´ahoz egy numerikus k´odot ´es egy szimbolikus konstanst ren-
del. Ha a rendszer hib´at ´eszlel, a hibajelz˝oh¨ oz hozz´arendeli a megfelel˝o ´ert´eket ´es
mindaddig nem r¨ogz´ıt ´ ujabb hib´at, m´ıg a hibajelz˝ot ki nem olvassuk a glGetError()
f¨ uggv´ennyel. A rendszer a hib´at okoz´o f¨ uggv´eny h´ıv´as´ at figyelmen k´ıv¨ ul hagyja, de nincs
egy´eb mell´ekhat´ asa a hib´anak.
A k¨ovetkez˝o hibajelz˝ok defini´altak:
• GL NO ERROR A rendszer nem jegyzett fel hib´at.
163
• GL INVALID ENUM Rossz szimbolikus konstanssal h´ıvtuk meg valamelyik
f¨ uggv´enyt.
• GL INVALID VALUE Valamely f¨ uggv´eny h´ıv´ as´an´ al olyan numerikus ´ert´eket adt-
unk meg, amelyik k´ıv¨ ul esik az ´ertelmez´esi tartom´anyon.
• GL INVALID OPERATION A v´egrehajtand´o m˝ uvelet nem megengedett a rendszer
pillanatnyi ´allapot´aban.
• GL STACK OVERFLOW A megh´ıvott f¨ uggv´eny verem-t´ ulcsordul´ ast okozna.
• GL STACK UNDERFLOW A megh´ıvott f¨ uggv´eny verem-alulcsordul´ ast okozna.
• GL OUT OF MEMORY Nincs el´eg mem´oria a f¨ uggv´eny v´egrehajt´as´ahoz. A rend-
szer tov´abbi m˝ uk¨ od´ese nem meghat´arozhat´ o.
• GL TABLE TOO LARGE A megadott t´abl´azat nagyobb, mint az imple-
ment´ aci´oban megengedett maximum.
void glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
void glGetLightiv (GLenum light, GLenum pname, GLint *params);
A light azonos´ıt´oj´ u f´enyforr´as param´etereit adja vissza val´os sz´amk´ent (az els˝o h´ıv´ asi
forma), vagy eg´esz sz´amk´ent (a m´asodik h´ıv´ asi forma). A light param´eter ´ert´eke
GL LIGHTi 0 ≤ i < GL MAX LIGHTS lehet. A k´ıv´ant ´ert´eket a params c´ımen kapjuk
vissza.
Ha eg´esz sz´amk´ent k´erdez¨ unk le sz´ınkomponenseket, akkor ´ ugy konvert´ alja a kom-
ponenst, hogy a [−1., 1.] intervallumot line´arisan lek´epezi a rendszer ´altal ´abr´azolhat´ o
legkisebb ´es legnagyobb eg´esz ´altal hat´arolt intervallumra.
A pname ´ert´ekei, ´es a hat´asukra visszakapott ´ert´ekek az al´abbiak:
• GL AMBIENT A f´enyforr´ as k¨ornyezeti f´eny¨osszetev˝ oj´enek RGBA komponenseit
adja vissza.
• GL DIFFUSE A f´enyforr´as sz´ort f´eny¨osszetev˝ oj´enek RGBA komponenseit adja
vissza.
• GL SPECULAR A f´enyforr´ as t¨ ukr¨oz¨ ott f´eny¨ osszetev˝oj´enek RGBA komponenseit
adja vissza.
• GL POSITION A f´enyforr´as hely´enek x, y, z, w koordin´at´ai a n´ez˝opontkoordin´ata-
rendszerben.
• GL SPOT DIRECTION A reflektorszer˝ u f´enyforr´ as tengely´enek ir´anya ( x, y, z).
• GL SPOT EXPONENT A reflektor f´enyerej´enek cs¨okken´ese.
• GL SPOT CUTOFF A reflektor k´ upj´anak f´el ny´ıl´ assz¨oge.
164
• GL CONSTANT ATTENUATION A f´eny tompul´as´anak konstans tagja.
• GL LINEAR ATTENUATION A f´enytompul´as line´aris tagj´anak egy¨ utthat´ oja.
• GL QUADRATIC ATTENUATION A f´enytompul´ as m´asodfok´ u tagj´anak egy¨ utt-
hat´oja.
void glGetMapdv (GLenum target, GLenum query, GLdouble *values);
void glGetMapfv (GLenum target, GLenum query, GLfloat *values);
void glGetMapiv (GLenum target, GLenum query, GLint *values);
A glMap1*() ´es glMap2*() f¨ uggv´enyekkel l´etrehozott ki´ert´ekel˝ok (B´ezier-g¨orbe, il-
letve fel¨ ulet megad´asok) param´etereit adja vissza a values c´ımen, a h´ıvott f¨ uggv´enynek
megfelel˝oen double, float vagy integer ´ert´ekk´ent.
A target param´eter lehets´eges ´ert´ekei:
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 param´eterrel specifik´aljuk a lek´erdezend˝ o adatokat.
´
Ert´eke:
• GL COEFF A kontrollpontokat adja vissza homog´en koordin´at´ akban (x, y, z, w).
K´etdimenzi´ os ki´ert´ekel˝o (fel¨ ulet) eset´en oszlopfolytonosan adja vissza a kontroll-
pontok t¨ombj´et.
• GL ORDER A g¨orbe rendj´et, illetve fel¨ ulet eset´en az u ´es v ir´any´ u rendeket adja
vissza.
• GL DOMAIN A param´eter(ek) ´ertelmez´esi tartom´any´at (tartom´anyait) adja vissza.
void glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
void glGetMaterialiv (GLenum face, GLenum pname, GLint *params);
A params c´ımen visszaadja a poligonok face oldal´anak a pname param´eterrel azo-
nos´ıtott anyagtulajdons´agait. Ha eg´esz sz´amk´ent k´erdez¨ unk le sz´ınkomponenseket, akkor
´ ugy konvert´ alja a komponenst, hogy a [−1., 1.] intervallumot line´arisan lek´epezi a rendszer
´altal ´abr´ azolhat´o legkisebb ´es legnagyobb eg´esz ´altal hat´arolt intervallumra.
face ´ert´eke GL FRONT vagy GL BACK lehet.
pname ´ert´ekei:
165
• GL AMBIENT Az anyag k¨ornyezeti f´eny visszaver˝od´esi egy¨ utthat´oj´ anak RGBA
komponenseit adja vissza.
• GL DIFFUSE Az anyag sz´ort visszaver˝od´esi egy¨ utthat´ oj´anak RGBA komponenseit
adja vissza.
• GL SPECULAR Az anyag t¨ ukr¨oz¨ ott visszaver˝od´esi egy¨ utthat´ oj´anak RGBA kom-
ponenseit adja vissza.
• GL EMISSION Az anyag ´altal kibocs´atott f´eny RGBA komponenseit adja vissza.
• GL SHININESS Az anyag ragyog´asi egy¨ utthat´ oj´at adja vissza.
• GL COLOR INDEXES Az anyag k¨ornyezeti, sz´ort ´es t¨ ukr¨oz¨ ott visszaver˝od´esi
egy¨ utthat´ oj´anak sz´ınindexeit adja vissza.
void glGetPixelMapufv (GLenum map, GLfloat *values);
void glGetPixelMapuiv (GLenum map, GLuint *values);
void glGetPixelMapusv (GLenum map, GLushort *values);
A sz´ınkomponensek map t´abl´ azat szerinti m´odos´ıt´ as´ anak be´all´ıt´ asait adja vissza a
values c´ımen.
map lehets´eges ´ert´ekei:
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 kit¨olt´es´ere haszn´alt 32 32 mint´ at adja vissza a mask c´ımen.
const GLubyte *glGetString (GLenum name);
Az implement´ aci´ora vonatkoz´ o sz¨oveges inform´aci´ o c´ım´et adja vissza.
name lehets´eges ´ert´ekei:
• GL VENDOR Az implement´aci´ o´ert felel˝os c´eg.
• GL RENDERER A megjelen´ıt´eshez haszn´alt hardver platform konfigur´aci´ oj´anak
neve.
• GL VERSION Az implement´alt OpenGL verzi´ osz´ ama.
• GL EXTENSIONS A t´amogatott OpenGL kieg´esz´ıt´esek list´aja.
166
void glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params);
void glGetTexEnviv (GLenum target, GLenum pname, GLint *params);
A pname param´eterben specifik´alt text´ uraf¨ uggv´eny param´etereit adja vissza a params
c´ımen.
A target param´eternek a GL TEXTURE ENV ´ert´eket kell adni. pname lehets´eges
´ert´ekei:
• GL TEXTURE ENV MODE A kombin´al´ as m´odj´at azonos´ıt´ o szimbolikus konstans.
• GL TEXTURE ENV COLOR A text´ uraf¨ uggv´eny sz´ın´enek RGBA komponensei.
void glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params);
void glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params);
void glGetTexGeniv (GLenum coord, GLenum pname, GLint *params);
A glTexGen*() paranccsal megadott text´ urakoordin´at´ at l´etrehoz´ o f¨ uggv´enynek a
pname param´eterrel megadott jellemz˝oit adja vissza a params c´ımen.
coord a text´ ura koordin´at´ aj´at azonos´ıtja, ´ert´eke GL S, GL T, GL R, vagy GL Q lehet.
pname lehets´eges ´ert´ekei:
GL TEXTURE GEN MODE A text´ urakoordin´at´ ak l´etrehoz´as´ ara haszn´alt f¨ uggv´eny
azonos´ıt´ oja.
GL OBJECT PLANE A referencias´ık objektumkoordin´ata-rendszerbeli implicit
alakj´anak egy¨ utthat´ oi.
GL EYE PLANE A referencias´ık n´ez˝ opontkoordin´ata-rendszerbeli implicit alakj´anak
egy¨ utthat´ oi.
void glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type,
GLvoid *pixels);
A pixels c´ımen a target param´etert˝ol f¨ ugg˝ oen egy-, k´et- vagy h´aromdimenzi´ os
text´ ur´ at ad vissza. A level ≥ 0 param´eterrel a lek´erdezend˝o text´ ura r´eszletess´eg´enek
szintj´et kell megadni. target lehets´eges ´ert´ekei: GL TEXTURE 1D, GL TEXTURE 2D
´es GL TEXTURE 3D. A format param´eterrel azt kell megadni, hogy a pixelek ada-
tait milyen form´aban akarjuk visszakapni. Lehets´eges ´ert´ekei: GL RED, GL GREEN,
GL BLUE, GL ALPHA, GL RGB, GL RGBA, GL BGR, GL GBRA, GL LUMINANCE,
GL LUMINANCE ALPHA. A type param´eterrel azt adjuk meg, hogy a pixelek adatait
milyen t´ıpus´ u adatk´ent t´aroljuk, lehets´eges ´ert´ekei:
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, GLfloat *params);
void glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
A params c´ımen a target text´ ura pname param´etereit adja vissza. target lehets´eges
´ert´ekei: GL TEXTURE 1D, GL TEXTURE 2D ´es GL TEXTURE 3D. pname lehets´eges
´ert´ekei:
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
T´argymutat´ o
´arnyal´ as, 29
˜i modell, 9, 29
folytonos, 29
Gouroud-f´ele, 30
konstans, 29
´atl´ atsz´os´ ag, 25, 26, 28, 58, 60, 63, 83
ablak t¨orl´ese, 6
addit´ıv sz´ınkever´es, 24
antialiasing, 61
anyagtulajdons´ag, 27, 41, 46, 46, 47–49,
53
B-spline
g¨orbe
deriv´alja, 140
B´ezier
fel¨ ulet, 116, 138
g¨orbe, 113, 130
pontja, 140
bitt´erk´ep, 53, 67, 67, 68
csonkak´ up, 128
deriv´alt, 140, 141
display-lista, 53, 53, 54–56
dithering, 27, 82, 88
egyszer˝ u soksz¨og, 11
egyszeresen ¨osszef¨ ugg˝ o, 11
f´eny tompul´asa, 45
fragmentum, 27, 58–61, 63, 64, 71, 75,
82–84, 86–88, 94, 107, 110
g¨omb, 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
glDrawBuffer(), 79
glDrawPixels(), 69, 69, 71, 72, 96, 97
glEdgeFlag(), 23
glEnable(), 4, 10, 18, 20, 21, 38, 44, 49,
58, 60, 62–64, 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
glFeedbackBuffer(), 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
glReadBuffer(), 76, 80, 80
glReadPixels(), 55, 69, 69, 71, 72, 80
glRect(), 11
glRenderMode(), 55, 90
glRotate*(), 34, 34, 40
glScale*(), 34
glScissor(), 83
glSelectBuffer(), 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, 97–102
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
k¨od, 63
k¨or, 131
k¨orcikk, 129
k¨orgy˝ ur˝ u, 128
k¨orgy˝ ur˝ ucikk, 128
k¨ornyezeti f´eny, 41, 43–45, 47, 49, 50
k´ep, 67, 68, 69, 71
k´epmez˝ o, 38, 67, 68, 77, 82, 86, 92, 101
-transzform´aci´ o, 32, 38, 39
k´eppuffer, 69, 72, 74, 97, 99–101
k´ up, 128
kiv´alaszt´ as, 90
kontrollh´ al´o, 133
kontrollpont, 133
konvex burok, 11
megvil´ag´ıt´as, 2, 9, 27, 28, 41, 42, 43, 45,
46, 49, 53, 63, 82, 95, 108, 127
˜i modell, 43
mipmapping, 102
modellkoordin´ata-rendszer, 34
modelltranszform´aci´ o, 10, 32, 33, 33, 39
n´ez´esi ir´any, 33, 34–36
n´ez˝ opont, 33, 34, 36, 38, 39, 41–43, 60,
63, 75, 82, 86
koordin´ata-rendszer, 33, 34, 35, 38,
43, 45, 64, 111, 163
norm´alis, 9, 127, 134, 142
norm´alvektor, 9
normaliz´alt koordin´ata-rendszer, 38
NURBS, 110, 118
fel¨ ulet, 122, 133
norm´alisa, 142
param´etervonala, 141
pontja, 141
g¨orbe, 121
deriv´altja, 141
pontja, 140
offset, 133
param´eteres fel¨ ulet, 139
171
param´eteres g¨orbe, 131
param´etervonal, 133, 141
poligon, 11
poligon alapelem
el¨ uls˝ o oldala, 19
el˝ojeles ter¨ ulete, 19
elhagy´asa, 20
fel´enk n´ez˝ o oldala, 19
h´ats´ o oldala, 19
hat´arol´ o ´ele, 21
kit¨olt´ese mint´ aval, 21
megad´asa, 18
pont alapelem
l´etrehoz´ asa, 13
m´erete, 16
ponth´ al´ o, 134
puffer, 7, 74, 83
gy˝ ujt˝ o˜, 76
k´ep˜, 74
kiv´alaszt´ asa, 79
kiv´alaszt´ asi ˜, 90
m´elys´eg˜, 75, 86
maszkol´asa, 80
stencil˜, 75, 84
sz´ın ˜, 74
sz´ın˜, 88
t¨orl´ese, 7, 78
visszacsatol´asi ˜, 90, 92
ragyog´as, 46, 48
raszteres objektum, 6, 67
reflektor, 45, 49
sim´ıt´ as, 16, 17, 27, 61, 61, 62, 63, 76, 77,
87
sz´ın
index, 28
kever´es, 24
addit´ıv, 24
szubtrakt´ıv, 24
megad´as, 28
megad´asi m´od, 24
sz´ort f´eny, 41, 44, 47, 49
szubtrakt´ıv sz´ınkever´es, 24
t¨ ukr¨ oz¨ott f´eny, 42, 42, 43, 44, 46, 48–50,
108
text´ ura, 94
egydimenzi´os ˜, 100
f¨ uggv´enyek, 107
h´aromdimenzi´ os ˜, 101
helyettes´ıt˝ o, 98
ism´etl´ese, 110
k´etdimenzi´ os ˜, 95
koordin´at´ ak, 108
m´odos´ıt´asa, 99
megad´asa, 95
objektumok, 104
r´eszletess´egi szintje, 102
sz˝ ur˝ ok, 103
trimmelt
fel¨ ulet, 123
g¨orbe, 131
v´ag´ as, 35, 38
v´ag´ os´ık, 36–38, 163
vet´ıt´esi transzform´aci´ o, 32, 35, 35, 38–40,
82, 94
visszacsatol´as, 92
vonalt´ıpus, 18
vonalvastags´ ag, 17
172
Irodalomjegyz´ek
[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 official reference document to
OpenGL, Version 1.2, third edition, Addison-Wesley, Reading, MA, 1999.
[4] Szirmay-Kalos, L., Sz´am´ıt´ og´epes grafika, ComputerBooks, Budapest, 1999.
[5] Szirmay-Kalos, L., Antal Gy., Csonka F., H´aromdimenzi´os grafika, anim´aci´o ´es
j´at´ekfejleszt´es, ComputerBooks, Budapest, 2003.
[6] Woo, M., Neider, J., Davis, T., Shreiner, D., OpenGL programming guide, The offi-
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

Juh´sz Imre a

OpenGL

´ mobiDIAK k¨nyvt´r o a ˝ SOROZATSZERKESZTO Fazekas Istv´n a

´ JUHASZ IMRE egyetemi docens Miskolci Egyetem OpenGL Egyetemi jegyzet Els˝ kiad´s o a ´ mobiDIAK k¨nyvt´r o a Debreceni Egyetem .

50/2003) projektek keret´ben k´sz¨lt. e e u . 2003 o e o a ´ mobiDIAK k¨nyvt´r o a Debreceni Egyetem Informatikai Int´zet e 4010 Debrecen.A mobiDIAK ¨nszervez˝ mobil port´l” (IKTA..unideb. 2003 a ´ Copyright c elektronikus k¨zl´s mobiDIAK k¨nyvt´r. Pf. a leg´jabb gener´ci´s port´l szoftver” e a u a o a (ITEM.hu/ A m˝ egy´ni tanulm´nyoz´s c´lj´ra szabadon let¨lthet˝.GNU Iter´tor..inf. 12 Hungary http://mobidiak.Lektor Bancsik Zsolt Lajos S´ndor a Miskolci Egyetem Copyright c Juh´sz Imre. OMFB-00373/2003)) u o a ´s a . aa o o ır´ e e o e ´ o A m˝ . Minden egy´b u e a a e a o o e felhaszn´l´s csak a szerz˝ el˝zetes ´ asbeli enged´ly´vel t¨rt´nhet.

Tartalomjegyz´k e
El˝sz´ o o 1. Bevezet´s e 2. Rajzol´s az OpenGL-ben a 2.1. Ablak t¨rl´se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o e 2.2. A rajzol´s befejez´s´nek kik´nyszer´ ese . . . . . . . . . . . . . . . . . . . . a ee e ıt´ 3. Geometriai alapelemek rajzol´sa a 3.1. Geometriai alapelemek megad´sa . . . . . . . . . . . . . . a 3.2. Geometriai alapelemek megjelen´ ese . . . . . . . . . . . . ıt´ 3.3. A geometriai alapelemek megjelen´s´t befoly´sol´ t´nyez˝k ee a o e o 3.3.1. Pont . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2. Szakasz . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3. Poligon . . . . . . . . . . . . . . . . . . . . . . . . 3.3.4. Poligonok elhagy´sa . . . . . . . . . . . . . . . . . a 3.3.5. Kit¨lt´s mint´val . . . . . . . . . . . . . . . . . . . o e a 3.3.6. Poligon hat´rol´ ´leinek megjel¨l´se . . . . . . . . . a oe oe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 6 6 7 9 9 11 16 16 17 18 20 21 21

4. Sz´ ´rnyal´s ın, a a 24 4.1. Sz´ megad´sa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 ın a ´ 4.2. Arnyal´si modell megad´sa . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 a a 5. Koordin´ta-rendszerek ´s transzform´ci´k a e a o 5.1. N´z˝pont, n´z´si ir´ny kiv´laszt´sa ´s modelltranszform´ci´k e o e e a a a e a o 5.1.1. Modelltranszform´ci´k megad´s´t seg´ o parancsok . a o aa ıt˝ 5.1.2. N´z˝pont ´s n´z´si ir´ny be´ll´ asa . . . . . . . . . . e o e e e a a ıt´ 5.2. Vet´ esi transzform´ci´k . . . . . . . . . . . . . . . . . . . . ıt´ a o 5.3. K´pmez˝-transzform´ci´ . . . . . . . . . . . . . . . . . . . . e o a o 5.4. A transzform´ci´s m´trixok kezel´se . . . . . . . . . . . . . . a o a e 6. Megvil´g´ as a ıt´ 6.1. Megvil´g´ asi modell . . . . a ıt´ 6.2. F´nyforr´s megad´sa . . . . e a a 6.2.1. A f´ny sz´ . . . . . e ıne 6.2.2. A f´nyforr´sok helye e a 6.2.3. Reflektor . . . . . . . . . . . . . . . . . . . . . . . . . . . I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 33 33 34 35 38 39 41 43 44 44 44 45

´ TARTALOMJEGYZEK 6.3. 6.4. 6.5. 6.6. Anyagtulajdons´gok . . . . . . . . . . . . . . . . . a Az anyagtulajdons´gok v´ltoztat´sa . . . . . . . . . a a a A cs´cspontok sz´ enek meghat´roz´sa megvil´g´ as u ın´ a a a ıt´ Megvil´g´ as sz´ a ıt´ ınindex m´dban . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eset´n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

II 46 48 49 49 53 54 54 55 55 56 58 58 61 62 63 63 67 67 67 68 68 69 71 71 71 72 72 74 74 75 75 76 77 77 77 78 79 80

7. Display-lista 7.1. Display-lista l´trehoz´sa, v´grehajt´sa e a e a 7.2. A display-lista tartalma . . . . . . . . 7.3. Hierarchikus diplay-list´k . . . . . . . . a 7.4. Display-list´k ´s indexek kezel´se . . . a e e 7.5. T¨bb lista v´grehajt´sa . . . . . . . . . o e a 8. Speci´lis optikai hat´sok a a ´ atsz´s´g . . . . . . . . . . . 8.1. Atl´ o a 8.2. Sim´ as (antialiasing) . . . . . . ıt´ 8.2.1. Pont ´s szakasz sim´ asa e ıt´ 8.2.2. Poligonok sim´ asa . . . ıt´ 8.3. K¨d (atmoszf´rikus hat´sok) . . o e a . . . . . . . . . . . . . . . . . . . .

9. Raszteres objektumok rajzol´sa a 9.1. Bitt´rk´pek ´s karakterek . . . . . . . . . . . e e e 9.2. Kurrens raszterpoz´ o . . . . . . . . . . . . . ıci´ 9.3. Bitt´rk´p rajzol´sa . . . . . . . . . . . . . . . e e a 9.4. K´pek . . . . . . . . . . . . . . . . . . . . . . e 9.4.1. Pixeladatok olvas´sa, ´ asa ´s m´sol´sa a ır´ e a a 9.4.2. K´pek kicsiny´ ese, nagy´ asa . . . . . e ıt´ ıt´ 9.5. Pixelek t´rol´sa, transzform´l´sa, lek´pez´se . a a aa e e 9.6. A pixeladatok t´rol´s´nak szab´lyoz´sa . . . . a aa a a 9.7. M˝veletek pixelek mozgat´sa sor´n . . . . . . u a a 9.8. Transzform´l´s t´bl´zat seg´ eg´vel . . . . . . aa a a ıts´ e 10.Pufferek 10.1. Sz´ ınpufferek . . . . . . . . . . . . . . . . . . . 10.2. M´lys´gpuffer . . . . . . . . . . . . . . . . . . e e 10.3. Stencilpuffer . . . . . . . . . . . . . . . . . . . 10.4. Gy˝jt˝puffer . . . . . . . . . . . . . . . . . . . u o 10.4.1. Teljes k´p kisim´ asa . . . . . . . . . . e ıt´ 10.4.2. Bemozdul´sos ´letlens´g (motion blur) a e e 10.4.3. M´lys´g´less´g . . . . . . . . . . . . . e e e e 10.5. Pufferek t¨rl´se . . . . . . . . . . . . . . . . . o e 10.6. Az ´ ırand´ ´s olvasand´ pufferek kiv´laszt´sa . oe o a a 10.7. Pufferek maszkol´sa . . . . . . . . . . . . . . . a 11.A fragmentumokon v´grehajtott e 11.1. Kiv´g´si vizsg´lat . . . . . . . . a a a 11.2. Alfa-vizsg´lat . . . . . . . . . . a 11.3. Stencilvizsg´lat . . . . . . . . . a

vizsg´latok ´s a e . . . . . . . . . . . . . . . . . . . . . . . . . . .

m˝ veletek u 82 . . . . . . . . . . . . . . . 82 . . . . . . . . . . . . . . . 83 . . . . . . . . . . . . . . . 84

´ TARTALOMJEGYZEK 11.4. M´lys´gvizsg´lat . . . . . . . . . . . . . . . e e a 11.5. Sz´ ınkombin´l´s, dithering, logikai m˝veletek aa u 11.5.1. Sz´ ınkombin´l´s . . . . . . . . . . . . aa 11.5.2. Dithering . . . . . . . . . . . . . . . 11.5.3. Logikai m˝veletek . . . . . . . . . . . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

III 86 87 87 88 88

12.Kiv´laszt´s, visszacsatol´s a a a 90 12.1. Kiv´laszt´s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 a a 12.2. Visszacsatol´s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 a 13.Text´ r´k u a 13.1. A text´ralek´pez´s enged´lyez´se . . . . . . . . . . u e e e e 13.2. Text´ra megad´sa . . . . . . . . . . . . . . . . . . . u a 13.3. Text´rahelyettes´ o . . . . . . . . . . . . . . . . . . u ıt˝ 13.4. Text´r´k m´dos´ asa . . . . . . . . . . . . . . . . . ua o ıt´ 13.5. Egydimenzi´s text´r´k . . . . . . . . . . . . . . . . o ua 13.6. H´romdimenzi´s text´r´k . . . . . . . . . . . . . . a o ua 13.7. A text´r´k r´szletess´g´nek szintje (mipmapping) . ua e e e 13.7.1. Automatikus l´trehoz´s . . . . . . . . . . . . e a 13.8. Sz˝r˝k . . . . . . . . . . . . . . . . . . . . . . . . . uo 13.9. Text´raobjektumok . . . . . . . . . . . . . . . . . . u 13.9.1. A text´raobjektumok elnevez´se . . . . . . . u e 13.9.2. Text´raobjektumok l´trehoz´sa, haszn´lata u e a a 13.9.3. Text´raobjektumok t¨rl´se . . . . . . . . . . u o e 13.9.4. Rezidens text´r´k munkacsoportja . . . . . ua 13.9.5. Text´raobjektumok priorit´sa . . . . . . . . u a 13.10. ext´raf¨ggv´nyek . . . . . . . . . . . . . . . . . . T u u e 13.11. ext´rakoordin´t´k megad´sa . . . . . . . . . . . . T u aa a 13.11.1.A megfelel˝ text´rakoordin´t´k kisz´mol´sa o u aa a a 13.11.2.Text´r´k ism´tl´se . . . . . . . . . . . . . . ua e e 13.11.3.Text´rakoordin´t´k automatikus l´trehoz´sa u aa e a 13.12. ext´ram´trix-verem . . . . . . . . . . . . . . . . . T u a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 95 95 98 99 100 101 102 102 103 104 105 105 106 106 107 107 108 109 110 110 112

14.G¨rb´k ´s fel¨ letek rajzol´sa o e e u a 14.1. B´zier-g¨rbe megjelen´ ese . . . . . . . . . . . . . . . . . . . . e o ıt´ 14.2. B´zier-fel¨let megjelen´ ese . . . . . . . . . . . . . . . . . . . . e u ıt´ 14.3. Racion´lis B-spline (NURBS) g¨rb´k ´s fel¨letek megjelen´ ese a o e e u ıt´ 14.3.1. NURBS g¨rb´k rajzol´sa . . . . . . . . . . . . . . . . . o e a 14.3.2. NURBS fel¨letek megjelen´ ese . . . . . . . . . . . . . u ıt´ 14.3.3. Trimmelt fel¨letek . . . . . . . . . . . . . . . . . . . . u 14.3.4. Hibakezel´s . . . . . . . . . . . . . . . . . . . . . . . . e 14.3.5. A NURBS objektumokat k¨zel´ o adatok visszanyer´se o ıt˝ e 14.4. G¨mb, k´p ´s k¨rgy˝r˝ rajzol´sa . . . . . . . . . . . . . . . . o u e o uu a

113 . 113 . 116 . 118 . 121 . 122 . 123 . 124 . 124 . 125

. . . . . . Allapotv´ltoz´k ´rt´k´nek lek´rdez´se a o e e e e e T´rgymutat´ a o Irodalomjegyz´k e IV . . . . . .1. . . . . . . 130 . . . . . . . . .1. 133 . . . 139 144 148 168 173 16. . . . .2. . . . . . . . o e a 15. . ´rint˝k. . . . . . . . .1.1. .A gluj f¨ ggv´nyk¨nyvt´r u e o a 15. . . u e e 15. . 130 . . . . . . G¨rb´k rajzol´sa . . .15. 130 . . . . G¨rb´ket ´s fel¨leteket megjelen´ o f¨ggv´nyek o e e u ıt˝ u e 15. Pontok. . . Fel¨letek szeml´ltet´se . . . e o a . . . . . . . . . . .K´pess´gek enged´lyez´se. . letilt´sa ´s lek´rdez´se e e e e a e e e ´ 17. . .2. norm´lvektorok . . . . . . . .

´s fel¨letrajzol´ a e u o e e a u o e u o szolg´ltat´sainak kieg´sz´ es´re a GLUJ f¨ggv´nyk¨nyvt´r. a a a e ıt´ e u e o a a eu f¨ggv´nyk¨nyvt´rt ´s a kapcsol´d´ header f´jlt mell´kelt¨k. illetve akik m´r ismernek m´s grafikus rendszert (rendszereket). Ezek a programok a GLUT ([11]).egy´bk´nt az OpenGL haszn´lat´hoz is a ır´ e ee e e a a .-4. k´rd´sekre adott v´laszok elker¨lhetetlee ee e a a e e a u nek. e u 1 . Milyen alapelemekb˝l ´p´ o e ıthetj¨k fel a k´peket? u e e 2. akik az OpenGL-el kapcsolatos ır´ a el˝ad´sokat hallgatnak.El˝sz´ o o Ez a le´ as a [3] ´s [6] k¨nyvek. Az alapelemek megjelen´s´nek milyen tulajdons´gai adhat´k meg? ee a o 5.alapvet˝ sz´m´ astechnikai ´s matematikai (f˝leg geometriai) ismeretekre van sz¨ks´g. Az OpenGL nagyon sok ”tov´bbi szolg´ltat´st” ny´jt. Az ut´bbi tev´kenys´g sor´n sz¨letett az OpenGL g¨rbe. o a ıt´ e o u e Ezt a le´ ast azok forgathatj´k legnagyobb haszonnal. GLUI ([7]) ´s a GLUJ (15. Ennek a le´ asnak a meg´rt´s´hez . fejee zet) f¨ggv´nyk¨nyvt´rakat haszn´lj´k.dll f´jlt is u e o a a a a u e a mell´kelt¨k. Milyen transzform´ci´kon mennek ´t a k´pelemek a megad´sukt´l a megjelen´s¨kig? a o a e a o eu 4. Hogyan lehet megadni ezeket a k´pelemeket? 3. Milyen tov´bbi szolg´ltat´sai vannak a rendszernek? a a a Ezeket a szempontokat ´s sorrendet aj´nljuk az olvas´nak is annak ´rdek´ben. hogy a minden el˝ismeret n´lk¨li ır´ a o e u rem´nybeli felhaszn´l´kat is bevezetik az OpenGL rejtelmeibe. Vannak le´ asok. Mivel ez saj´t fejleszt´s˝. u e o a e o o a e u Tapasztalataink szerint egy grafikus rendszer megismer´s´hez el˝sz¨r a k¨vetkez˝ ee o o o o k´rd´sekre c´lszer˝ a v´laszokat megkeresni: e e e u a 1. o a o e a a a u de ezek meg´rt´s´hez ´s haszn´lat´hoz az 1. hogy a e a o e e rendszerr˝l ´tfog´ k´pet kapjanak. amelyek arra v´llalkoznak. A futtat´sukhoz sz¨ks´ges glut32. Mi erre a feladatra nem e ao v´llalkozunk. valamint a rendszer haszn´lata sor´n szerzett tapasztalatok ır´ e o a a alapj´n k´sz¨lt. o a a a A megismer´st ´s meg´rt´st hivatottak szolg´lni a mell´kelt demonstr´ci´s proe e e e a e a o gramok.

a felhaszn´l´s sz´les o e a o u aa e sk´l´j´t t´mogatja. ami term´szetesen id˝ig´nyesebb. Windows NT. Microsoft o e a o e o o o ´s Silicon Graphics – ¨sszefog´s´val l´trehoztak egy munkacsoportot. ınes. hogy h´l´zati a e aa a a ´ e ao k¨rnyezetben is hat´konyan m˝k¨dj¨n. fejezet Bevezet´s e A Silicon Graphics (SG) kifejlesztette a Graphics Library (GL) rendszert. 3D-s). Term´szetesen a UNIX oper´ci´s rendszernek a PC-ken haszn´latos a e a o a k¨l¨nb¨z˝ v´ltozatai (pl. uo o o a a a a aa Az egyes grafikus k´rty´k elt´r˝ k´pess´g˝ek a be´p´ a a eo e e u e ıtett geometriai t´rsprocesszorok a (grafikai gyors´ ok) t´ at´l ´s sz´m´t´l f¨gg˝en. Az SG munka´llom´sok k¨zismert el˝nye a gyors ´s ig´nyes grafika. A GL t¨bb programoz´si nyelvb˝l el´rhet˝ f¨ggv´nyk¨nyvt´rakon o o a o e o u e o a kereszt¨l. t´rbeli objektumok u o e e e ´br´zol´s´ra is alkalmas (un. (Ez ao e a a az anyag nem tartalmazza az ¨sszes OpenGL parancs le´ as´t. f˝ c´lja az ig´nyes. Linux) is t´mogatj´k az OpenGL alkalmaz´sok futtat´s´t.´s szoftvergy´rt´ c´gek – t¨bbek k¨z¨tt a DEC. A rendszer alkot´i a a a e a a e uo o u a o o t¨k´letes hardverf¨ggetlens´gre t¨rekedtek. e e ıt˝ a ıt´ e ıpus´ o A legt¨bb munka´llom´s kateg´ri´j´ sz´m´ og´p t´mogatja az OpenGL-t. interakt´ sz´ a a aa ıv. vagy az ablakkezel´st t´mogatn´. e o e Az OpenGL platformt´l ´s alkalmaz´st´l f¨ggetlen rendszer. raszteres grafik´t ig´nyl˝ ala e o kalmaz´sok l´trehoz´s´nak t´mogat´sa. Windows 2000 ´s Windows XP a a e oper´ci´s rendszerek alatt az IBM PC (´s vele kompatibilis) g´peken is futtathatunk a o e e ilyen alkalmaz´sokat. ugyanis a hardver ´ltal nem ao e a e e a t´mogatott funkci´kat szoftverrel kell megval´s´ a o o ıtani. Az OpenGL-t ugy tervezt´k. Ez a koncepci´ olyan sikeresnek bizonyult.1. hogy o a a o vezet˝ hardver. Az OpenGL alkalmaz´sok portaıt´ ıpus´ o e a ao u o a bilit´sa ´rdek´ben ezzel nem kell t¨r˝dnie a programoz´nak. amely a felhaszn´l´i grafikus adatbevitelt. ami az ´ltaluk a gy´rtott munka´llom´sok grafikus lehet˝s´geinek min´l hat´konyabb kihaszn´l´s´ra kia a a oe e e aa a alak´ ıtott koncepci´. WIN’98. m´g akkor is. Intel. a Az OpenGL teljesen hardverf¨ggetlen. a pixelm˝veleteket ig´nyl˝ k´pfeldolgoz´st´l a bonyolultabb fel¨leaaa a u e o e a o u tek ig´nyes megjelen´ es´t (l´that´s´g. hogy az adott e e ıt˝ e o a funkci´t t´mogatja-e a grafikus k´rtya hardver szinten. Ezt a felhaszn´l´ csak a sebess´g alapj´n ´rz´keli. de a PCo a a o a u a ıt´ e a s vil´gban haszn´lt WIN’95. amit hardu a a o o e e ver oldalr´l a grafikus k´rty´ba ´p´ o a a e ıtett egy vagy t¨bb geometriai t´rsprocesszor (SG tero a minol´gi´val geometry engine) t´mogat. text´ra) is megk¨vetel˝ CAD alkale ıt´ e a oa a ıt´ u o o maz´sokon ´t a gyors k´pv´lt´sokra ´p¨l˝ val´s idej˝ anim´ci´ig. ugyanis az alkalmaz´s a e e oo o a eredm´ny´t megjelen´ o szerver g´p megfelel˝ programja vizsg´lja meg.) Ezen funkci´k mego ır´ a o 2 . IBM. megvil´g´ as. ha az alkalmaz´st futtat´ (klio e u o o e a o ens) sz´m´ og´p t´ a ıt´ e ıpusa elt´r az eredm´nyt megjelen´ o (szerver) sz´m´ og´p t´ at´l. ez´rt a t¨bb mint 100 parancs k¨z¨tt nincs o e u e o e o o o olyan. amely ez alapj´n e o aa e a specifik´lta az OpenGL-t. ´s ennek megfelel˝en hajtja v´gre o a a e o e azt.

Az OpenGL is folyamatos fejleszt´s alatt o e e ´ll. u o A le´ as sor´n alkalmazott szintaxis ır´ a 1. hogy mit ne v´rjunk az OpenGL-t˝l. Mindenekel˝tt: az a o o OpenGL nem geometriai modellez˝rendszer. Val´sz´ uleg az ´ri´si j´t´kprograma u a o o ın˝ o a ae piacnak k¨sz¨nhet˝en egyre t¨bb grafikus k´rtya hardverb˝l t´mogatja az OpenGL-t. ugyanis egy-egy adategy¨ttest o o u e e u t¨bbf´lek´ppen is megadhatunk. ami azt jelenti. GLenum.val´s´ as´ra az OpenGL implement´ci´khoz kapcsol´d´ kieg´sz´ o f¨ggv´nyk¨nyvt´rak o ıt´ a a o o o e ıt˝ u e o a biztos´ ıtanak lehet˝s´get. a sz¨gletes z´r´jelek [ ] k¨z¨tt felsoroltakb´l pedig legfeljebb egyet lehet. a o ao o o o Ilyen helyzettel a f¨ggv´nyek nev´nek v´g´n tal´lkozunk. m´g a programok o au e e a e u o e forr´snyelvi szint˝ portabilit´sa is megoldhat´. A param´terek lehets´ges t´ a a e e ıpusai r¨vid´ es adatt´ o ıt´ ıpus b s i f d ub us ui 8 bites eg´sz e 16 bites eg´sz e 32 bites eg´sz e 32 bites lebeg˝pontos o 64 bites lebeg˝pontos o 8 bites eg´sz e 16 bites eg´sz e 32 bites eg´sz e a megfelel˝ C o nyelvi t´ ıpus signed char short long float double unsigned char unsigned short unsigned long az OpenGL-ben defini´lt t´ a ıpus GLbyte GLshort GLint. A megnevez´sben az o e o o e o e egyes szavak nagybet˝vel kezd˝dnek. GLboolean GLushort GLuint. hihetetlen¨l gyorsan v´ltoz´ ıv¨ e o ın˝ u a o hardver-szoftver k¨rnyezetet figyelembe v´ve. ahol is a funkci´t le´ o szau e e e e a o ır´ vak ut´n sz´m ´s bet˝ szerepelhet.3 vagy 4 koordin´t´j´val. grafikus rendszerek. melyek arra utalnak. Ennek k¨sz¨nhet˝en sz´les k¨rben elae e e ıt´ e o o o e o terjedt. a ır´ o Nagyon fontos azt is tudnunk. Sz´mos ilyen k¨nyvt´r van. ´ minden munka´llom´s ıgy a a kateg´ri´j´ g´pen ´s a n´lunk legn´pszer˝bb PC-ken is futtathat´k. amely lehet˝v´ oe a o a o u o e teszi az alkalmaz´sok forr´snyelvi szint˝ portabilit´s´t munka´llom´sok ´s PC-k k¨z¨tt. Az OpenGL azonban rendk´ ul alkalmas a geoıv o ıv¨ metriai modellez˝rendszerek. pl. amit a v´grehajtand´ funkci´ angol megnevez´se k¨vet. jelen le´ as az 1. milyen t´ u a a e u a ıpus´ vagy milyen m´don adhat´ meg a f¨ggv´ny param´tere. A f¨ggv´nyek neve mindig gl-el o u e ıv´ a a u e kezd˝dik. k¨zt¨k olyan is. GLcampf GLdouble. teh´t nincsenek benne ¨sszetett geometriai o a o objektumok megad´s´ra. de m´g az interakt´ o e ıv j´t´kprogramok grafikai ig´nyeinek kiel´g´ es´re is. o o e Az OpenGL szintaxisa Le´ asunkban az OpenGL C nyelvi felhaszn´l´i fel¨let´t haszn´ljuk. o o o o a o a ami jelent˝sen megn¨veli a sebess´get. manipul´l´s´ra alkalmas parancsok. Az OpenGL-t haszn´l´ alkalmaz´sok t¨bb g´pt´ ao a o e ıpuson. GLsizei GLfloat. Az egyes paranır´ ao u e a csokat a megfelel˝ f¨ggv´ny h´ as´val aktiviz´lhatjuk.2 verzi´t ismerteti.1. a a u aa a a e o o Ez egy rendk´ ul fontos eredm´nynek tekinthet˝ a soksz´ u. GLclampd GLubyte. CAD rendszerek. glPolylineMode(). Az OpenGL nem interaa aa a akt´ rajzol´. t´bl´zat. P´ld´ul o e e e a glVertex {234}{sifd}[v]().GLbitfield A kapcsos z´r´jelek {} k¨z¨tt felsorolt lehet˝s´gek k¨z¨l pontosan egyet k¨telez˝ ao o o oe o u o o v´lasztani.vagy grafikus rendszer. ezek u aaa 3 . hogy a cs´cspontot megadhatjuk 2. hogy h´ny darab.

a o e a o e a A GLUT haszn´lata eset´n programunk forr´snyelvi szinten port´bilis lesz a k¨l¨nb¨z˝ a e a a uo o o platformok. ıt´ Az OpenGL nagyon hat´kony. Ez cs¨kkenti a felhaszn´l´i program m´ret´t. hogy a GLX minden OpenGL implement´ci´nak r´sze. mely az ablakkezel´st ´s a grafikus adatbevitelt teszi lehet˝v´. e e T¨bb ´llapotv´ltoz´ valamilyen m´dra. GL TRIANGLE STRIP. p´ld´ul ıtj¨ a o ır´ e a az ¨sszes lehets´ges megad´si m´dot jel¨li. ´s a param´terek ır´ a a u e e e e megad´s´nak m´dja a t´rgyalt probl´ma megold´sa szempontj´b´l l´nyegtelen. akkor a * aa o a e a a o e karakterrel helyettes´ uk a megad´si m´dot le´ o karaktereket. hogy nem kell minden egyes rajzol´si parancs e a el˝tt a rajzol´s sz´ et is be´ll´ o a ın´ a ıtanunk. Teh´t a e a aa o ım´ a glVertex3f(1.. u e e ır´ e a a o a a o A kurrens ´llapotv´ltoz´k a glPushAttrib() paranccsal t´rolhat´k az atta a o a o rib´tumveremben (stackben)..3. a GLX helyett mi e a o e a hasonl´ c´l´ GLUT (OpenGL Utility Toolkit) f¨ggv´nyk¨nyvt´rt prefer´ljuk. ez´rt ¨sszetett alakzatok ´br´zol´s´ra. tov´bb´ kurrens ´rt´k¨k mindig lek´rdezhet˝ a a a o e e a a e e u e o lek´rdezend˝ adat t´ at´l f¨gg˝en a glGet*() f¨ggv´nyek valamelyik´vel. Ha a megnevez´s t¨bb sz´b´l ´ll. melynek m´g a forr´sk´dja is rendelkez´sre ´ll.2. programr´szletek ugyanazt eredm´nyezik. de csak egyszer˝ rajzol´si ´s azt seg´ o parancsokat tare u a e ıt˝ talmaz. mivel ez o eu u e o a a egy szabadon haszn´lhat´ szoftver ([11]). mint egy saj´t t´rol´si rendszer kiu a e a a a alak´ asa. u o Minden OpenGL implement´ci´ r´sz´t k´pezi a GLU (OpenGL Utility) k¨nyvt´r. fejezetben tal´lhat´.1.}.2.. A m´sik. Ilyen pl.). Mindenk´ppen sz¨ks´g¨nk van olyan f¨ggv´nyk¨nyvt´rra. pl. Ezeket a glEnable() o a a o o oe paranccsal lehet enged´lyezni ´s a glDisable() paranccsal le lehet tiltani.t´ ıpusa lehet short.vagy glob´lis v´ltoz´ a a e ´ a a a o van. integer. speci´lis grafikai probl´m´k megold´s´ra e o a a aa a e a aa saj´t f¨ggv´nyeket kell ´ a u e ırnunk. vagy ´tadhatjuk a koordin´t´kat tartalmaz´ vektor c´ et is. ´s a grafikus adatbevitelt lehet˝v´ teszi. melyek kurrens ´rt´ke szerint hajtja v´gre a rendszer a parancsokat.. glVertex3fv(p). tov´bb´ felsorolhatjuk a koordin´t´kat a a aa egyenk´nt. A glGet*() e o ıpus´ o u o u e e f¨ggv´ny r´szletes le´ asa ´s az ´llapotv´ltoz´k teljes list´ja a 17. e e Ha a le´ as sor´n puszt´n a f¨ggv´ny nev´re akarunk hivatkozni.3. akkor a szavakat az al´h´z´s o e o o o a a u a karakterrel v´lasztjuk el. t´bl´zat tartalmazza. pl. valamint g¨rb´k ´s fel¨letek ´br´zol´s´ban ny´jt o e ee o e e u a a aa u seg´ eget. a ´ Allapotv´ltoz´k a o A rendszerben sz´mos glob´lis param´ter. float vagy double. a o e e e o a mely a t´rnek s´ e ıkra val´ lek´pez´s´ben. az e e e objektumok sz´ ıne. ´s a e float p[] = {1. ugynevezett ´llapot. hanem a rendszer az ´llapotv´ltoz´ban t´rolt ´rt´ket a a o a e e haszn´lja. a UNIX ´s WINDOWS oper´ci´s rendszerek k¨z¨tt. ´s n¨veli a program v´grehajt´si a o ao e e e o e a sebess´g´t. lehet˝s´gre utal. e a o o o 4 . A param´terek lehets´ges t´ o e a o o e e ıpusainak list´j´t aa az 1. a a Az OpenGL-ben defini´lt konstansok neve GL-el kezd˝dik ´s a n´vben szerepl˝ szavak a o e e o nagybet˝vel ´ u ırand´k. majd a glPopAttrib() paranccsal ujra bet¨lthet˝k onnan. e u e u u e o a amely az ablakkezel´st. e e o e Annak ellen´re. Ilyen c´l´ parane e o e eu csok ugyanis nincsenek az OpenGL-ben. mivel ezek megval´s´ asa nagym´rt´kben hardo ıt´ e e verf¨gg˝. Minden e e ´llapotv´ltoz´nak van alap´rtelmez´se. u ´ o o Az attrib´tumverem haszn´lata sokkal hat´konyabb. A glVertex*(). minden¨tt megtal´lhat´ k¨nyvt´r a GLX (az OpenGL kiterjeszt´se ıts´ a u a o o a e az X Window rendszerre). ami azt eredm´nyezi.

a o 5 . hogy nem szabae o a a don haszn´lhat´. ennek egyetlen h´tr´nya.Ugyanez ´rhet˝ el a Qt rendszerrel is ([10]).

2. void glClearColor (GLclampf red.. GLclampf blue. GLclampf alpha). Ablak t¨rl´se o e Az ablak t¨rl´se az ablakot k´pvisel˝ t´glalapnak a h´tt´rsz´ o e e o e a e ınnel val´ kit¨lt´s´t jelenti. a raszteres objektumok rajzol´s´val pedig a 9. fejezet Rajzol´s az OpenGL-ben a Az OpenGL-ben h´rom rajzol´si alapm˝velet van: a a u • ablak t¨rl´se. vagy a szemet kev´sb´ irrit´l´ o o e ır ın´ o e e e ao halv´nysz¨rke a szok´sos h´tt´rsz´ a u a a e ın. Erre a a o a a u o e GLX vagy GLUT k¨nyvt´rban tal´lunk f¨ggv´nyt. A t¨rl´si sz´ alap´rtelmez´se (0. eo e aa e e 2. A a o e sz´ ınmegad´si m´d kiv´laszt´sa hardverf¨gg˝. a • raszteres objektum rajzol´sa. 0. a Ebben a fejezetben csak az ablak t¨rl´s´vel foglalkozunk. mag´t a e ın´ a e a t¨rl´st pedig a glClear(GL COLOR BUFFER BIT) paranccsal hajthatjuk v´gre. ez´rt erre nincs OpenGL parancs.). a e ınt e void glClearIndex (GLfloat c). A t¨rl´si sz´ kurrens ´rt´k´t ´ll´ o e ın e e e a ıtja be RGBA sz´ ınmegad´si m´d eset´n.. a o e ın e e a a o fekete h´tt´rsz´ eredm´nyez. A t¨rl´si sz´ o e ınindex kurrens ´rt´k´t ´ll´ be sz´ e e e a ıtja ınindex-m´d eset´n. fejezetben. fejezetben. 1. ez e e a o o a o az alap´rtelmez´s. a geometriai alapelemek o ee rajzol´s´val a 3. o o ee sz¨vegszerkeszt˝ eset´n pl. a pap´ sz´ et jelent˝ feh´r. 0. vagyis nem kell minden t¨rl´s el˝tt a e ınt a a o a o e o megadnunk. hat´kony felhaszn´l´s ´rdek´ben. Az ablak t¨rl´s´hez a glClearColor() paranccsal ´ll´ o ee a ıthatjuk be a h´tt´r sz´ et. o e 6 . ami teljesen ´tl´tsz´. 0. GLclampf green.] o a a u e e intervallumra lev´gja. A param´tereket a rendszer a [0. o e • geometriai objektum rajzol´sa. aa aa K´tf´le rajzol´si m´d van: a k¨zvetlen (azonnali) rajzol´si m´d (immediate mode).1.. A o e h´tt´rsz´ egy ´llapotv´ltoz´ban t´rolja a rendszer.. ´s lehet˝s´g van a rajzol´si parancsoknak display-list´n val´ t´rol´s´ra e e e oe a a o a aa a k´s˝bbi.

ıt´ e e a a aa a 7 . hogy az e u o e e o e e egyidej˝ t¨rl´s egyetlen hardver eset´n sem lass´ a folyamatot. sz´ es. oo void glClear (GLbitfield mask ). hogy megteljen a csomag. Sz´mos grafikus hardver eset´n e o u a e hat´konyabb a pufferek egyidej˝ t¨rl´se. akkor az adat´tvitel csomao e uo o o e a gokban t¨rt´nik. hogy a v´grehajt´s v´ges id˝n bel¨l befejez˝dik. Kik´nyszer´ a kor´bban kiadott OpenGL parancsok v´grehajt´s´nak megkezd´s´t. e a e a e o u o Az anim´ci´kor haszn´lt puffer-cser´l˝ parancs (swap buffer) automatikusan kiadja a a o a eo glFlush() parancsot. T¨rli a megadott puffert (puffereket) a megfelel˝ ´llapotv´ltoz´ kurrens ´rt´ke szerint. a o oo o a t´bl´zatban tal´lhat´.2. Adott esetben hossz´ ideig a a a u v´rhatunk arra. text´ralek´pez´s) ezt megjelen´ esi l´ncnak (graphics a o a a ınez´ a a u e e ıt´ a pipeline) nevezz¨k. mint az egyenk´nti t¨rl´s.1. ha az – a sz´m´ra fenntartott puffer – m´r megtelt. amikor nem el´g puszt´n kik´nyszer´ e a e ıteni a grafikus parancsok v´grehajt´s´nak megkezd´s´t. A csomagok elk¨ld´s´t a glFlush() paranccsal a u ee k´nyszer´ e ıthetj¨k ki. A t¨r¨lhet˝ pufferek teljes list´ja a 2. Az adat´tvitel hat´konys´ga ´rdek´ben a rendszer csak akkor k¨ldi el a o e a e a e e u csomagot. hogy az el˝z˝ v´gigmenjen a m˝veleti soron.Az OpenGL-ben a glClear() paranccsal lehet a puffereket t¨r¨lni. Ezeket a m˝veleteket ´ltal´ban m´s-m´s. t´bl´zat. e ıti a e aa ee ´s garant´lja. ha a kliens ´s a szerver k¨l¨nb¨z˝ g´peken van. vagyis a v´grehajt´s nyugt´z´s´t v´rjuk (pl. hanem arr´l is meg kell gy˝z˝dni. mivel az ablak minden pixel´re (ezek sz´ma a milli´t is o e o e e a o meghaladhatja) el kell v´gezni a megfelel˝ m˝veletet. ´s ilyenkor a CPU csak elk¨ldi a parancsot ´s nem v´r a a e e u e a k¨vetkez˝ parancs kiad´s´ig arra. o oa a o e e T¨bb puffer egyidej˝ t¨rl´se eset´n a pufferek azonos´ oj´t a bitenk´nti VAGY m˝velettel o u o e e ıt´ a e u (C nyelvben a | oper´torral) kell ¨sszekapcsolni. u o e e ıtja 2. hogy a grafikus harde aa ee o o o ver ezeket az utas´ asokat v´gre is hajtotta. ´rnyal´s. Van olyan eset. A rajzol´s befejez´s´nek kik´nyszer´ ese a e e e ıt´ A rajzol´si parancs kiad´s´t´l az objektum megjelen´s´ig sok minden t¨rt´nik (transza aao ee o e form´ci´k.1. a a a o 2. H´l´zati o o aa o o e u ao k¨rnyezetben. ´s biztos. az adott c´lra kifejlesztett u u a a a a e speci´lis hardver hajtja v´gre. v´g´s. Az OpenGL pufferei a a puffer sz´ ınpuffer m´lys´gpuffer e e gy˝jt˝puffer u o stencilpuffer azonos´ oja az OpenGL-ben ıt´ GL COLOR BUFFER BIT GL DEPTH BUFFER BIT GL ACCUM BUFFER BIT GL STENCIL BUFFER BIT A t¨rl´s id˝ig´nyes feladat. u void glFlush (void).

o ee e 8 . e e a e aa ee Ezen parancs t´l gyakori haszn´lata a grafikus teljes´ eny (rajzol´si sebess´g) jelent˝s u a ıtm´ a e o cs¨kken´s´t eredm´nyezheti. ´s nem adja vissza e ıti a e aa e a vez´rl´st a kor´bban kiadott parancsok teljes v´grehajt´s´nak befejez´s´ig. miel˝tt felhaszn´l´i e e o o ao interakci´t enged´lyezn´nk). Ennek megold´s´ra szolg´l a glFinish() parancs.biztosak akarunk lenni abban. o e e aa a void glFinish (void). hogy a k´p megjelent a k´perny˝n. Kik´nyszer´ a kor´bban kiadott OpenGL parancsok v´grehajt´s´t.

Ha a z koora aa o ım´ a din´t´t nem adjuk meg. aa uo o ¨ u o e e u aa a a fejezetet)! Cs´cspontokat a glVertex*() paranccsal adhatunk meg. (x. e ıti a Ne feledj¨k. 1. ez´rt a megadott koordin´t´kat minden esetben t´rbeli projekt´ koordin´t´kk´ a ıt´ e aa e ıv aa a eg´sz´ ki az al´bbiak szerint: (x. Geometriai alapelemek megad´sa a A geometriai alapelemeket cs´cspontok seg´ eg´vel lehet le´ u ıts´ e ırni. y).´ll´ u e ıt˝ o o o a ıthatunk el˝. y) → (x. 0. lesz. Sz´ lesz o o m´g ezen alapelemek megjelen´s´t meghat´roz´ tulajdons´gok megad´s´r´l is. A vektor haszn´lata ´ltal´ban hat´konyabb. A cs´cspontokat 2. 3 vagy 4 koordin´t´val. y. z. ha a glBegin() ´s e e e e glEnd() parancsp´r k¨z¨tt adtuk ki. Az e aa e e aa OpenGL a h´romdimenzi´s projekt´ t´r homog´n koordin´t´ival v´gez minden bels˝ a o ıv e e aa e o sz´m´ ast. t´rbeli (x. mega o o e e e a a a vil´g´ asi sz´m´ asokn´l van sz¨ks´g. vagy r¨viden norm´lis. 1.1. melyek t´ a a o u o aa ıpusa short. hogy az OpenGL-ben egy-egy ¨sszetett geometriai alako zatot milyen egyszer˝ ´p´ ok¨vekb˝l . a ao a o a A norm´lvektorokra kit¨lt¨tt poligonok ig´nyes szeml´ltet´se sor´n az ´rnyal´si. ır´ a u e u aa a V´laszt´st´l f¨gg˝en megadhatjuk 2.) . Ezt a parancsot csak akkor hajtja v´gre a rendszer. z) → (x.). e ee a o a aao 3. w) homog´n koordin´t´kkal. u void glVertex{234}{sifd} (TYPE coords). f vagy d) v´ltoz´kat. integer. i. z. z) der´ksz¨g˝ e e o u Descartes–f´le koordin´t´kkal. a meg nem adott w aa e e ´rt´ke pedig 1..geometriai alapelemekb˝l . A TYPE jel¨l´s azt jelenti. y. z. tov´bb´ felsorolhatjuk a koordin´t´kat egyenk´nt. vagy t´rbeli (x. void glVertex{234}{sifd}v (const TYPE *coords). y. konstansokat vagy c´ ıpus´ u a o ımet kell megadni. vagy a a aa e ´tadhatjuk a koordin´t´kat tartalmaz´ vektor c´ et (a m´sodik forma). Egy fel¨let valamely pontj´ban vett norm´lis´n azt a ıt´ a ıt´ a u e u a a a 9 . float vagy double lehet. y/w. fejezet Geometriai alapelemek rajzol´sa a Ebben a fejezetben azt ´ ırjuk le. 3 vagy u 4 koordin´t´val lehet megadni. z/w) alakban ´ll´ e a ıthatjuk el˝ a pont Descartes–f´le kooro e din´t´it! K¨l¨n¨sen ugyelj¨nk erre a NURBS g¨rb´k ´s fel¨letek megad´s´n´l (l´sd a 14. y. Geometriai objektumok le´ as´hoz sz¨ks´ges cs´cspont megad´s´ra szolg´l.3. a a a e ıtja e a aa A m´sik fontos defini´l´ adat a norm´lvektor. hogy a kiv´lasztott a o o oe a t´ u (eset¨nkben s. y. hogy amennyiben (x. akkor annak ´rt´ke automatikusan 0. azaz megadhatjuk s´ aa ıkbeli (x. y. ugyanis gyors´ a param´terek ´tad´s´t. w = 0 eset´n (x/w. w) homog´n koordin´t´kkal adunk meg egy u e aa pontot.

sk´l´z´s).] intervallumra. Az OpenGL-ben csak ir´ny´ a u o e a ıthat´ fel¨letek kezelhet˝k. hogy a k´pen k¨zel´ o poli´der a ıt´ e e e e e o ıt˝ e ´lei ne l´tszanak. o u o Ezeknek a fel¨leteknek k´t oldala k¨l¨nb¨ztethet˝ meg. y ´s z ir´nyban azonos m´rt´k˝ sk´l´z´snak) vetj¨k oa a o e a e e u aa a u e u e u al´. Az OpenGL-ben minden cs´csponthoz legfeljebb egy norm´list a a u a rendelhet¨nk. a e e a e A norm´lisoknak csak az ir´ny´ra ´s ir´ny´ as´ra van sz¨ks´g. akkor a glEnable(GL RESCALE NORMAL) paranccsal c´lszer˝ enged´lyen¨nk a a norm´lisok ujrask´l´z´s´t. v0 ) pontj´ban vett norm´lisa a e a u a a ∂ ∂ s (u0 . vagyis az ˝ket meghat´roz´ cs´cspontok ´s norm´lisok o a o u e a k¨l¨nb¨z˝ modelltranszform´ci´kon mennek ´t. v0 ) × s (u0 . Ez´rt aba oa aa a a a e ban az esetben.. vagyis azt. A rendszer alap´rtelmez´sk´nt nem enged´lyezi ´ e u e e e e 10 . hogy a a a azok ujra egys´gnyi hossz´ak legyenek. Ezt a glEnable(GL NORMALIZE) parana a ccsal tehetj¨k meg. ´ltal´ban u a e a a ıt´ a a a a z´rt fel¨letb˝l kifel´ mutatnak. TYPE ny. hogy a rendszer a n´z˝pont-modell transza ´ aa a a e o form´ci´b´l kisz´m´ a o o a ıtott konstanssal megszorozza a norm´lisok transzform´ltj´t. normaliz´lt) norm´lvektorokat megadni. 1. Mint l´tni fogjuk. v0 ) ∂u ∂v vektor. void glNormal3{bsifd}v (const TYPE *v ).a vektort ´rtj¨k. t¨bbu a a a o u o nyire h´romsz¨gekkel k¨zel´ uk. ha nem egys´gnyi norm´lvektorokat adunk meg. s. a cs´csponthoz a pontban tal´lkoz´ lapok norm´lisainak az ´tlag´t e a u a o a a a rendelj¨k norm´lisk´nt. i e e e v´ltozat eset´n a rendszer a param´tereket line´risan lek´pezi a [−1. enged´lyezn¨nk kell. hogy a norm´lvektorok a ıt´ a ıt´ a e a hossza egys´gnyi (ezek seg´ eg´vel sz´m´ e ıts´ e a ıtja a sz¨geket). ´s t¨bb cs´csponthoz is hozz´rendelhetj¨k ugyanazt a norm´list. A kurrens u e o u a u a norm´list a glNormal*() paranccsal adhatjuk meg. ua u u a a a a fejezetet) a geometriai alapelemek. e e a A rendszer minden ujonnan l´trehozott cs´csponthoz a kurrens (az utolj´ra megadott) ´ e u a norm´list rendeli hozz´. ´s a k¨zel´ o poligonokat jelen´ uk meg valamilyen mega o o ıtj¨ e o ıt˝ ıtj¨ vil´g´ asi rendszer figyelembe v´tel´vel. A norm´lisok ir´ny´ as´t ezeknek u e uo o o a a ıt´ a megfelel˝en kell ´rteni. ez´rt c´lszer˝ egys´gnyi o e e u e hossz´s´g´ (´n. A fel¨letek legelterjedtebb ´br´zol´si m´dja. TYPE nz ). a void glNormal3{bsifd} (TYPE nx. azaz a fel¨let ´rint˝s´ ara. Amennyiben a transzform´ci´k valameuo o o a o a a o lyike nem egybev´g´s´g (pl. Ha egys´gnyi hossz´s´g´ norm´lisokat adunk meg. v) param´teres form´ban adott fel¨let (u0 . y. csak az egys´ges t´rgyal´sm´d u e ee e o e e a a o ´rdek´ben haszn´ljuk. a hosszuk k¨z¨mb¨s. z) = 0 implicit form´ban adott´ pedig a a e ∂ ∂ ∂ F. F ∂x ∂y ∂z . hogy a fel¨letet poligonokkal. A b. mely az adott pontban mer˝leges a fel¨letre. hogy az OpenGL a o u a e u automatikusan normaliz´lja a norm´lisokat. (l´sd az 5. Ny´ o e a u a ılt fel¨let eset´n a kifel´ ´s befel´ jelz˝knek nincs sok ´rtelme. A norm´lisok ir´ny´ as´nak konzisztensnek kell lenni. e u o u u e o ıkj´ Az s (u. vagy nem egybev´g´s´gi e a a oa modelltranszform´ci´nak vetj¨k al´ alakzatunkat. A kurrens norm´lvektort ´ll´ a a ıtja be a param´terekkel megadott ´rt´kre. Annak ´rdek´ben. A a a a e a ıt´ a u e o o o megvil´g´ asi sz´m´ asok sor´n azonban a rendszer azt felt´telezi. a norm´lvektorok hossza megv´ltozhat. F. az F (x. azaz a norm´lisok a fel¨letnek ugyanazon oldal´n legyenek. ´s a modellt csak u e ua u a e hasonl´s´gi transzform´ci´nak (x.

b´r m´s lehet˝s´gek is vannak. a e Ponthalmaz konvex burk´n a halmazt tartalmaz´ konvex ponthalmazok metszet´t a o e ´rtj¨k.1. void glRect{sifd} (TYPE x1. ´bra.y2 ). ez´rt u aa e e e e a e csak a nem v´rt eredm´ny figyelmeztet benn¨nket arra. void glRect{sifd}v (TYPE *v1. S´ e u ıkbeli v´ges ponthalmaz konvex burka konvex poligon ´ltal hat´rolt s´ e a a ıktartom´ny. M´r egy nem s´ a ıkbeli egyszer˝ n´gysz¨g eset´n u e o e 11 . vagyis konk´v. hogy csak s´ ıt´ ıkbeli (nem csak koordin´tas´ a ıkbeli) poligont tud a rendszer helyesen megjelen´ ıteni. Ez az egyetlen kiv´tel. az a o aa o e a ujrask´l´z´s viszont ´ltal´ban hat´konyabb. e a u e mely egyik ´tl´j´nak v´gpontjai (x1. hogy a megrajzol´s sor´n term´szetesen mindkett˝nek van kiterjed´se. rajzol´s´ra k¨l¨n o e o o aa uo f¨ggv´nyt hoztak l´tre.sem az automatikus normaliz´l´st sem az ujrask´l´z´st. amit t¨bbnyire a a oo a a u e o ter¨let kifest´s´vel jelen´ meg. Az OpenGL csak konu ee ıt a a oe vex s´ ıkbeli poligonokat tud helyesen megjelen´ ıteni. a a u e o e amikor geometriai alapelemet nem cs´cspontjaival (nem a glVertex*() paranccsal) adu hatunk meg. A sz´m´ og´pi grafik´ban a g¨rb´ket t¨bbnyire a ıt´ e a o e o egyenes szakaszokkal k¨zel´ uk. Az (x. ha a benne fekv˝ b´rmely z´rt s´ orbe egy a o u o o a a ıkg¨ pontra h´zhat´ ¨ssze ugy. ha valamennyi cs´csa k¨l¨nb¨z˝. amit be´ll´ a a ıthatunk. Elk´pzelhet˝. A 3. a Ezt illusztr´lja a 3. TYPE y1. uo e a a e o e illetve vastags´ga. a o e koordin´tatengelyekkel p´rhuzamos oldal´ t´glalap rajzolhat´. A t´glalap. ugyanis b´rmilyen poligont megadhaıt´ e u a tunk cs´cspontjaik felsorol´s´val. nem egyszeresen ¨ssa o zef¨gg˝.2. e a e aa A pont ´s az egyenes szakasz alapelemek a geometri´ban megszokottakat jelentik. illetve vektoros megad´s eset´n a v1 a oa e e a e ´s v2 vektorok tartalmazz´k a v´gpontok koordin´t´it. hogy az egyszeresen ¨sszef¨gg˝ s´ o u o ıktartom´nyban nem lehetnek lyukak. azaz a g¨rb´be ´ t¨r¨ttvonallal. a A 3. a a o u o a Egy soksz¨get egyszer˝nek nevez¨nk. hogy n´mely aa ´ aa a e o e OpenGL implement´ci´ban az automatikus normaliz´l´s cs¨kkenti a hat´konys´got. mint az ´ltal´nos normaliz´l´s.y1 ) ´s (x2. vagy nem egyszer˝ poligonok megrajzol´s´val gondok lehetnek m´g akkor is. hogy k¨zben mindig a tartom´nyban marad. mellyel az (x. ´s az oldalak nem metszik egym´st bels˝ o o a e a o pontban. a rendszer nem v´gez ´rv´nyess´gi vizsg´latokat. o ıtj¨ o e ırt o o Az OpenGL poligonon z´rt t¨r¨ttvonal ´ltal hat´rolt ter¨letet ´rt.3. Szeml´letesen u o o ´ o a e azt mondhatjuk. Geometriai alapelemek megjelen´ ese ıt´ Az OpenGL-ben a cs´cspontok seg´ eg´vel pont. y) koordin´tas´ u e e a ıkban ´tl´inak v´gpontjaival adott. a a Nagyon fontos megszor´ as. szakasz ´s poligon geometriai alapu ıts´ e e elemek rajzolhat´k. ´ aa a a a e a a aa 3. hogy a megadott poligont nem a e u tudja kezelni a rendszer. TYPE y2 ). azzal e a a k¨l¨nbs´ggel.2. egyik cs´cs o u u u uo o o u sem bels˝ pontja a soksz¨g valamely oldal´nak. ´br´n p´ld´kat l´thatunk nem egyszer˝ soksz¨gekre. Egy s´ ıktartom´ny egyszeresen ¨sszef¨gg˝. Ilyen nem v´rt eredm´ny lehet egy konk´v poligon eset´n a a e a e poligon konvex burk´nak megjelen´se. TYPE x2. a a e a a u o Ezekre a megszor´ asokra c´lszer˝ odafigyelni. TYPE *v2 ). mint gyakran el˝fordul´ alakzat. y) koordin´tas´ a ıkon az x ´s y tengelyekkel p´rhuzamos oldal´ t´glalapot rajzol. ´br´n nem egyszeresen ¨sszef¨gg˝ alakzatot l´thatunk. ha u o u aa e azok s´ ıkbeliek.

Az ut´bbin o u a e a a o o j´l ´rz´kelhet˝ a probl´ma. ´bra. ´bra. t´bl´zat tartalmazza. ha g¨rb¨lt fel¨leteket k¨zel´ unk poligonokkal.1. e u a o Az OpenGL-ben a geometriai alapelemeket a glBegin() ´s glEnd() parancsok k¨z¨tt e o o felsorolt cs´cspontokkal hozhatunk l´tre. egyszeresen ¨sszef¨gg˝ poligonnal nem o u o fordulhat el˝. a szemk¨zti oldalak metszik egym´st. A glBegin() param´ter´vel azt adjuk meg. hogy a k¨l¨nb¨z˝ transzform´ci´k k¨vetkezt´ben a n´gysz¨g k´pe nem o uo o o a o o e e o e egyszer˝ n´gysz¨g lesz. A 3. ´br´n ilyen u e o o a a a csokornyakkend˝ szer˝ alakzatot l´tunk ´leivel ´br´zolva. Poligonok ´ltal hat´rolt nem egyszeresen ¨sszef¨gg˝ s´ a a a o u o ıktartom´ny a 3. Geometriai alapelemeket le´ o cs´cspontok list´j´nak v´g´t jel¨li. Nem egyszer˝ soksz¨gek a u o is el˝fordulhat. illetve kit¨ltve. Ez´rt abban az esetben.2. ır´ u aa e e o 12 . o e o u u o ıt¨ c´lszer˝ h´romsz¨geket alkalmaznunk.4. Ez s´ o e e o e ıkbeli konvex. A mode t´ u geometriai alapelemet le´ o cs´cspontok list´j´nak kezdet´t jel¨li. u e e void glBegin (GLenum mode).1. e e e e a a void glEnd ().3. hogy u e e e a felsorolt cs´cspontokat milyen geometriai alapelemk´nt kell ´rtelmezni. pl. A ıpus´ ır´ u aa e o mode param´ter lehets´ges ´rt´keit a 3.

Ha n p´ratlan. Ha n nem h´rom t¨bbsz¨r¨se.3. vn−1 jel¨l´ssel hivatkoe u u e oe zunk. ´s ezekre a v0 . akkor u a a o oo a fennmarad´ egy. ´bra. Teh´t o ee egy n oldal´ z´rt t¨r¨ttvonalat rajzol.3. vagy k´t cs´cspontot figyelmen k´ ul hagyja a rendszer. szakasszal k¨ti ¨ssze. . v5 . v1 . akkor az utols´ a u u o o a o pontot figyelmen k´ ul hagyja. u GL LINES A v0 . . vagyis az egym´st k¨vet˝ p´ros ´s u a o o a e p´ratlan index˝ cs´cspontokat. o e u ıv¨ 13 . ´bra. . v3 . cs´cspontokat. . hogy n cs´cspont adott. n < 3 u a a eset´n nem rajzol semmit. ´bra. a a u u e o u a a e a jobb oldalin mindk´t oldal´t kifestve ´br´zolva e a a a Az al´bbiakban a glBegin() param´ter´nek r´szletes le´ asa k¨vetkezik. A le´ as sor´n a e e e ır´ o ır´ a azt felt´telezz¨k. ıv¨ GL LINE STRIP A cs´cspontokat megad´suk sorrendj´ben egyenes szakaszokkal k¨ti u a e o ¨ssze a rendszer. v4 . . v1 . a GL TRIANGLES Egym´shoz nem kapcsol´d´ h´romsz¨geket rajzol a a o o a o v0 . v3 . Ez ut´bbi az egyetlen elt´r´s a GL LINE STRIP opci´ hat´s´t´l. u a oo e o e GL POLYGON A cs´cspontok ´ltal meghat´rozott poligont rajzolja meg. . Nem komplan´ris cs´cspont´ n´gysz¨g vet¨letei. v0 szakaszt o e o o o o aao a is megrajzolja. n < 2 eset´n nem t¨rt´nik o u oo e o e semmi. Konvex burok a 3. v2 .5. cs´cspontok alapj´n. azaz egy n − 1 oldal´ t¨r¨ttvonalat rajzol. a bal oldali ´br´n az ´leivel. n < 2 eset´n nem t¨rt´nik semmi. vagyis a vn−1 . . v1 . e a GL POINTS A cs´cspontokba pontot rajzol. GL LINE LOOP A cs´cspontokat megad´suk sorrendj´ben egyenes szakaszokkal k¨ti u a e o ¨ssze a rendszer. Ha a poligon nem egyszer˝ vagy nem konvex. az eredm´ny e u e meghat´rozatlan. . . . A geometriai alapelemeket szeml´lteti a 3. v2 .4. majd a v´gpontot ¨sszek¨ti a kezd˝ponttal.

3. Az OpenGL geometriai k´pelemei a e 14 . ´bra.5.

o aa a a Ezeken k´ ul b´rmely m´s OpenGL parancs kiad´sa hib´t eredm´nyez. v4 . v2 . v1 .5. Ha n < 3 nem rajzol semmit. v2 . . u e 15 . utas´ asainak tekintet´ben. a u a kiadhat´ parancsok teljes list´j´t a 3. v2 . v1 . konvex poligon hat´ra u a az egym´st a k¨vet˝ o o cs´csponth´rmasokat u a h´romsz¨gk´nt ´rtelmezi a rendszer a o e e az egym´st a k¨vet˝ o o cs´cspontn´gyeseket u e n´gysz¨gk´nt ´rtelmezi a rendszer e o e e t¨r¨ttvonal oo z´rt t¨r¨ttvonal. az egyetlen elt´r´s o o ee a cs´cspontok figyelembe v´tel´nek sorrendj´ben van. A cs´cspontok sorrendje biztos´ aa a u ıtja. Ez a megsıv¨ a a a a e zor´ as csak az OpenGL parancsokra vonatkozik. v5 . v0 . . . akkor az utols´ pontot figyelmen k´ ul a o ıv¨ hagyja. v2 .5. ´br´t) a sorrend. nem k¨ti meg a kez¨nket a programoz´si ıt´ o u a nyelv vez´rl´si szerkezeteinek. felt´ve. Ha n nem t¨bbsz¨r¨se n´gynek. azaz az utols´ cs´cspontot az a oo o u els˝vel ¨sszek¨ti o o o egym´shoz kapcsol´d´ h´romsz¨gekb˝l ´ll´ szalag a o o a o o a o legyez˝szer˝en o u egym´shoz a kapcsol´d´ o o h´romsz¨gek a o egym´shoz kapcsol´d´ n´gysz¨gekb˝l ´ll´ szalag a o o e o o a o GL TRIANGLE STRIP Egym´shoz kapcsol´d´ h´romsz¨geket (h´romsz¨gekb˝l ´ll´ a o o a o a o o a o szalagot) rajzol a rendszer a v0 . ır´ a GL QUADS Egym´shoz nem kapcsol´d´ n´gysz¨geket rajzol a rendszer a a o o e o v0 . Ha o ıgy e u ır´ a n < 4 nem rajzol semmit. v7 . akkor u a o oo e a fennmarad´ cs´cspontokat figyelmen k´ ul hagyja a rendszer. v1 . sz´ norm´lis vagy text´ra megad´sa. v3 . ´br´t) a a a cs´cspontok felhaszn´l´s´val. e e u e ıv´ e hogy a h´ ıvott f¨ggv´nyek is csak megengedett OpenGL parancsokat tartalmaznak. t´bl´zat. GL TRIANGLE FAN A GL TRIANGLE STRIP opci´hoz hasonl´. A o ın. . t´bl´zat tartalmazza. vagyis az ´ l´trehozott szalag egy fel¨letdarab korrekt le´ as´t adja. . v2 . (l´sd a 3. . hogy a n´gysz¨gek ir´ny´ asa mege o a ıt´ egyez˝ legyen. (l´sd u e e e a a 3.2. a a A glBegin() ´s glEnd() z´r´jelp´r k¨z¨tt a cs´cspontok megad´s´n k´ ul m´s e ao a o o u aa ıv¨ a OpenGL parancsok is kiadhat´k. (l´sd a 3. v5 . . v2 . v1 .3. . v3 . v4 . most a v0 . v3 . . vagyis az ´ l´trehozott szalag egy fel¨letdarab korrekt a ıt´ o ıgy e u le´ as´t adja. . v6 . vagyis tetsz˝leges vez´rl´si szere e ıt´ e o e e kezetek (ciklusok. v3 . A cs´cspontok sorrendje biztos´ u aa a u ıtja. o u ıv¨ GL QUAD STRIP Egym´shoz kapcsol´d´ n´gysz¨geket (n´gysz¨gekb˝l ´ll´ szalagot) a o o e o e o o a o rajzol a rendszer a v0 . cs´cspontok alapj´n. . Az OpenGL geometriai alapelemei a a ´rt´k e e GL POINTS GL LINES GL POLYGON GL TRIANGLES GL QUADS GL LINE STRIP GL LINE LOOP GL TRIANGLE STRIP GL TRIANGLE FAN GL QUAD STRIP jelent´se e egyedi pontok az egym´st k¨vet˝ cs´cspontp´rokat egyedi szaa o o u a kaszk´nt ´rtelmezi a rendszer e e egyszer˝. v4 . v2 . v2 .5. ´br´t) cs´cspontok fela a a u haszn´l´s´val. hogy a h´romsz¨gek a o ir´ny´ asa megegyez˝ legyen. v3 . v3 .1. ha pedig n p´ratlan. mint pl. felt´teles kifejez´sek) vagy f¨ggv´nyh´ asok szerepelhetnek. . v1 .

a poligon pedig kit¨lt¨tt (kifestett) e e u o o lesz. u aa 3.3.3. Ez vonatkozik a display-list´n t´rolt glVertex*() parancsokra is.-n´l nagyobbnak kell lennie. az alap´rtelmez´s 1. A glBegin() ´s glEnd() k¨z¨tt kiadhat´ OpenGL parancsok a a e o o o parancs glVertex*() glColor*() glIndex*() glNormal*() glEvalCoord*() glCallList(). a rendszer nem keo a a e rek´ a megadott ´rt´ket.6. a rendıt´ e e e szer a megadott float ´rt´ket eg´szre kerek´ ´s ennek megfelel˝ (size x size) m´ret˝ e e e ıti e o e u pixelt¨mbbel ´br´zolja a pontot. ´s egy size ´tm´r˝j˝ k¨r alak´ pixelcsoporttal szeml´lteti a ıti e e e a eou o u e pontot. ha glBegin(). A geometriai alapelemek megjelen´s´nek m´dja term´szetesen befoly´solhat´ a felee o e a o haszn´l´ ´ltal. egy pixel sz´less´g˝ pixelsor. e A glVertex*() parancs megh´ as´val l´trehozott cs´csponthoz a rendszer hozz´rendeli ıv´ a e u a a cs´csponthoz kapcsolt attrib´tumok kurrens ´rt´k´t. t´bl´zat. ´bra. A megadott m´retnek 0.3. Ezt szeml´lteti a 3.2. e e a e e Ha az antialiasing (kisim´ as) nem enged´lyezett – ami az alap´rtelmez´s –. ´ a kurrens sz´ norm´list ´s u u e e e ıgy ınt. A geometriai alapelemek foly´sol´ t´nyez˝k a o e o megjelen´s´t e e be- Ha m´sk´nt nem rendelkez¨nk. akkor a pont k´pe egyetlen pixel lesz a k´perny˝n. Pont void glPointSize (GLfloat size). glEnd() z´r´jelp´r k¨z¨tt a a a a ao a o o hajtjuk v´gre. glCallLists() glTexCoord*() glEdgeFlag*() glMaterial*() hat´sa a cs´cspont-koordin´t´k megad´sa u aa a a kurrens sz´ megad´sa ın a a kurrens sz´ ınindex megad´sa a norm´lvektor-koordin´t´k megad´sa a aa a koordin´t´k l´trehoz´sa aa e a display-lista(´k) v´grehajt´sa a e a text´ra-koordin´t´k megad´sa u aa a a hat´rol´ ´lek megjel¨l´se a oe oe anyagtulajdons´g megad´sa a a A glVertex*() parancsnak csak akkor van hat´sa. a e text´rakoordin´t´t. hogy az OpenGL ´ltalunk haszn´lt implement´ci´j´ban mekkora lehet e u a a a oa 16 . e a A GL POINT SIZE RANGE param´terrel kiadott glGetFloatv() paranccsal e lek´rdezhetj¨k. a a e u e e o szakasz egy folytonos. Ezzel a paranccsal a pontot reprezent´l´ pixelt¨mb m´ret´t lehet megadni a size paao o e e ram´terrel. ha a list´t egy glBegin(). aoa 3.1. Ha az antialiasing enged´lyezett. glEnd() z´r´jelp´r a ao a k¨z¨tt jelenik meg. o o a a teh´t akkor lehet b´rmilyen hat´suk.

hanem kit¨lt¨tt t´glalapk´nt jelen´ meg a ıti a o o e e ıti e szakaszt. A szakasz sz´ et k´t t´nyez˝ befoly´solja: az ´rv´nyben l´v˝ ´rnyal´si modell oır´ a ın´ e e o a e e e oa a ´s a szakasz v´gpontjainak megad´sakor kurrens sz´ Ezt b˝vebben a sz´ megad´s´val e e a ın. fejezet tartalmazza. Ha az alakzatok hat´r´nak kisim´ asa (antialiasing) enged´lyezett. att´l o e u a a o f¨gg˝en. a jobb a e e e ıt´ e oldali enged´lyezett e a pont maxim´lis m´rete. 2. A pont sz´ a pont hely´t meghat´roz´ glVertex*() parancs a e ıne e a o kiad´sakor ´rv´nyben l´v˝ sz´ lesz. hogy az ´ltalunk l´tott szakasz t´nyleges vastags´ga a k´perny˝ pixel´nek u a a e a e o e fizikai m´ret´t˝l is f¨gg! M´g nagyobb lehet az elt´r´s. Szakasz Szakasz eset´n lehet˝s´g¨nk van a szakasz sz´ enek. e u a o a o a a Ne feledj¨k. akkor a rendszer a width ´rt´ket eg´szre kerek´ e e e e ıti. ha ugyanazt a vonalvastags´got e eo u e ee a (pl. Ilyen esetben a k´perny˝n a vonalvastags´got azona e o a ban nem a szakaszra mer˝legesen m´rj¨k. . o ın aa foglalkoz´ 4. aa ıt´ e a rendszer nem kerek´ a vonalvastags´got. illetve y tengelyek ir´ny´ban. o A vonalvastags´g megad´sa a a void glLineWidth (GLfloat width). A vonal vastags´g´nak pixelekben m´rt ´rt´k´t ´ll´ be. pixel lehet. a e e e o ın 3.6. alap´rtelmez´s 1. a bal oldali k´pen a sim´ as nem enged´lyezett. a a e e e e a ıtja e e A t´nyleges vonalvastags´g f¨gg m´g att´l is. 1 pixel) haszn´ljuk grafikus display-n ´s nagyfelbont´s´ tintasugaras plotteren vagy a e au 17 . vonalvastags´g´nak ´s vonalt´ anak e oe u ın´ a a e ıpus´ el˝´ as´ra. hanem az x. hogy az egyenes ir´nytangense (az x tengellyel bez´rt sz¨g´nek tangense) 1-n´l u o a a o e e nagyobb vagy kisebb. ´bra.3. hogy az antialiasing enged´lyezett vagy sem.2.. vagyis a vastags´g 1. width ≥ 0. e a u e o e Ha az antialiasing nem enged´lyezett. .3. Pontok szeml´ltet´se. A GL LINE WIDTH RANGE param´terrel kiadott glGetFloatv() paranccsal lek´rdezhetj¨k az OpenGL implement´ci´nkban haszn´lhat´ maxim´lis vonalvastags´got. .

Az ut´bbiakon az 1 pixelnek megfelel˝ 1 dot sz´less´g˝ szakasz alig lesz e o o o e e u l´that´. 18 .l´zernyomtat´n. Poligon A poligon alapelem megjelenhet egy kit¨lt¨tt s´ o o ıkidomk´nt. A mint´val pixelsort e a a ´ ırunk le. a o A vonalt´ ıpus megad´sa a A vonalt´ ıpus v´ltoztat´s´hoz el˝bb enged´lyezn¨nk kell a vonalt´ a aa o e u ıpus v´ltoztat´st (a vonal a a mint´z´s´t) a glEnable(GL LINE STIPPLE) paranccsal. ´br´t). o a a a a 3. akkor a cs´cspontokn´l a m´r megkezdett mintaelem fou a a u a o lytat´dik. a hat´r´t reprezent´l´ z´rt e aa ao a t¨r¨ttvonalk´nt vagy a cs´cspontjait jel¨l˝ pontsorozatk´nt is.GLushort pattern). A vonalt´ ıpus mint´j´nak megad´s´ra szolg´l. e e void glLineStipple (GLint factor. A factor param´terrel a minta e nagy´ as´t (az intervallumok ny´jt´s´t) ´ ıt´ a u a a ırhatjuk el˝. aa a a o a A vonalt´ ıpus v´ltoztat´s´t a glDisable(GL LINE STIPPLE) paranccsal tilthatjuk le. a 3. A k¨l¨nb¨z˝ oldalak k¨l¨nb¨z˝ m´don uo o u oe a o a uo o o uo o o o jelen´ ıthet˝k meg. A rendszer minden polioo e u oo e gonnak megk¨l¨nb¨ztet el¨ls˝ ´s h´ts´ oldal´t. majd a glLineStipple*() paa aa ranccsal meg kell adni a vonalt´ ıpus mint´j´t. A factor ´rt´k´t a rendszer az [1. m´ egyedi szakaszok rajzol´s´n´l (GL LINES) minden cs´cspontn´l az els˝ o ıg aa a mintaelemmel kezd˝dik a rajzol´s (l´sd a 3. azaz folytonos lesz.3. amit a rendszer ism´tel a szakaszok rajzol´sakor. azaz t¨r¨ttvonalat (GL LINE STRIP. 255] o e e e intervallumra lev´gja. o e o ıti A fenti param´tereket a glPolygonMode() paranccsal ´ll´ e a ıthatjuk be.3. a o o oo GL LINE LOOP) rajzolunk. ´bra. 0 a nem rajzolnak felel meg.7. A pattern param´terrel azt a mint´t aa aa a e a ´ ırhatjuk le 16 biten. Alaphelyzetben a rendszer mindk´t oldalt azonos m´don jelen´ meg. 1 a rajzolnak. A vonalminta ism´tl´se a e e Ha egym´shoz kapcsol´d´ szakaszokat. amit a rendszer egy ´llapotv´ltoz´ban t´rol.7. a aa ennek kiad´sa ut´n a vonalt´ a a ıpus az alap´rtelmez´s.

p1 . Ezek alapj´n a 3. mely azt jelzi. a Klein–f´le palack vagy a M¨bius szalag nem) k¨zel´ o e o o ıthet˝ o konzisztens ir´ny´ as´ poligonokkal (poligonh´l´val). Minden u o e a o e ee e ir´ny´ a ıthat´ fel¨let (a gyakorlatban haszn´lt fel¨letek t´lnyom´ t¨bbs´ge – pl. pi ∧ pi+1 = xi yi+1 − xi+1 yi (a pi ´s pi+1 vektorok vektori´lis szorzat´nak e a a harmadik komponense) ´s pn+1 = p0 . GL LINE vagy GL FILL. k´p. Pozit´ ir´ny´ as´ poe a a ıt´ a o ıv a ıt´ u ligonok norm´lisa kifel´ mutat.void glPolygonMode (GLenum face.3. A poligonok el¨ls˝ ´s h´ts´ oldal´nak megjelen´ esi m´dj´t ´ll´ be. vagyis az ¨sszeg tagjai az orig´ ´s a poligon oldalai e o oe ´ltal meghat´rozott h´romsz¨gek el˝jeles ter¨letei. Teh´t a k¨zel´ o poligonok mina ıt´ u ao a o ıt˝ degyike vagy pozit´ (az ´ramutat´ j´r´s´val ellent´tes) vagy negat´ (az ´ramutat´ ıv o o aaa e ıv o o j´r´s´val egyez˝) k¨r¨lj´r´si ir´ny´ a fel¨letnek ugyanarr´l az oldal´r´l n´zve. Az alap´rtelmez´s GL CCW. A mode ´rt´ke e e e e pedig GL POINT. yi ). . A face param´ter u oe a o a ıt´ o a a ıtja e ´rt´ke GL FRONT AND BACK. GL FRONT vagy GL BACK lehet. hogy a poligonok mely oldal´t l´tjuk (felt´telezz¨k. . i=0 ahol pi = (xi . A mode param´ter GL CCW ´rt´ke eset´n a poligon akkor tekintend˝ fel´nk n´z˝nek. Azt. de pl. akkor mindk´t oldalt kit¨ltve jelen´ meg a rendszer. e e e e o e e o ha vet¨let´nek k¨r¨lj´r´si ir´nya pozit´ GL CW eset´n pedig. ´s vizsg´ljuk. A poligon vet¨let´nek k¨r¨lj´r´si ir´ny´t a rendszer a poligon el˝jeles ter¨let´vel u e ou aa a a o u e hat´rozza meg. A poligonok l´that´ oldal´nak meghat´roz´sa a a a o a a a T >0 el¨ls˝ u o h´ts´ a o T <0 h´ts´ a o el¨ls˝ u o GL CCW GL CW Ennek a probl´m´nak van sokkal szeml´letesebb. u o e e o void glFrontFace (GLenum mode). hogy a pozit´ vagy negat´ ir´ny´ ast ıv ıv a ıt´ kell el¨ls˝ – fel´nk n´z˝ – oldalnak tekinteni. a e u e o ıti Az el¨ls˝ ´s h´ts´ oldal ´rtelmez´s´vel r´szletesebben kell foglalkoznunk. A aaa o ou aa a u u o ao e glFrontFace() parancs seg´ eg´vel be´ll´ ıts´ e a ıthatjuk. A poligonok ´s norm´lisok ir´ny´ as´t ¨ssze kell hangolni. o u a u u o o e o u henger.3. u aa e o Ha m´sk´nt nem rendelkez¨nk. Mint a e a e e o ıt´ norm´lisok megad´s´n´l m´r sz´ltunk r´la. t´rbeli megk¨zel´ ese is. GLenum mode). A k´ps´ a e ıkra illeszked˝ p0 . hogy a k´ps´ e e e ıkon (k´perny˝n) egy poligonnak az el¨ls˝ e o u o vagy h´ts´ oldala l´tszik a fenti be´ll´ as ´s a poligon k´p´nek k¨r¨lj´r´si ir´nya hat´rozza a o a a ıt´ e e e ou aa a a meg. o u a a 3. pn cs´cspont´ poligon el˝jeles ter¨lete o u u o u 1 T = 2 n pi ∧ pi+1 . t´bl´zat. . g¨mb. . e ıv. hogy melyik oldal´t l´tjuk a poligonnak. ha negat´ u e ou aa a ıv. a fel¨leteket le´ o poligonok cs´cspontjaiban a aa a a o o u ır´ u a norm´lisokat konzisztens m´don kell megadni: a norm´lisok a fel¨let ugyanazon oldal´n a o a u a legyenek. hogy a poligonnak csak a cs´cspontjait kell megrajzolni. a negat´ e befel´. a hat´r´t kell megrajzolni vagy a belsej´t ki kell t¨lteni. t´rusz – ilyen. hogy az egyes e u e a a a e u 19 . t´bl´zat szerint a a a o o u a a a d¨nthetj¨k el. Ezeket a poligonokat a t´r egy pontj´b´l a e ıv´ e e a o n´zz¨k.

Ez´rt a feldolgoz´s gyors´ asa e e e o a e a ıt´ ´rdek´ben az ilyen poligonokat c´lszer˝ elhagyni m´g a k´ps´ e e e u e e ıkra vet´ es el˝tt. a a a hogy a poligon fel´nk n´z –. hogy milyen helyzet˝ poligonokat akarunk elhagyni. α = π/2 eset´n a poligon ´lben l´tszik (a k´pe szakasz lesz). Nem kell term´szetesen mag´t a sz¨get a o a e a o meghat´rozni. |n| |s| teh´t csak ennek az el˝jel´t kell vizsg´lni. akkor a norm´lis ´ltal megjel¨lttel ellent´tes oldal´t l´tjuk. Ez ut´bbit a u o glCullFace() paranccsal tehetj¨k meg. n2 · s2 < 0. akkor azt az oldal´t amerre a norm´lis mutat – ekkor azt mondjuk. vagyis a lap ´lben l´tszik. hogy a poligon h´ts´ oldala l´tszik. Ha α < π/2. Poligonok elhagy´sa a Konzisztens ir´ny´ as´ poligonokkal le´ z´rt fel¨letek (pl. ´bra. ugyanis n-el jel¨lve a norm´lvektort.4. ´s e aa meg kell mondanunk. s-el a n´z˝pontba mutat´ vektort a o a e o o n·s cos α = .poligonok s´ ıkbeliek).8. mivel ezek ıt´ o k´pe nem lesz r´sze a v´gs˝ k´pnek. Egy poligon tetsz˝leges pontj´b´l a n´z˝pontba mutat´ vektor ´s o a o e o o e a poligon norm´lisa ´ltal bez´rt α sz¨g alapj´n eld¨nthet˝. e e e e a e ha pedig α > π/2. a o a a e a 3. hiszen m´s poligonok eltakarj´k. Ennek ´rdek´ben e e e o e a a e e e enged´lyezni kell a poligonok elhagy´s´t a glEnable(GL CULL FACE) paranccsal. Az ´bra szerinti n1 · s1 > 0. Fel´nk n´z˝ ´s h´ts´ poligonok ´rtelmez´se a e e oe a o e e 3. egy g¨mb¨t k¨zel´ o poli´der) a ıt´ u ırt a u o o o ıt˝ e eset´n a nem fel´nk n´z˝ poligonokat nem l´thatjuk.8. hogy a poligon mely oldal´t a a a o a o o a l´tjuk. vagyis a lap a a e e o h´ts´ oldal´t l´tjuk. ´br´n egy has´bon szeml´ltetj¨k ezt a a o e a a a a e u vizsg´latot. hogy milyen helyzet˝ poligonok hagyhat´k el m´g a u o e k´perny˝-koordin´t´kra val´ transzform´l´s el˝tt. vagyis a lap fel´nk n´z˝. ´s azt a a o e a a e mondjuk.3. Seg´ eg´vel be´ll´ ıts´ e a ıthatjuk. n3 · s3 = 0. A 3. u void glCullFace (GLenum mode). hogy a poligonok elhagy´sa e o aa o aa o e a 20 . felt´telezve.

6. fel´nk n´z˝ lapok. A poligonok k¨l¨nb¨z˝ megjelen´si m´djait szeml´lteti o a uo o o e o e a 3. oe hogy a poligonokat az ablak koordin´ta-rendszer´hez kapcsolt 32 × 32-es bitt¨mbbel mea e o gadott mint´val t¨lts¨k ki. Ha az ´ felbontott poligont GL LINE m´dban ´br´zoljuk. amelyeknek a h´ts´ e e e e e a o oldal´t l´tjuk. t¨bbnyire h´romsz¨gekre. Ezen ´ e aa e a probl´ma kik¨sz¨b¨l´se ´rdek´ben az OpenGL a poligonok cs´cspontjaihoz egy bitben e u o oe e e u t´rolja. T¨bb. A t¨mbben az 1 a rajzol´st. GL FRONT AND BACK a a e e e o u eset´n pedig minden poligont. (Ez nem t´vesztend˝ ¨ssze a text´r´val. szakaszt) megfelel˝en kisz´ a o ınezi. Ezeket ugy tudjuk a siker rem´ny´ben a ıt o a ´ e e ´br´zolni. miut´n ilyenılt u e a e a kor a fel¨let mindk´t oldal´t l´thatjuk – n´mely poligonnak az el¨ls˝ oldal´t. a rendszer a poligonok belsej´t az ´rv´nyben l´v˝ ´rnyal´si a e u e e e e oa a modellnek (l´sd a 4. Lehet˝s´g van azonban arra is. hogy a cs´cspontot k¨vet˝ ´l hat´rol´ ´l vagy sem. A mask param´ter a kit¨lt´si mint´t pio e a e o e a xelenk´nt le´ o 32 × 32-es bitt¨mb c´ e ır´ o ıme. ´bra. a void glPolygonStipple (const GLubyte *mask ). u e e u o a a ez´rt j´ el˝sz˝r˝je a lapoknak l´that´s´gi vizsg´latokhoz. m´soknak a u e a a e u o a a h´ts´ oldal´t –. Poligon hat´rol´ ´leinek megjel¨l´se a oe oe Az OpenGL csak konvex poligonokat tud helyesen megrajzolni.2. a felbont´shoz beıgy vezetett uj ´lek is megjelennek. ´br´n az n4 norm´lis´ lap. A mode param´ter GL BACK ´rt´ke eset´n azokat.3. Z´rt a o e e o a a a u a fel¨let eset´n azonban c´lszer˝ ezt a funkci´t aktiviz´lni. a a ´ a aa o a o o a a a bontjuk. a 0 a nem rajo a zol´st jelenti. ezt a mint´t ugyanis a o u e oo ua a a vet¨letre teszi a rendszer. a cs´cspontokat le´ o glVertex*() parancs kiad´sa el˝tt lehet o o u ır´ a o be´ll´ a ıtani a glEdgeFlag() paranccsal. ugyanis ez a vizsg´lat gyors. e a a o a a e o e vagy ak´r csak egyetlen konk´v poli´der eset´n az algoritmus alkalmaz´sa ut´n is maa a e e a a radhatnak nem l´that´. 21 . holott mi csak a poligon hat´r´t szeretn´nk l´tni. a gyakorlatban viszont nem sz´m´ kuri´zumnak a konk´v poligon. ez´rt a h´ts´ oldalukat mutat´ poligonok elhagy´sa eset´n a fel¨let k´p´n a o a e a o o a e u e e lyukak keletkezhetnek. Ezen parancs v´grehajt´s´ra a glPixelStore*(GL UNPACK*) paranccsal a e aa be´ll´ a ıtott m´d is hat´ssal van. ami az OpenGL eset´n a ze o o uo a oa a e puffer algoritmus. a 3. Poligonkit¨lt´si mint´t lehet vele megadni. egym´st legal´bb r´szben takar´ poli´der. 3. GL FRONT eset´n a fel´nk n´z˝ oldal´akat. Teh´t ny´ fel¨letek eset´n ne haszn´ljuk ezt a funkci´t! a ılt u e a o Z´rt fel¨let eset´n is csak akkor eredm´nyez korrekt. e Ny´ fel¨let eset´n a poligonok elhagy´sa helytelen eredm´nyre vezethet. hogy uj oldalak hozz´ad´s´val konvex poligonokra.5.8. Ilyen a 3.9.3. nem pedig a t´rbeli modellre!) Ehhez enged´lyezni kell a pou e e ligon mint´val val´ kit¨lt´s´t a glEnable(GL POLIGON STIPPLE) paranccsal ´s meg a o o ee e kell adni a mint´t. ha a u e e a oa e egyetlen konvex poli´dert ´br´zolunk. Ezt a jelz˝t a glBegin() ´s a u o oe a oe o e glEnd() parancsok k¨z¨tt.enged´lyezett. Kit¨lt´s mint´val o e a Ha m´sk´pp nem rendelkez¨nk. l´that´s´g szerinti k´pet.

Poligon k¨l¨nb¨z˝ megjelen´ ese a uo o o ıt´ 22 .9. ´bra.3.

mert a rendszer mindig a jelz˝ u e a o e u o kurrens ´rt´ket rendeli az ujonnan l´trehozott cs´csponthoz.´s n´gysz¨gsor a e a a o e e o (GL TRIANGLE STRIP. a o e e o GL TRIANGLES. e 23 . h´romsz¨g ´s n´gysz¨g (GL POLYGON. o o u a o e o vagy sem. Az alap´rtelmez´s GL TRUE. Seg´ eg´vel be´ll´ ıts´ e a ıthatjuk. hogy nem. GL QUAD STRIP. Ezt a be´ll´ ast e e e e a ıt´ nem kell minden cs´cspont l´trehoz´sa el˝tt elv´gezn¨nk. hogy a k¨vetkez˝ cs´cspont egy hat´rol´ ´l kezd˝pontja. GL QUADS) rajzol´sa eset´n van hat´sa. void glEdgeFlagv (const GLboolean *flag). hogy hat´rol´ ´l lesz.void glEdgeFlag (GLboolean flag). e e ´ e u Ennek a parancsnak csak egyedi poligon. h´romsz¨g. A flag param´ter GL TRUE ´rt´k´vel azt jelezz¨k. a e e e e u a o e GL FALSE ´rt´kkel pedig azt. GL TRIANGLE FAN) eset´n nincs.

a feh´rb˝l e a ınt o ınb˝ e o (a pap´ sz´ ır ıne) a k´ ant sz´ el˝´ll´ asa ´rdek´ben (l´sd a 4. vagyis ugyanahhoz a sz´ a o ınindexhez m´s sz´ rendelhet¨nk hozz´. [1]. A sz´m´ og´pi grafik´ban k´t sz´ a ıt´ e a e ınmegad´si (sz´ a ınkever´si) m´d. a a a A sz´ ınes raszteres grafikus display-k m˝k¨d´se ezzel ¨sszhangban van.. 1. Az uo o o au oo o e e ınt a RGB sz´ ınmegad´s az emberi szem m˝k¨d´s´vel is ¨sszhangban van. hogy az emberi szemben RGB ´rz´kel˝k vannak. Az egyik a sz´ ınes grafikus display-n´l haszn´lt addit´ (hozz´ad´) sz´ e a ıv a o ınkever´s. ´br´t). tov´bb´ a aa a a aa o e oe e o a a a a sz´ at´st lehet˝v´ tev˝ ´rz´kel˝ sejtek. felel meg (l´sd a 4..] intervale e a a lumon v´ltoztathat´ a k¨l¨nb¨z˝ grafikus rendszerekben. e a o o e A sz´m´ og´pek grafikus alaprendszereiben a sz´ a ıt´ e ınek megad´sa ´ltal´ban k´tf´lek´ppen a a a e e e t¨rt´nhet. az un. hiszen a k´perny˝ u o e o e o minden egyes pixele k¨l¨nb¨z˝ intenzit´s´ v¨r¨s.1.. b´ o u ıbor (Magenta) ´s s´rga (Yellow) sz´ kell kivonnunk a leg¨sszetettebb sz´ ol. ´br´t).) sz´mh´rmas a fea a a kete. 0. a ınt u a 24 . 1. ´s a k¨l¨nb¨z˝ ar´nyban ´rz´kelt e e o e uo o o a e e sz´ ınkomponensek ¨sszegz´se utj´n ´ll el˝ az ´ltalunk l´tott sz´ o e ´ a a o a a ın. e a m´sik a sz´ a ınes nyomtat´kn´l haszn´t szubtrakt´ (kivon´). m´s e ıv¨ a o e a b´zis is felvehet˝ a sz´ erben.) a feh´r sz´ e ınnek. z¨ld ´s k´k sz´ e. Ez uo o o a u e o a a h´rom hull´mhossz ´ppen a v¨r¨s.. 1. az un. hogy milyen hull´mhossz´ f´ny ingerli ˝ket legink´bb. a o ınt´ e o u e a a ın´ f´nyess´g ´s tel´ e e e ıtetts´g (HLS) sz´ e ınmeghat´roz´s. a fekete k´perny˝h¨z. k´tf´le b´zis e o e e a terjedt el.2. A t´r egy b´zis´nak e u a o e e e a a (koordin´ta-rendszer´nek) r¨gz´ ese ut´n minden sz´ egy sz´mh´rmas seg´ eg´vel lehet a e o ıt´ a ınt a a ıts´ e azonos´ ıtani. 0. a m´sik eset´n csup´n egy indexszel hivatkozunk egy sz´ abl´zat a e a ınt´ a (sz´ ınpaletta) valamely elem´re. Term´szetesen a paletta sz´ e e ınei a felhaszn´l´ ´ltal ao a megv´ltoztathat´k. hogy mennyi t¨rkiz (Cyan). Ezt a a o uo o o e sz´ o´ll´ asi m´dot RGB sz´ ınel˝a ıt´ o ınrendszernek szok´s nevezni. Ilyen pl.. Az egyik sz´ o e ınmegad´si m´d eset´n k¨zvetlen¨l megadjuk a k´ ant sz´ a o e o u ıv´ ın RGB komponenseit. a leg¨sszetettebb sz´ o ınnek. hogy mennyi v¨r¨s (Red). bele´rtve az OpenGL-t is. u A grafikai hardver ´ltal haszn´lt sz´ a a ınkever´sen k´ ul m´s m´dok is lehets´gesek. mivel a sz´ e a e u ınkomponensek ´rt´ke ´ltal´ban a [0. csapok tal´lhat´k. A (0. Ezt r¨viden CMY ıv´ ın oa ıt´ e e a a a o sz´ ınrendszernek nevezz¨k. ´s a sz´ a a o e ınnel kapcsolatos egy´b e probl´m´kr´l a [4]. Az emberi szem a u o ee o retin´j´ban a vil´goss´gl´t´st lehet˝v´ tev˝ ´rz´kel˝ sejtek. a k´pz˝m˝v´szek ´ltal haszn´lt sz´ arnyalat.4. A csapok h´rom fajt´ja ınl´ a o e oe e o a o a a k¨l¨nb¨ztethet˝ meg aszerint. fejezet Sz´ ´rnyal´s ın. az (1. a a A sz´ ıneket legc´lszer˝bb egy h´romdimenzi´s t´r pontjaik´nt felfogni. vagyis leegyszer˝s´ a a e oo o e e ın´ u ıtve azt mondhatjuk. z¨ld ´s k´k sz´ tud kibocs´tani. z¨ld (Green) ´s o oo o e k´k (Blue) sz´ e ınkomponenst adjunk a fekete sz´ ınhez. Err˝l. [2] k¨nyvekben r´szletesebben olvashatunk. Szubtrakt´ sz´ ıv ınkever´s eset´n azt ´ e e ırjuk el˝. p´lcik´k. o a a ıv o Addit´ sz´ ıv ınkever´s eset´n azt ´ e e ırjuk el˝. A sz´ e o o ınteret az egys´gkock´val szeml´ltetj¨k.

0. alfa (A) komponenst is megadhatunk. de a megjelen´ ıtik e aa e ıthet˝ sz´ o ınek sz´ma – ezt szok´s sz´ elys´gnek is nevezni – gyakorlatilag korl´tlan. A puffer m´ret´t azzal u e e jellemezz¨k. J´ min˝s´g˝. ´rt´ke eset´n a sz´ nem ´tl´tsz´. un. ugyanis viszonylag alacsony felbont´s o´ ıt´ a o a o a mellett nagysz´m´ sz´ eset´n szinte t¨k´letes k´pet hozhatunk l´tre. vagyis azt kontroll´lhatjuk. a e e e ın a a o e a a o k¨zb¨ls˝ ´rt´kek eset´n pedig a pixel r´gi ´s uj sz´ et keveri a rendszer az el˝´ ar´nyban. A sz´ a ınkocka az RGB koordin´ta-rendszerben a Az OpenGL-ben az RGB komponensek mellett egy negyedik.1. E kett˝t a monitor ´s a a a uo o o e grafikus k´rtya min˝s´ge. Az alfa komponens term´szetesen e o o eu e nem a sz´ defini´l´s´hoz kell. vagy a pixel r´gi ´s uj sz´ eb˝l egy¨ttesen ´lljon el˝ a ´ ın a e e ´ ın´ o u a o pixel v´gs˝ sz´ e o ıne. hogy pixelenk´nt h´ny bit ´ll rendelkez´sre a sz´ u e a a e ınek t´rol´s´ra. e a e o a a m´sr´szt a pixeleken megjelen´ a e ıthet˝ sz´ o ınek sz´m´ban k¨l¨nb¨zik. melyben a pixelek sz´ et t´rolja a g´p. hogy az adott sz´ a a oa a ınnel kifestend˝ o pixelen csak az uj sz´ l´tsszon. ahhoz pontosan h´rom komponens sz¨ks´ges.4. A pixelek e o ın´ a e sz´ enek t´rol´s´ra haszn´lt mem´ri´t sz´ ın´ a aa a o a ınpuffernek nevezz¨k. 8 bit/pixel a aa 25 . pontosabban azok grafikus k´rty´j´n. a k´perny˝ minden pia ıt´ e a aa e o xel´hez ugyanannyi mem´ria tartozik. Gondoljunk pl. ez´rt itt RGBA m´dr´l besz´l¨nk. ´s azok ¨sszhangja hat´rozza meg. val´szer˝ k´pek a oe e o a o oe u o u e el˝all´ as´hoz nem elegend˝ a felbont´st n¨velni. eset´n teljesen ´tl´tsz´. vele az ın aa a a u e ´tl´tsz´s´got adhatjuk meg. Alfa 1. o u oe e e e e ´ ın´ oırt a A sz´ ınes grafikus hardver egyr´szt felbont´sban – a k´perny˝ pixeleinek sz´m´ban –. a u ın e o e e e a TV k´sz¨l´kekre. melyek felbont´sa el´g kicsi (a PAL rendszer˝ k´sz¨l´kek 625 soron e ue a e u e ue jelen´ meg a k´pet) a mai monitorok felbont´s´hoz k´pest. a a ınm´ e a A sz´m´ og´pekben. ´bra.

A legjobbnak mondhat´ k´rty´k eset´n 32 bit/pixel (az RGBA o o a a e ¨sszetev˝k mindegyik´re 8. hogy ilyen sz´ a a a e o ınpufferb˝l o k´t darabot tud haszn´lni (erre pl. Erre szolg´l´ f¨ggv´nyt az OpenGL-hez kapcsolt. a o e e e o a a Sz´ ınindex m´d eset´n el˝fordulhat. e o ıv´ a GL ALPHA BITS. tov´bb´. GL GREEN BITS. illetve GL INDEX BITS param´terrel val´ megh´ as´val kapjuk meg.4. teh´t ezt felfoghate a a o e u e u a juk 64 bit/pixelk´nt is. e A pixelenk´nti biteket a rendszerek ´ltal´ban egyenletesen osztj´k el a e a a a sz´ ınkomponensek k¨z¨tt. a minden e ao o o u e o a a OpenGL implement´ci´ r´sz´t k´pez˝ GLX-ben. pl. Az RGBA ´s sz´ e ınindex m´dok k¨z¨tti v´laszt´sra nincs OpenGL parancs. hogy az egyes sz´ e e a aa a a ınindexekhez milyen RGB ´rt´kek tartoze e nak a glGetIntegerv() parancs GL RED BITS.2. hogy az ´ltalunk haszn´lt a a rendszerben h´ny bit ´ll rendelkez´s¨nkre az egyes sz´ a a eu ınkomponensek. vagyis 16. A manaps´g haszn´latos grafikus k´rty´k a a a a a sokkal t¨bb sz´ tudnak megjelen´ o ınt ıteni. mivel ez o o o a a hardverf¨gg˝ param´ter.77 milli´ sz´ plusz az ´tl´tsz´s´g. ablakoz´st u o e ao u e a ´s felhaszn´l´i interakci´kat lekezel˝ f¨ggv´nyk¨nyvt´rakban tal´lhatunk. hogy saj´t sz´ o e o a ınpalett´t akarunk megadni. az ilyen grafikus o o e o ın a a oa k´rty´kat szok´s true colornak is nevezni) ´s akkora a mem´ria. a 24 bit/pixel kezd standardd´ v´lni. hogy az emaa e ¨ u 26 . o o a e Azt. GL BLUE BITS. vagy az ´ltalunk prefer´lt GLUT-ben. anim´ci´ eset´n van sz¨ks´g¨nk). ´bra. a Term´szetesen erre sincs OpenGL parancs. Sz´ a u e ınpaletta defini´l´sa eset´n ugyeln¨nk kell arra. A sz´ a ınkocka a CMY koordin´ta-rendszerben a eset´n a megjelen´ e ıthet˝ sz´ o ınek sz´ma 28 = 256. erre is a fent eml´ e ıtett kieg´sz´ o k¨nyvt´rakban e ıt˝ o a tal´lhatunk f¨ggv´nyeket. illetve az alfa ´rt´k t´rol´s´ra. b´r vannak kiv´telek. m´r a 16 a a a bit/pixel is kihal´ban van.

V´g¨l az ´ m´dos´ u ıt´ a e e u ıgy o ıtott fragmentumra ´s a k´perny˝ pixeleire v´grehajtja az el˝´ alfa sz´ e e o e oırt ınkever´st. u ırja o ın´ Ha a bit/pixel sz´m alacsony. pl. Ezt a techo a e e o e u e nik´t ditheringnek nevezz¨k.1-r˝l a 0. hogy mely pixelek esnek az alakzat k´p´re. Sz´ ın´ a a o ın´ ınindex m´dban o viszont a paletta valamely sz´ enek megv´ltoztat´sa eset´n a r´ mutat´ index˝ pixelek ın´ a a e a o u 27 . A pixelek v´gs˝ sz´ egy hossz´ m˝veletsor eredm´nyek´nt a a ua e o ıne u u e e ´ll el˝. m´lys´g´t ( z koordin´ta) ´s text´ra a o e e ın´ e e e a e u koordin´t´it. ´ltal´ban 28 = 256-t´l 212 = 4036-ig szokott a a a a o terjedni.. A cs´csponthoz rendeli a kurrens raınt u a u jzol´si sz´ Ha a megvil´g´ as enged´lyezett. A raszter ´s a hozz´rendelt ´rt´kek egy¨ttes´t fragmentumnak nevezz¨k az aa e a e e u e u OpenGL-ben. mint o a a o e e u a 0. hogy az adott objektum a kiv´lasztott sz´ e u a ınnel fog megjelenni a k´perny˝n.11-re v´lt´st sokkal jelent˝sebbnek ´rz´kelj¨k. illetve el˝´ e e u e oırtak –. RGBA m´dban a pixelek sz´ teljesen f¨ggetlen egym´st´l. annak nincs hat´sa a t¨bbi pixel sz´ ere. teh´t egy alkalmaz´sban vagy v´gig RGBA a a o a a e m´dban. illetve el´g messzir˝l n´zz¨k a k´pet. ha egy pio ıne u a o xel sz´ et megv´ltoztatjuk. Hasonl´k a o a a e e a eu o tapasztalatok a f´nyer˝ ´rz´kel´se kapcs´n is. ditheringet e ´s a bitenk´nti logikai m˝veleteket – ha ezek enged´lyezettek. tov´bb´ o u o a a u a a a az anyagtulajdons´gok (l´sd a 6. csak 4 vagy 8. sim´ asi effektusokat. azaz mozg´ k´pet e a a e a o e hozunk l´tre. ha a pixelek el´g kicsik.ber ´ltal egyenletesen v´ltoz´nak ´rz´kelt intenzit´sv´ltoz´s nem ugy ´rhet˝ el. b´r ez a probl´ma er˝sen harda a a a e o verf¨gg˝. Ezzel gyakorlatilag a felbont´s cs¨kkent´se r´v´n n¨velj¨k a u a o e e e o u a sz´ ınek sz´m´t. nem pedig mag´t a sz´ e a ınt. akkor t¨bb sz´ ugy ´rz´keltethet¨nk. vagyis. Ezekhez a raszterekhez a e e hozz´rendeli az alakzat megfelel˝ r´sz´nek sz´ et. A rendszer a megjelen´ o transzform´ci´s l´nc v´g´n az oba ın a ıt˝ a o a e e jektumot a k´pmez˝koordin´ta-rendszerbe transzform´lja.5-r˝l a 0. a 0. A rajzol´s sz´ enek kiv´laszt´sa nem o a ın´ a a jelenti felt´tlen¨l azt. ugyanis sok m´s hat´st is figyelembe vesz a rendszer.3. 1. szakaszt) is befoly´solj´k a v´gs˝ sz´ Ilyen esetben a a a a e o ınt.51-re v´lt´st. a rajzol´si sz´ hat´stalan. majd raszterekk´ konvert´lja.55 ´rt´kkel sokkal jobb hat´st ´r¨nk el. P´ld´ul a csak k´k komponens˝ sz´ a [0. Term´szetesen csak akkor au o o o e e j´ a hat´s. ıtm´ u e o o o a e u e o o A line´ris sk´la helyett sokkal jobb a logaritmikus sk´la. de sz¨ks´g lehet r´ a a a o a e o u e a gyeng´bb grafikus k´rty´k (pl.] e e a a e a e u ınt intervallumon tekintve. ami m´r nem alkalmas un. Monitorok eset´n ennek a probl´m´nak a megold´s´t gamma-korrekci´nak neu o e e a aa o vezik (tov´bbi inform´ci´k [4]-ban tal´lhat´k). ´s ez a a o ao e tov´bbiakban nem v´ltoztathat´ meg. pl. e o a a e a vagyis meghat´rozza. ha anim´lunk. teh´t az ereu e a deti 24 bit/pixelb˝l csak 12 bit/pixel lesz. a a o a o A felhaszn´l´i programban d¨nten¨nk kell a sz´ ao o u ınmegad´s m´dj´r´l. vagy sz´ o ınindex m´dban kell dolgoznunk. szakaszt) a transzform´lt cs´cspontbeli norm´lis. hogy az a a o e e a a a ´ e o RGB ´rt´keket line´risan v´ltoztatjuk. 50 W ´s 100 W k¨z¨tt – m´rmint ilyen tele oe e e a e o o a jes´ eny˝ villany´g˝k k¨z¨tt – nagyobb ugr´st ´szlel¨nk. a e o text´ra.2. Miut´n a fragmentumokat l´trehozta a rendszer. ezekre alkalmazza a k¨d. A paletta a sz´ ınek RGB komponenseit tartalmazza. A 0. a o A rendszer a sz´ a cs´cspontokban sz´molja ki. Haszn´lata a nyomtat´kn´l sz´les k¨rben elterjedt. A paletta sz´ ıneinek a sz´ma 2 hatv´nya. Ez´ltal uj sz´ a ´ ınhat´s´ pixelt¨mb¨k j¨nnek l´tre. mint 100 W ´s 150 W k¨z¨tt. Ilyenkor ugyanis k´t azonos m´ret˝ sz´ e e e u ınpuferre van sz¨ks´g. ´s az ´ e ıgy kapott sz´ ınnel fel¨l´ a megfelel˝ pixel sz´ et. true color k´pek o a e el˝all´ as´ra. akkor a f´nyforr´s(ok) sz´ ´s az ´rnyal´si a ınt. o´ ıt´ a Sz´ ınindex m´d eset´n a rendszer csak a sz´ o e ınpalett´ba mutat´ indexet t´rolja pixea o a lenk´nt. megvil´g´ ast. a ıt´ e e a ıne. e a a modellt˝l f¨gg˝en (l´sd a 4. e o a a a ıt´ ´rnyal´st vagy text´r´t. ha azok haszn´lata enged´lyezett. 24 bit/pixel) eset´n is. a o ınt ´ e e u hogy n´gyzetes pixelt¨mb¨k pixeleit k¨l¨nb¨z˝ elrendez´sben festj¨k ki a rendelkez´sre e o o uo o o e u e ´ll´ sz´ a o ınekkel.

Sz´ megad´sa ın a RGBA m´dban a kurrens sz´ a glColor*() paranccsal adhatjuk meg..TYPE g. us. a rendszer automatikusan 1. megvil´g´ as. o o C´lszer˝ sz´ e u ınindex m´dot o v´lasztanunk.] intervallumra (l´sd e e o a e a a 4.] intervallumra lev´gja. a • ha egy olyan programot kell ´t´ a ırnunk OpenGL-be. Ezt o alapvet˝en a rendelkez´sre ´ll´ hardver. void glIndex{sifd} (TYPE c).TYPE a). void glIndex{sifd}v (TYPE c). a o a • ha kevesebb sz´ akarunk haszn´lni. antialiasing ´s ´tl´tsz´s´g RGBA m´dban sokkal eredm´nyesebben e a e a a oa o e val´s´ o ıthat´ meg. t´bl´zatot). Ha alfa ´rt´k´t nem adjuk e e o ım´ a e e e meg.. text´ra-lek´pez´s. ´s a megoldand´ feladat hat´rozza meg. o A sz´ ınindex m´dnak is vannak azonban el˝nyei. Sz´mos speci´lis effektus. sz´ a ınanim´ci´ sor´n.TYPE g. void glColor{34}{bsifdubusui}v (const TYPE *v ). o ınt void glColor3{bsifdubusui} (TYPE r. mint a sz´ ınt a ınpuffer ´ltal k´ alt maximum. a a Sz´ ınindex m´dban a glIndex*() paranccsal v´laszthatjuk ki a kurrens sz´ o a ınindexet. o a a a a a ıt´ u e e atmoszf´rikus hat´sok. ui opci´k– line´risan lek´pezi a [0. mint sz´ o e o ınindex m´dban. ugyanis RGBA o m´dban az ´rnyal´s durv´bb lehet. hogy mikor haszn´ljunk RGBA ´s mikor sz´ u e e a e ınindex m´dot. Ezt haszn´ljuk ki az un. e 4. 28 . A kurrens sz´ ınindexet a v´lasztott opci´nak megfelel˝ m´don megadott ´rt´kre ´ll´ a o o o e e a ıtja be. azaz kev´s sz´ jelen´ e e e ın ıthet˝ meg. Lebeg˝pontos param´terek – f ´s d opci´k o e e o – eset´n a rendszer a megadott ´rt´ket a [0.-nek veszi. e a • ha pixelenk´nti logikai m˝veleteket akarunk a sz´ e u ıneken v´grehajtani. A kurrens sz´ az RGB(A) komponensekkel defini´lja. az el˝jel n´lk¨li e e e a o e u eg´sz param´tereket – ub.. 1.TYPE b).1. az ´rnyal´s.TYPE b. mint a sz´ ınanim´ci´. a ın´ • ha a bit/pixel ´rt´k alacsony. a o a Felmer¨l a k´rd´s.1.mindegyik´nek megv´ltozik a sz´ e a ıne. mint pl. 1. A v-vel v´gz˝d˝ nev˝ paranınt a e o o u csok eset´n a param´tereket tartalmaz´ vektor c´ et adja ´t. 1. A rendszer csak a sz´ ıninterpol´l´s ´s a sz´ aa e ınpufferbe val´ be´ as el˝tt v´gzi o ır´ o e el a lev´g´st. Legt¨bb o e a o e o a o rendszerben RGBA m´dban t¨bb sz´ jelen´ o o ın ıthet˝ meg a k´perny˝n. az el˝jeles eg´szeket pedig ugyancsak line´risan k´pezi le a [−1. vagy a a o r´tegekbe rajzol´s. amely m´r ezt a m´dot haszn´lta. void glColor4{bsifdubusui} (TYPE r.] a a o e a e intervallumra. o a a a • ha olyan speci´lis tr¨kk¨ket akarunk megval´s´ a u o o ıtani.

. sz´ e ınindex m´dban az indexeket – line´risan interpol´lja a rendszer a o a a szakaszok bels˝ pontjai sz´ enek kisz´m´ as´hoz. a e a a o o void glShadeModel (GLenum mode).] [−1. t´bl´zat. 65535] [0. hogy a cs´cspontok ´s poligonok sz´moz´sa 1-el kezd˝dik.] [−1. A glShadeModel() paranccsal a a u v´laszthatunk a k´t ´rnyal´si technika k¨z¨tt. felt´telezve. 32767] [−2147483648. Az els˝ esetet konstans ´rnyal´snak (flat shading).2. de a legbiztosabb. 255] [0. 1. 1. alap´rtelmez´s a GL SMOOTH. T¨r¨ttvonal eset´n ez a v´gpont sz´ poligon eset´n pedig a 4. a m´sodikat pedig folyuo o o o a a a tonos vagy sima ´rnyal´snak (smooth shading) nevezz¨k. 1.. A t´bl´zat azt mutatja. A poligon sz´ enek meghat´roz´sa a a ın´ a a poligon fajta GL GL GL GL GL GL POLYGON TRIANGLE STRIP TRIANGLE FAN TRIANGLES QUAD STRIP QUADS az i-edik poligon melyik cs´cspont szerint lesz kisz´ u ınezve 1 i+2 i+2 3i 2i + 2 4i Folytonos ´rnyal´s eset´n a cs´cspontok sz´ et – pontosabban RGBA m´dban a sz´ a a e u ın´ o ınt komponensenk´nt. e e Konstans ´rnyal´s eset´n a rendszer egyetlen cs´cspont sz´ evel sz´ a a e u ın´ ınezi ki az eg´sz e objektumot.] [0.] 4. t´bl´zat.2. 1. hogy az i-edik poligont mely cs´cspont sz´ evel rajzoljuk a a u ın´ meg.] [0.4. a poligon belsej´nek kisz´ esekor pedig kett˝s line´ris interpol´ci´t hajt v´gre. vagy sok k¨l¨nb¨z˝vel. ha konstans ´rnyal´sn´l a o a a a csak egy sz´ adunk meg az alapelem l´trehoz´sakor.2. ´ Arnyal´si modell megad´sa a a A szakasz ´s poligon alapelemeket megrajzolhatjuk egyetlen sz´ e ınnel. A sz´ a a ınkomponensek lek´pez´se e e jel b s i ub us ui adatt´ ıpus 8 bites eg´sz e 16 bites eg´sz e 32 bites eg´sz e el˝jel n´lk¨li 8 bites eg´sz o e u e el˝jel n´lk¨li 16 bites eg´sz o e u e el˝jel n´lk¨li 32 bites eg´sz o e u e megadhat´ ´rt´kek intervalluma oe e [−128.1. 1.. 127] [−32768. Poligon hat´r´nak megrajzol´sakor is ez o ın´ a ıt´ a aa a az elj´r´s. Az ´rnyal´si modell kiv´laszt´s´ra szolg´l. t´bl´zat oo e e ıne. A mode param´ter ´rt´ke GL SMOOTH a a a aa a e e e vagy GL FLAT lehet... e a a szerinti. 4294967295] amire lek´pezi e [−1. 2147483647] [0..] [0. 1. ınt e a 4. Ezeket a e u e a a o szab´lyokat k¨vetkezetesen betartja a rendszer. aa e ınez´ o a a o e 29 .

majd a p bels˝ pont sz´ et az a ´s b pontok sz´ enek line´ris interpol´ci´j´val a o ın´ e ın´ a a oa hat´rozza meg.3.3. ´bra. Ezt az ´rnyal´st Gouroud–f´le ´rnyal´snak is nevezz¨k.A 4. ´bra.4. Gouroud-f´le ´rnyal´s a e a a Folytonos ´rnyal´s alkalmaz´s´val el tudjuk t¨ntetni a k´pr˝l a g¨rb¨lt fel¨leteket a a aa u e o o u u k¨zel´ o poligonh´l´ ´leit. a a a e a a u 4. ´bra szerinti a pontot a c1 ´s c3 cs´cspontok. o e e o e a a Sz´ ınindex m´d eset´n meglepet´sek ´rhetnek benn¨nket. ahol egy g¨mb¨t l´thatunk konstans o ıt˝ aoe a a o o a (fels˝ k´p) ´s folytonos (als´ k´p) ´rnyal´ssal. Ez´rt ha sz´ eo e ınindex m´dban folytonosan o akarunk ´rnyalni. ha a szomsz´dos o e e e u e sz´ ınindexekhez tartoz´ sz´ o ınek nagyon elt´r˝ek. Ezt illusztr´lja a 4. a e 30 . akkor el˝bb c´lszer˝ a megfelel˝ sz´ a o e u o ınpalett´t l´trehoznunk. a b pontot a c2 ´s c3 cs´cspontok a e u e u alapj´n.

4.4. ´bra. G¨mb konstans ´s folytonos ´rnyal´ssal a o e a a 31 .

a a o a a A transzform´ci´kat p = Mp alakban ´ a o ırhatjuk fel. a o • A megfelel˝ lencse kiv´laszt´sa. o Az OpenGL koordin´ta-rendszerei der´ksz¨g˝ Descartes–f´le koordin´ta-rendszerek. ´s az OpenGL-el val´ k´palkot´s k¨z¨tt. ´s a koordin´tao a ıt´ e aa e e a rendszerek k¨zti transzform´ci´kat 4 × 4-es val´s elem˝ m´trixszal ´ le ´s t´rolja. de arra a o aa a eu is lehet˝s´g van. a o megfelel˝ o m´ret˝ e u pap´ ep ırk´ k´sz´ ese e ıt´ (k´pmez˝e o Ahhoz. e o e a o o Ez az anal´gia a k¨vetkez˝ f˝ l´p´sekre ´p¨l (z´r´jelben az OpenGL megfelel˝ transzo o o o e e e u ao o form´ci´ja szerepel): a o • A f´nyk´pez˝g´p elhelyez´se. hogy az OpenGL-el k´pet hozzunk l´tre. Az al´bbiakban ezen transzform´ci´k megad´s´r´l. aa • A lef´nyk´pezend˝ objektumok elhelyez´se a k´ ant poz´ oba (modelltransze e o e ıv´ ıci´ form´ci´). a fenti transzform´ci´kat kell mege e a o adnunk.5. bele´rtve a pap´ e e e ıt´ e ırra vitelt is. hogy a megadott m´trixok illeszkedjenek az OpenGL transzform´ci´s l´nc´ba. p = M2 p = M2 (M1 p) = (M2 M1 ) p miatt az ered˝ o 32 . fejezet Koordin´ta-rendszerek ´s a e transzform´ci´k a o A geometriai alapelemek t¨bb transzform´ci´n mennek kereszt¨l mire v´g¨l megjeleno a o u e u nek a k´perny˝n (ha egy´ltal´n). a transzform´ci´kat le´ o m´trixokr´l ´s azok t´rol´s´r´l aao u o eu ır´ a o a o ır´ a o e a aao lesz sz´. majd az M2 m´trix´ transzform´ci´t a o o a u a o alkalmazzuk. akkor p = M1 p. Az ut´bbi esetben k¨l¨n¨s figyelmet kell ford´ o u o uo o ıtani arra. az egyes transzform´ci´k a a o aao a o hat´s´r´l. m˝k¨d´s¨k le´ as´r´l. zoom be´ll´ asa (vet´ esi transzform´ci´). a e o u e a de a bels˝ sz´m´ asokat homog´n koordin´t´kban hajtja v´gre a rendszer. Az o a o o u a ırja e a egyes transzform´ci´k megad´s´ra OpenGL parancsok ´llnak rendelkez´s¨nkre. ahol p a transzform´land´ pont. Nagym´rt´k˝ anal´gia mutathat´ ki a m˝termi e o a a e e u o o u f´nyk´pk´sz´ es. hogy a felhaszn´l´ mag´t a transzform´ci´t le´ o m´trixot adja meg oe ao a a o ır´ a k¨zvetlen¨l. M pedig a transzform´ci´t le´ o 4 × 4a e aa a o ır´ es m´trixot jel¨li. o a a a ıt´ ıt´ a o • Az elk´sz¨lt negat´ ol e u ıvr´ transzform´ci´). Ha a p pontra el˝bb az M1 . a o p a transzform´lt pont homog´n koordin´t´it. r´ir´ny´ asa a lef´nyk´pezend˝ t´rr´szre (n´z˝pontba e e o e e a a ıt´ e e o e e e o transzform´l´s).

hao e ´ a o a a o nem jobbr´l. mivel a o o o o m´trixok szorz´sa nem kommutat´ (nem felcser´lhet˝) m˝velet! a a ıv e o u Az OpenGL t´rolja a kurrens transzform´ci´s m´trixot ´s ezt megszorozza a mega a o a e felel˝ OpenGL paranccsal l´trehozott uj transzform´ci´ m´trix´val. E k´t o e u a ıt´ e e e transzform´ci´ szoros kapcsolata ´s helyettes´ a o e ıthet˝s´ge miatt az OpenGL egyetlen k¨z¨s oe o o m´trixban t´rolja a n´z˝pont. vagy ak´r a a o a e a alakjukat ´s m´retar´nyaikat is megv´ltoztathatjuk. hogy az alakzae o e e e a a aa a tot honnan ´s milyen ir´nyb´l n´zz¨k. majd ezzel megszorozz´k a kurrens m´trixot. e a o e u e e a Alap´rtelmez´s szerint – ha nem adunk meg k¨l¨n n´z˝pontot ´s n´z´si ir´nyt – az orig´b´l e e uo e o e e e a o o n´z¨nk a negat´ z tengely ir´ny´ba. Ez a k¨z¨s m´trix teh´t a k´t a a e o e a o o o a a e komponenstranszform´ci´ m´trixainak szorzata. vagyis azt. Ennek alap´rtelmez´se teh´t az objektumkoordin´ta-rendszer. a o u e a alkalmazkodnunk kell hozz´. a a a a 33 .´s a a e o e modelltranszform´ci´k megad´s´t seg´ o OpenGL parancsokat ismertetj¨k. M´ a val´s´gban a t´rgyak nem mindig forgathat´k a a o ıg oa a o k¨rbe – pl.transzform´ci´ az M = M2 M1 m´trixszal ´ a o a ırhat´ le. hogy ezt a m´trixot fogjuk m´dos´ a o ıtani (l´sd az 5. n´z´si ir´ny ´s tov´bbi felt´telek e u ıv a a e o e e a e a e seg´ eg´vel egy uj koordin´ta-rendszert. pontot). Ez´rt az OpenGL sz´m´ra sajnos ´ppen ford´ o e a a e ıtott sorrendben kell megadni a transzform´ci´kat! Teh´t az el˝z˝ p´lda v´geredm´ny´hez el˝bb az M2 . e A n´z˝pont. Ez nem t´l szerencs´s. Miut´n az OpenGL mindig jobbr´l szoa o a a o rozza meg a kurrens m´trixot az ujjal. Modelltranszform´ci´k megad´s´t seg´ o parancsok a o a a ıt˝ Az OpenGL sz´m´ra a felhaszn´l´ k¨zvetlen¨l megadhatja a transzform´ci´ 4 × 4-es a a ao o u a o m´trix´t ´s a glLoadMatrix() parancsot haszn´lva ezzel fel¨l´ a a e a u ırhatja.4. a glMultMatrix() parancs seg´ eg´vel megszorozhatja a kurrens transzform´ci´s m´trixot. majd az M1 a o a o o e e e e o transzform´ci´t kell megadni. n´z´si ir´ny kiv´laszt´sa ´s modelle o e e a a a e transzform´ci´k a o Az ´br´zoland´ alakzatot elmozgathatjuk a koordin´ta-rendszerhez k´pest. Egy t´rgyat k¨r¨lj´rva ugyanazt l´tjuk.´s modelltranszform´ci´k megad´sa el˝tt a glMatrixe o e a o a o u Mode(GL MODELVIEW) parancsot ki kell adni. N´z˝pont. de nem tudunk rajta v´ltoztatni. sz´m´ og´pi modell eset´n ez nem jelent gondot. hogy az alakzat mely r´sz´t l´tjuk. hogy el˝bb a modelltranszform´ci´kat a o o a o hajtsa v´gre a rendszer. Az al´bbiakban a n´z˝pont. hogy a n´z˝pont ´s n´z´si ir´ny be´ll´ asa el´rhet˝ a modell megfelel˝ a o e o e e e a a ıt´ e o o transzform´ci´j´val is. e e e a a Nyilv´nval´. amivel jelezz¨k. az un. de nem balr´l. n´z˝pontkoordin´ta-rendszert hozzuk ıts´ e ´ a e o a l´tre.1. o a a o u A n´z˝pont ´s a n´z´si ir´ny kiv´laszt´s´val azt hat´rozzuk meg.1. Ezeket a transzform´ci´kat az e e a a a o OpenGL terminol´gi´ja szerint modelltranszform´ci´nak nevezz¨k. A sorrend nem k¨z¨mb¨s. mintha egy helyben maa oa a ou a a radva a t´rgyat forgatn´nk k¨rbe.´s modelltranszform´ci´t. A n´z˝pont. m´ret¨k miatt –. a o aa ıt˝ u 5. a ´ o e o aa majd a modelltraszform´ci´(ka)t. a 5. Az OpenGL ıts´ e a o a transzform´ci´k megad´s´t seg´ o parancsai el˝bb kisz´m´ ak a transzform´ci´ 4 × 4-es a o aa ıt˝ o a ıtj´ a o m´trix´t. el˝bb a n´z˝pontba transzform´l´st kell megadni.1. ha azt akarjuk.

a a a ´ e o ´ o 34 . e e e e u ıt´ ıt´ valamint az el˝jelt˝l f¨gg˝en esetleg koordin´tas´ o o u o a ık(ok)ra vonatkoz´ t¨kr¨z´st hajt v´gre. eyey. El˝´ll´ a t´r pontjait az orig´n ´thalad´.-n´l nagyobb abszol´t ´rt´k˝ t´nyez˝ az adott tengely menti nagy´ ast. ´s ezzel megszorozza a ´ e o e e e a o a e e kurrens m´trixot. N´z˝pont ´s n´z´si ir´ny be´ll´ asa e o e e e a a ıt´ Alap´rtelmez´s szerint a n´z˝pont a modellkoordin´ta-rendszer orig´ja. eyez ) sz´mh´rmas az uj n´z˝pontot – az uj orig´t –. El˝´ll´ az [x. Az (eyex. GLdouble upy. TYPE z ). z]T ir´nyvektor´ egyenes k¨r¨l angle oa ıtja e o a o a u ou sz¨ggel elforgat´ m´trixot.TYPE z ). z. o u o e e ´s megszorozza vele a kurrens m´trixot.-n´l kisebb abszol´t ´rt´k˝ kicsiny´ est. y. ´s megszorozza vele a kurrens m´trixot. Sk´l´z´s ´s t¨ kr¨z´s aa a e u o e void glScale{fd} (TYPE λ. GLdouble eyey.2. A sz¨g el˝jeles. a n´z´si ir´ny pee e e o a o e e a dig a negat´ z tengely. Ha az uj n´z˝pontot ´s ao aa e u o aa ´ e o e n´z´si ir´nyt. amely az x tengely ment´n λ. El˝´ll´ annak a transzform´ci´nak a m´trix´t.GLdouble upx. GLdouble centerz. GLdouble eyez. Ez teh´t egy speci´lis affin transzform´ci´. ´s o o a e a o o e fokban kell megadni.1. a e u e e u e o ıt´ az 1. e u e a felhaszn´l´ gondolkod´s´hoz nem felt´tlen¨l illeszked˝ elj´r´s. ha ıv ´ e o e e e a a ıt´ a e e u az objektumot mozgatjuk el ellent´tes ir´nyban. mely e a a a a o az alakzatok m´ret´t. TYPE y. Ezt az el˝z˝ekben ismertetett glTranse a o o late*() ´s glRotate*() parancsokkal tehetj¨k meg. GLdouble centery. a Elforgat´s a void glRotate{fd} (TYPE angle. ´s megszorozza vele a kurrens oa ıtja o a a a e m´trixot. akkor e e a a ´ e o a a GLU f¨ggv´nyk¨nyvt´r gluLookAt() f¨ggv´ny´t haszn´ljuk! u e o a u e e a void gluLookAt (GLdouble eyex. o u o e e 5. 1. TYPE µ. m´retar´nyait (pl. [x.GLdouble centerx.TYPE y. ez´ltal uj n´z˝pontkoordin´ta-rendszert explicite akarunk megadni. TYPE x. sz´less´g / magass´g) ´s ir´ny´ as´t is meg tudja e e e a e e a e a ıt´ a v´ltoztatni. a negat´ t´nyez˝ pedig az el˝z˝ek mellett e u e e u ıt´ ıv e o o o az adott tengelyre mer˝leges koordin´tas´ o a ıkra vonatkoz´ t¨kr¨z´st is eredm´nyez. GLdouble upz ). az oa ıtja a o a a e y tengely ment´n µ.Eltol´s a void glTranslate{fd} (TYPE x. Egy uj n´z˝pontot ´s n´z´si ir´nyt megad´ m´trixot hoz l´tre. y. Ez azonban nem mindig k´nyelmes. Az 1. Egy uj n´z˝pont ´s n´z´si ir´ny be´ll´ as´val egyen´rt´k˝. TYPE ν).]T vektorral val´ eltol´s m´trix´t. a z tengely ment´n pedig ν m´rt´k˝ kicsiny´ est vagy nagy´ ast.

Vet´ esi transzform´ci´k ıt´ a o Az OpenGL 3D-s grafikus rendszer. parancsokat! Az els˝vel megadjuk. ha val´szer˝ k´pet szeretn´nk l´trehozni (az ıv) ıt´ o u e e e emberi l´t´s is ´ m˝k¨dik). hogy az ebb˝l kil´g´ r´szeket a rendszer elt´vol´ o o o e a ıtja. Az uj n´z˝pont ´s n´z´si ir´ny megad´sa a modellkoordin´ta-rendszerben a a ´ e o e e e a a a gluLookAt( ) f¨ggv´nnyel u e Ezzel a f¨ggv´nnyel teh´t azt adjuk meg. centerz ) n´z¨nk. vagyis t´rbeli alakzatok ´br´zol´s´ra is alkalmas. melyek az el˝z˝ testeken bel¨l vannak. upz ) sz´mh´rmas pedig a felfel´ ir´nyt – az uj y tengely ir´ny´t – ´ el˝ a a e a ´ a a ırja o (l´sd az 5. a a ´ e e a ´ a a az (upx. eyez ) hov´ (cenu e a a terx. ´bra. centerz ) sz´mh´rmas az uj n´z´si ir´nyt – az uj z tengely ir´ny´t –. v´g´ koordin´t´kban a a a ıt´ a o a a o aa t¨rt´nik. hogy a vet´ esi m´trixot akarjuk m´dos´ ıt´ a o ıtani (azt tessz¨k kurrenss´).2. e e a a hanem a vet´ ıtend˝ t´rr´szt (csonka g´l´t. az un. t´glatestet) egy kock´ra k´pezi le. A k´pen csak azok az alakzatok. Centr´lis vet´ esn´l a glFrustum() vagy gluPerspective(). ´s glLoadIdentity(). upy. e e a Ezen parancsok el˝tt ne felejts¨k el kiadni a glMatrixo u e o Mode(GL PROJECTION). ´s a k´pen mely t´rbeli ir´ny (upx. ´br´t). mer˝leges vet´ esn´l t´glatest. Centr´lis o ıt´ e a (perspekt´ vet´ est akkor alkalmazunk. centery. melyek a teret s´ e u e a o ıkra – a k´perny˝ is s´ e o ıkbeli tartom´nynak tekintend˝ – k´pezik le. centery. ile u o ıt´ e e e letve az alakzatok azon r´szei jelennek meg. vagyis a vet´ o poli´der ıt˝ e lapjaival lev´gja.a (centerx. a a 35 .1. A vet´ esi transzform´ci´ nem s´ o e ıt´ a o ıkbeli k´pet eredm´nyez – ezt v´rhatn´nk el –. ami e o o u azt jelenti. Ez a v´g´s a vet´ esi transzform´ci´ ut´n. A rendszer ugyanis az ujonnan l´trehozott vet´ esi o u e a ´ e ıt´ m´trixokkal megszorozza a kurrens m´trixot. o e e ua e a e A vet´ es m´dj´nak kiv´laszt´s´t ´s az ´br´zoland´ t´rr´sz kijel¨l´s´t egyetlen paıt´ o a a aa e a a o e e oe e ranccsal hajthatjuk v´gre. e a a aa Ez´rt sz¨ks´g van olyan transzform´ci´kra. amit ´br´zolni szeretn´nk.vagy m´retar´ny-helyes aa ıgy u o o ıt´ e e a k´pek l´trehoz´sakor.1. A rendszer erre k´t lehet˝s´get k´ al: a centr´lis a o e e oe ın´ a ´s a mer˝leges vet´ est. a m´sodikkal u e a bet¨ltj¨k az egys´gm´trixot. eyey. Ez centr´lis vet´ es e e a a e a ıt´ eset´n csonka g´la. A vet´ es m´dj´nak kiv´laszt´s´hoz a n´z˝pontkoordin´tae o ıt´ ıt´ o a a aa e o a rendszerben meg kell adnunk azt a t´rr´szt. a a a 5. mer˝leges vet´ est pedig m´ret. e a ıt´ e mer˝leges vet´ esn´l pedig a glOrtho() vagy gluOrtho2D() parancsokkal. upz ) k´pe legyen e u e e e a e f¨gg˝leges. u o 5. hogy honnan (eyex. upy.

GLdouble aspect. top. ua A gluPerspective() f¨ggv´nnyel szimmetrikus csonka g´l´t (´br´zoland´ t´rr´szt) u e ua a a o e e adhatunk meg a l´t´sz¨g (a fels˝ ´s als´ v´g´s´ ao o o e o a o ıkok sz¨ge). ss ) ´s (ys . −near) ´s (right.void glFrustum (GLdouble left. ´bra. z) s´ ıkban m´rend˝. Ilyen esetben term´szetesen a o ıt´ aa e oe u e n´z˝pont helye gyakorlatilag k¨z¨mb¨s.2. GLdouble right.] l´t´sz¨g a a a ıtja o e a ao o az (y. mindig pozit´ oao e a a a ıvak.2. valamint a k¨zeli ´s t´voli v´g´s´ a a a a o e a a o ıkoknak a n´z˝pontt´l m´rt e o o e t´vols´g´val. ´s megszorozza vele a kurrens m´trixot. aa e 5. Az 5. Az f ovy ∈ [0. 180. Az 5. A csonka g´la fed˝lapj´n az egyik ´tl´ v´gpontj´nak kooru o a a o e a din´t´i (lef t. ´s megszorozza vele a kurrens m´trixot. GLdouble near. zs ) koordin´tas´ e a ıkok nem felt´tlen¨l szimmetrias´ e u ıkjai a csonka g´l´nak. amely alatt az ablakot l´tjuk. A near ´s far ´rt´kek a k¨zeli ´s t´voli o e a e e e o e a v´g´s´ a o ıknak a n´z˝pontt´l (a n´z˝pont koordin´ta-rendszer´nek orig´j´t´l) m´rt t´vols´g´t e o o e o a e oao e a a a jelentik. GLdouble bottom. 36 . a a a o e e e o ıtj¨ e Pontosabban. a k´p sz´less´g´nek ´s mao e e e e e gass´g´nak ar´ny´val. GLdouble far ). Az optim´lis l´t´sz¨get a szem¨nknek a k´perny˝t˝l val´ e o a ao o u e oo o t´vols´g´b´l ´s annak az ablaknak a m´ret´b˝l kapjuk meg. vagy m´sk´nt megk¨zel´ e a a e o ıtve: az (zs . bottom. GLdouble top.3. mindig pozit´ ıvak. melyen megjelen´ uk a k´pet.. a a a void gluPerspective (GLdouble fovy. GLdouble near. A near ´s far o a a e ´rt´kek a k¨zeli ´s t´voli v´g´s´ e e o e a a o ıknak a n´z˝pontt´l (a n´z˝pont koordin´ta-rendszer´nek e o o e o a e orig´j´t´l) m´rt t´vols´g´t jelentik. ´bra szerinti csonka g´l´val meghat´rozott centr´lis vet´ es m´trix´t ´ll´ a ua a a ıt´ a a a ıtja el˝. GLdouble far ). azt a sz¨get kell meghat´rozni. A glFrustum( ) f¨ggv´ny param´tereinek jelent´se a u e e e Az ´ megadott csonka g´l´nak nem kell felt´tlen¨l egyenes g´l´b´l sz´rmaznia – ıgy ua e u ua o a a zs tengely ´s a fed˝lap metsz´spontja nem felt´tlen¨l esik egybe a fed˝lap ´tl´inak e o e e u o a o metsz´spontj´val –. −near). ´bra szerinti szimmetrikus csonka g´l´val meghat´rozott centr´lis vet´ es a ua a a ıt´ m´trix´t ´ll´ el˝. Mer˝leges vet´ es megad´s´ra is k´t lehet˝s´g¨nk van. csak a n´z´si ir´ny sz´m´ e o o o o e e a a ıt.

GLdouble top.4. hogy nem kell a k¨zeli a uo o eo o ´s t´voli v´g´s´ e a a o ıkokat megadni. A glOrtho( ) f¨ggv´ny param´tereinek jelent´se a u e e e Az (x. GLdouble right.. 5. GLdouble right. ´bra szerinti t´glatesttel meghat´rozott mer˝leges vet´ es m´trix´t ´ll´ el˝. Ennek hat´sa csak abban k¨l¨nb¨zik a glOrtho() parancs´t´l. A near ´s far param´terek negat´ e a e e ıvok is lehetnek. GLdouble bottom.3. 1. vagyis ezek lesznek a k¨zeli ´s t´voli v´g´s´ o e a a o ıkok. GLdouble far ). 37 . A gluPerspective( ) f¨ggv´ny param´tereinek jelent´se a u e e e void glOrtho (GLdouble left. ´bra. Az 5. ´bra. GLdouble top). GLdouble near. u e void gluOrtho2D (GLdouble left. y) koordin´tas´ a ıkra illeszked˝ alakzatok ´br´zol´s´t k¨nny´ meg a k¨vetkez˝ o a a aa o ıti o o f¨ggv´ny. a rendszer automatikusan a z ∈ [−1.4. GLdouble bottom.] koordin´t´j´ aau pontokat veszi csak figyelembe. a e a o ıt´ a a a ıtja o ´s megszorozza vele a kurrens m´trixot.5.

A param´terek alap´rtelmez´se (0. ´s a glDisable(GL CLIP PLANEi). vagyis azokat az (xs . y) koordin´tap´rral a k´pmez˝ bal als´ sark´t. z. w) → e aa o a eu e aa (x/w. GLsizei width. y. yn ∈ [−1. y/w. ws ) a ık ıv a e o koordin´t´j´ pontokat. Bs . Az ablakkoordin´t´k za komponense e a oa a aa 38 . ıt´ a o a ua o e e o a Ha a homog´n koordin´t´kr´l ´tt´r¨nk Descartes–f´le koordin´t´kra – (x. zs . amelyekre As xs + Bs ys + Cs zs + Ds ws ≥ 0. melynek egyik lapja a k´pmez˝. illetve t´glatesten) bel¨li r´szt k´pezi le..3. a e ua e u e e Ezt a v´g´st a vet´ esi transzform´ci´ ut´n hajtja v´gre a rendszer.] teljes¨l.]. A plane param´ter ´rt´ke e e e GL CLIP PLANEi lehet (i = 0. Ds ) aau a n´z˝pontba transzform´lt v´g´s´ egy¨tthat´it jel¨li. . paranccsal tilthatjuk le. a o ık o void glClipPlane (GLenum plane. . a width e o e a a e o o a param´terrel a sz´less´g´t. winHeight). 1.A fenti parancsokkal megadott poli´derek oldallapjaival a rendszer lev´gja az alake a zatokat. ha w = 0 – a kocka pontjaira xn ∈ [−1. Az ablakkoordin´t´k is t´rbeliek. 1. A v´g´st a n´z˝pontkoordin´ta-rendszerben hajtja v´gre. A k´perny˝ ablak´ban azt az ablak oldalaival p´rhuzamos t´glalapot adja meg. Ezzel a paranccsal egy v´g´s´ a o ıkot adhatunk meg. melyek a a a o ık o a a o seg´ eg´vel tov´bb sz˝k´ ıts´ e a u ıthetj¨k az ´br´zoland´ t´rr´szt. v´g´s´kok sz´ma−1). ugy. z/w). e e e e a a o A normaliz´lt koordin´ta-rendszerbeli kock´t egy sk´l´z´ssal arra a t´glatestre k´pezi a a a aa a e e le a rendszer. Az ´ e o a o e ıgy kapott koordin´t´kat ablakkoordin´t´knak nevezz¨k. u a aa u A k´pmez˝ a k´perny˝ ablak´nak az a t´glalap alak´ pixelt¨mbje. ahol winWidth ´s e e e e winHeigh az ablak sz´less´g´t ´s magass´g´t jel¨li. GLint y. . void glViewport (GLint x. e u e 5. a height param´terrel pedig a magass´g´t kell megadnunk pie e e e e a a xelekben. K´pmez˝-transzform´ci´ e o a o A vet´ esi transzform´ci´ ut´n a csonka g´l´b´l ´s a t´glatestb˝l egyar´nt kocka lesz. A rendszer az uj v´g´s´ ´ a o ıkot a kurrens n´z˝pont-modell transzfore o m´ci´nak veti al´. Ez a lehet˝s´g felhaszn´lhat´ u a a o e e oe a o pl. csonkolt alakzatok ´br´zol´s´ra is. Ezen v´g´s´ e o a o ıkok mellett legal´bb tov´bbi hat v´g´s´ adhat´ meg b´rmely OpenGL implement´ci´ban. vagyis a csonka g´la a a ıt´ a o a e u vagy t´glatest lapjai helyett a nekik megfelel˝ kocka lapjaival. 0. 1. paranccsal eno e o a a ged´lyezhetj¨k. teh´t csak a poli´deren (csonka g´l´n. ami az uj v´g´s´ azonos´ oja. hogy az ´ltalunk haszn´lt implement´ci´ban h´ny a a a o a v´g´s´ adhat´ meg. A k´pmez˝-transzform´ci´ az el˝bb e o a e o a o o defini´lt kock´t k´pezi le arra a t´glatestre. zn ∈ [−1. a o ı a ´ a o ık ıt´ Az *equation param´ter a s´ Ax + By + Cz + D = 0 implicit alakj´nak egy¨tthat´it e ık a u o tartalmaz´ vektor c´ o ıme. A k´pmez˝t a a e e e o e o a glViewport() paranccsal adhatjuk meg. Az (x. melye o a a e ben a v´gs˝ k´p megjelenik. Ezeket normaliz´lt koordin´t´knak nevezz¨k az OpenGL-ben. GLsizei height). e o a a o ık u o o Az i-edik v´g´s´ a o ıkra t¨rt´n˝ v´g´st a glEnable(GL CLIP PLANEi). A GL MAX CLIP PLANES param´terrel kiadott a a aa e glGetIntegerv() parancs megadja. const GLdouble *equation).]. a aa aa u aa e rendszer ebben v´gzi el a l´that´s´gi vizsg´latokat. ahol (As .. Cs .. ys . . winWidth. hogy a a o a a a e o a e ´ transzform´lt s´ pozit´ oldal´n l´v˝ pontokat hagyja meg. amire rajzolunk. a r´ mer˝leges ´l hossza pedig 1. melynek egy lapja a k´pmez˝. A e o e o a e u o k´pmez˝ oldalai az ablak oldalaival p´rhuzamosak.

Az ablakkoordin´t´k za komponens´nek minim´lis ´s maxim´lis ´rt´k´t ´ aa e a e a e e e ırhatjuk el˝. teh´t uj transzform´ci´ megad´s´n´l c´lszer˝ el˝bb az egys´gm´trixot bet¨lteni.4.. Ezt az intervallumot a glDepe e a thRange() paranccsal sz˝k´ u ıthetj¨k. A megadott ´rt´keket a rendszer a [0. GLclamped far ). e a void glLoadIdentity (void). manipul´l´sa el˝tt a glMatrixMode() paranca o a e a aa o csal meg kell adnunk. Seg´ eg´vel be´ll´ ıts´ e a ıthatjuk. ´s nincs sz´m´ra e o a o a a e a a verem fenntartva. A kurrens m´trix alap´rt´ke mindh´rom m´dban az e e a e e a o egys´gm´trix. ami egyben az o e e a alap´rtelmez´s is. u void glDepthRange (GLclamped near. A mode param´ter lehets´ges ´rt´kei: GL MODELVIEW. e e e e alap´rtelmez´se GL MODELVIEW. nemcsak az OpenGL parancsok o ´ltal felk´ alt legfeljebb affin modelltranszform´ci´k. a modelltranszform´ci´hoz ´s a vet´ esi transzform´ci´hoz. hogy a m˝veletek melyik transzform´ci´ra vonatkozzanak. GL PROJECTION. a a u ırja a 39 . vagyis nem kell aa a o e ıt´ a o felt´tlen¨l az ilyen c´l´ OpenGL parancsokat haszn´lni. hogy melyik transzform´ci´t akarjuk m´dos´ a o o ıtani. 1. Az ´ u a o ıgy kiv´lasztott m´trixot kurrensnek nevezz¨k..alap´rtelmez´s szerint a [0. e e A k´pmez˝-transzform´ci´ m´trix´t nem lehet explicite megadni. A kurrens m´trixot az egys´gm´trixszal fel¨l´ a e a u ırja. A 4 × 4-es val´s elem˝ m´trixokkal a o a a o u a tetsz˝leges t´rbeli projekt´ transzform´ci´k le´ o e ıv a o ırhat´k.] intervallumra lev´gja. m´gpedig a C nyelv konvenci´j´val ellent´tben oszlopfolytonosan. GL TEXTURE. 1. Az m vektorban t´rolt m´trixszal fel¨l´ a kurrens m´trixot. teh´t a m´trixot vektorr´ kell a u a a a a konvert´lni. A felhaszn´l´ ´ltal l´trehozott e u eu a ao a e 4 × 4-es m´trixokat egy 16 elem˝ vektorban kell ´tadni.] intervallumon v´ltozik. A transzform´ci´s m´trixok kezel´se a o a e A transzform´ci´s m´trixok l´trehoz´sa. a ın´ a o void glLoadMatrix{fd} (const TYPE *m). Ez a parancs az´rt fontos. mert a e transzform´ci´s m´trixokat el˝´ll´ o OpenGL parancsok mindig megszorozz´k a kurrens a o a oa ıt´ a m´trixot. 5. a a u void glMatrixMode (GLenum mode). a a ´ a o aa a e u o e a o A felhaszn´l´nak lehet˝s´ge van saj´t m´trixok megad´s´ra a n´z˝pontba transzao oe a a aa e o form´l´shoz. a e oa e   m0 m4 m8 m12  m1 m5 m9 m13     m2 m6 m10 m14  m3 m7 m11 m15 A konvert´lt m´trixokat a glLoadMatrix() ´s glMultMatrix() parancsokkal tudjuk a a e beilleszteni az OpenGL transzform´ci´s l´nc´ba.

akkor a a e o a a glPopMatrix() parancs kiad´sa hib´t eredm´nyez. egy e o a o m´sikat a vet´ esi transzform´ci´k sz´m´ra. A vet´ esi m´trixok verme legal´bb 2 db 4 × 4-es m´trix ıv´ a ıt´ a a a t´rol´s´ra alkalmas. a ıt´ o A vermek haszn´lat´t k´t parancs teszi lehet˝v´: a glPushMatrix() ´s a glPopMaa a e o e e trix(). e A glMatrixMode(GL MODELVIEW) parancs a n´z˝pont-modell transzform´ci´s e o a o verem legfels˝ elem´t teszi kurrenss´. vagyis a o a a a a legfels˝ k´t m´trix elemei megegyeznek. ıt´ a e o e Minden m´trixm˝veletet a kurrens m´trixszal hajt v´gre a rendszer. glFrustum()) ezt szorozza meg (jobbr´l!). a glMatrixMode(GL PROJECTION) pedig a o e e vet´ esi m´trixok verm´nek legfels˝ elem´t. Egyet az egyes´ a o o ıt´ e ıtett n´z˝pont-modell transzform´ci´k. A legfels˝ (a kurrens) m´trix a kor´bban a o a a a m´sodik szinten l´v˝ m´trix lesz. a a o a Az OpenGL k´t vermet (stack) tart karban a transzform´ci´s m´trixokkal kapcsolatos e a o a manipul´ci´k megk¨nny´ es´re. pontos m´ret´t a GL MAX PROJECTION STACK DEPTH paa aa e e ram´terrel kiadott glGetIntegerv() paranccsal kapjuk meg. ´s o e e minden tov´bbi elemet egy szinttel fentebb tol. A glMatrixMode() paranccsal be´ll´ a ıtott kurrens verem minden elem´t egy szinttel e lentebb tolja. A legfels˝ (a kurrens) m´trix a m´sodik m´trix m´solata lesz. Ezek mindig a glMatrixMode() paranccsal be´ll´ a ıtott vermet manipul´lj´k. Az m vektorban t´rolt m´trixszal jobbr´l megszorozza a kurrens m´trixot. Ha a verem csak egy m´trixot tartalmaz. a glMultMatrix() ´s a transzform´ci´kat e ırja u e a o be´ll´ o OpenGL parancsok (pl. glRotate*(). teh´t a glLoadIa u a e a dentity() ´s glLoadMatrix() ezt ´ fel¨l. A megengedettn´l t¨bb m´trix eset´n a glMao e a e o a e trixMode() parancs kiad´sa hib´t eredm´nyez.void glMultMatrix{fd} (const TYPE *m). a a e void glPopMatrix (void). az implement´ci´beli pontos sz´mot a a a a aa a o a glGetIntegerv() parancs GL MAX MODELVIEW STACK DEPTH param´terrel val´ e o megh´ as´val kapjuk meg. a a void glPushMatrix (void). A glMatrixMode() paranccsal be´ll´ a ıtott kurrens verem legfels˝ elem´t eldobja. A n´z˝pont-modell transzform´ci´k verme a ıt´ a o a a e o a o legal´bb 32 db 4 × 4-es m´trix t´rol´s´ra alkalmas. a a e 40 .

o a a a o u o a szakaszt) vagy a cs´cspontokban kisz´m´ u a ıtott ´rt´kek line´ris interpol´ci´j´val hat´rozza e e a a oa a meg.2. tov´bb´ az a a a a e e o e a a ´br´zolt alakzatok optikai k¨lcs¨nhat´sai hat´roznak meg. a ıt´ ee o u e oa ıt´ a seg´ eg´vel jobban ´rz´keltethet˝ a m´lys´g ´s a t´rbelis´g. e a • A k¨rnyezeti f´ny (ambient light) az ´br´zoland´ t´rr´szben minden¨tt jelen l´v˝. mindig valamelyik f´nyforr´sb´l j¨n.6. F˝ jellemz˝je. teh´t teljesen mindegy. t¨bbsz¨r¨s e a e e a o a o o oo t¨kr¨z˝d´sek utj´n keletkez˝) k¨rnyezeti f´nyb˝l. A t´rr´szben jelen l´v˝ k¨rnyee o o o e e e o o zeti f´ny k´t r´szb˝l tev˝dik ¨ssze. haa a ıt´ a ıt´ a a ır´ nem tapasztalati uton el˝´ll´ ´ oa ıtott k´pletek. a hat´s csak a f´nyforr´st´l. m´sr´szt a f´nyforr´sokb´l sz´rmaz´ (pl. az ´br´zolt t´rr´szben uralkod´ f´nyviszonyok. e aa Az ´br´zoland´ t´rr´szben uralkod´ f´nyviszonyok le´ as´ra t¨bb f´ny¨sszetev˝t vesz a a o e e o e ır´ a o e o o figyelembe a rendszer. az anyagtulajdons´gokt´l ´s a a e a o a o e cs´cspontbeli norm´list´l f¨gg. u a a alakzatok (pl. o e a a o e e u e o ´lland´ intenzit´s´ f´ny. melyekr˝l az id˝k sor´n bebizonyosodott. hogy e o o a el´g val´szer˝ l´tv´nyt biztos´ e o u a a ıtanak. Egy cs´cspont sz´ nem m´s. vagy valamely cs´cspont sz´ et haszn´lja. fejezet Megvil´g´ as a ıt´ A megvil´g´ as modellez´s´nek fontos szerepe van a val´szer˝ k´pek el˝´ll´ as´ban. hogy az objektumokkal utk¨zve minden ir´nyba azonos m´don ´s o o ¨ o a o e m´rt´kben ver˝dik vissza. • Az ´br´zoland´ objektumok ´ltal kibocs´tott f´ny. poligon) t¨bbi pontj´ban az ´rnyal´si modellt˝l f¨gg˝en (l´sd a 4. e e u o e a e a o o • A sz´rt f´nynek (diffuse light) van ir´nya. szakasz. mint a u ın´ a u ıne a pontb´l a n´z˝pontba (a szembe) eljut´ f´ny sz´ amit a cs´cspontot tartalmaz´ objeko e o o e ıne. melyre nincsenek hat´ssal a a a o a a e a f´nyforr´sok. Az OpenGL csak a cs´cspontokban sz´m´ ki a sz´ a cs´cspontok ´ltal defini´lt u a ıtja ınt. ir´nya nem ismert (gondoljunk olyan napa o au e a a pali f´nyre. u o tum anyag´nak tulajdons´gai. val´szer˝ k´pek u e ıgy e oe u e o u e l´trehoz´s´ra. u a o u 41 . Az OpenGL viszonylag egya a o o a a szer˝ modellt alkalmaz. melynek forr´sa. A sz´m´ og´pi grafik´ban ıts´ e e e o e e e e e a ıt´ e a haszn´lt megvil´g´ asi sz´m´ asok ´ltal´ban nem valamely fizikai folyamat le´ asai. de m´g ´ is el´g sok lehet˝s´g¨nk van ig´nyes. amikor a nap a felh˝k m¨g¨tt van). Egyr´szt a t´rben a f´nyforr´sokt´l f¨ggetlen¨l e e e o o o e e e a o u u (azokra vissza nem vezethet˝) jelen l´v˝ k¨rnyezeti f´nyb˝l – ezt glob´lis k¨rnyeo e o o e o a o zeti f´nynek is nevezik –. hogy milyen ir´nyb´l n´zz¨k e e o a a o e u az objektumokat. amit a f´nyforr´sok k¨rnyezeti u o o e ´ a o o e o e a o f´nykomponens´nek nevez¨nk.

amit er˝s.1. az un. o e e eu o 42 . Megfelel˝ sz¨gb˝l n´zve egy f´nyes (t¨bbnyire feh´r) foltot l´tunk. ´bra. vagyis vektork´nt kezelend˝k (l´sd e o a a 4. a a e a a e e o sz´rt ´s a t¨kr¨z¨tt f´nyt. A * m˝velet u e ıv¨ a a e u ou u az I = (IR . IA ) ´s J = (JR . Ezen sz´ ınvektorokon a szok´sos ¨sszead´s ´s skal´rral val´ szorz´s a o a e a o a m˝velet´n k´ ul egy speci´lis szorz´st is ´rtelmez¨nk. tov´bb´ azt. IB · e JB . G¨mb k´pei k¨l¨nb¨z˝ f´ny¨sszetev˝k figyelembe v´tel´vel: a) megvil´g´ as a o e uo o o e o o e e a ıt´ n´lk¨l. IG · JG . A megvil´g´ asnak ´s az objektumok optikai tulajdons´gainak o e u o a ıt´ e a a t´rbelis´g ´rz´keltet´s´ben j´tszott szerep´t illusztr´lja a 6. JG . a o e u a o e o o u Gondoljunk egy sima fel¨let˝ f´mg¨mbre. a ıt´ aa A tov´bbiakban azt felt´telezz¨k. JA ) vektorokhoz az I ∗ J = (IR · JR . hanem a n´z˝pontt´l is f¨gg. b) k¨rnyezeti f´nnyel ´s sz´rt visszaver˝d´ssel. a sz´ a e u ın a o ınindex m´dra a fejezet v´g´n t´r¨nk ki r¨viden. u o o e a e u e e ee Az OpenGL-ben a k¨l¨nb¨z˝ t´ u f´nyeket. e e e e ee a e a a 6. koncentr´lt f´nnyel vil´g´ u u e o o a e a ıtunk meg. melynek o o o e e o e a m´rete ´s helye a n´z˝pontt´l f¨gg. IA · JA ) vektort rendeli. u Az objektumok anyag´nak optikai tulajdons´gain´l megadhatjuk az objektum ´ltal kia a a a bocs´tott f´nyt. ´bra. az alakzatok optikai k¨lcs¨nhat´s´nak (´rny´kol´s. visso e u o o e o a o zaver˝d´si egy¨tthat´k.1. c) k¨rnyezeti f´nnyel ´s t¨kr¨z˝ e u o e e o o e o e e u o o visszaver˝d´ssel o e Nincs lehet˝s´g a f´nyt¨r´s. objekoe e oe o o aa a e a tumok t¨kr¨z˝d´se egym´son) ´s fel¨leti ´rdess´g modellez´s´re. fejezetet). hogy az anyag milyen m´rt´kben veri vissza a k¨rnyezeti. hogy a sz´ megad´si m´dja RGBA. az anyagra jellemz˝ konstansok. m´ e e e o o u u ıgnem elt˝nik. Az ut´bbi h´rom. ´s hat´sa nemcsak az u o o e a e a e a anyagtulajdons´gokt´l ´s a cs´cspontbeli norm´list´l. a f´nyvisszaver˝ k´pess´get jellemz˝ u o o o ıpus´ e e o e e o konstansokat RGBA komponenseikkel kell megadni.• A t¨kr¨z¨tt f´nynek (specular light) is van ir´nya ´s forr´sa. fej¨nket mozgatva a folt is mozog. a oır´ • megvil´g´ asi modell defini´l´sa. IG . e a e a • az anyagok optikai tulajdons´gainak el˝´ asa. JB . Az OpenGL-ben a megvil´g´ as befoly´sol´s´ra h´rom lehet˝s´g van: a ıt´ a aa a oe • f´nyforr´sok (f´nyek) megad´sa. amit *-gal jel¨l¨nk. IB .

. e A GL LIGHT MODEL AMBIENT param´terrel a glob´lis (f´nyforr´sokt´l f¨ggetlen) e a e a o u k¨rnyezeti f´nyt adhatjuk meg. Ekkor a rendszer a h´ts´ lapok norm´lisait megford´ (−1. e e e mely esetben a rendszer a n´z˝pontkoordin´ta-rendszer z tengely´nek (0. mindk´t oldalt a megvil´g´ asnak megfelel˝en e u e a ıt´ o e ´br´zoljunk.. 0. ha nem adunk meg egyetlen f´nyforr´st sem.3. Ha a n´z˝pont v´gtelen t´voli.) pontj´t e o a e a haszn´lja n´z˝pontk´nt a t¨kr¨z˝d˝ visszaver˝d´s sz´m´ as´n´l. a uo o ´ besz´lhet¨nk fel´nk n´z˝ ´s h´ts´ poligonokr´l (amelyek h´toldal´t l´tjuk). A v´gesben l´v˝ (val´di) n´z˝pont haszn´lat´val val´szer˝bb u ıti a ıt´ e e o o e o a a o u eredm´nyt kapunk. 0. ez a a e o e e a aa puszt´n a megvil´g´ asi sz´m´ asokra van hat´ssal.1. valamint a n´z˝pontba mutat´ vektorok a u o e a e o o sz¨ks´gesek.2. vagyis a teret p´rhuzamosan vet´ uk a u e e o e a a ıtj¨ k´ps´ e ıkra.). A param´ter GL TRUE a e o e u o o o o e a ıt´ a a e ´rt´ke eset´n a n´z˝pont a n´z˝pontkoordin´ta-rendszer orig´ja lesz.2. a e e a A GL LIGHT MODEL LOCAL VIEWER param´ter a t¨kr¨z˝d˝ f´ny hat´s´ra kee u o o o e aa letkez˝ f´nyes folt(ok) sz´m´ as´t befoly´solja. a ıt´ oa u o o e e e oe hogy a poligonokat k´toldal´nak tekintve.3. ami m´r helyes eredm´nyre vezet. Ny´ ıgy e u e e o e a o o a a a ılt fel¨letek (ezeket k¨zel´ o poligonh´l´) eset´n a nem fel´nk n´z˝ poligonokat – az el˝z˝ u o ıt˝ ao e e e o o o terminol´gia szerint a h´ts´ lapokat – is l´thatjuk. akkor a cs´cspontokb´l a n´z˝pontba mutat´ ir´nyok megegyeznek. mivel minden egyes cs´cspontra e a ıt´ e o u ki kell sz´m´ a ıtani a n´z˝pontba mutat´ ir´nyt.2. de az ezekkel kapcsolatos megvil´g´ asi o a o a a ıt´ sz´m´ asok nem a val´s´got t¨kr¨z˝ eredm´nyre vezetn´nek. ami azt biztos´ o e e e ıtja.6. de a sz´m´ asi ig´ny megn˝. e e e e o e o a o Mint azt a 3. 1. az OpenGL a poligonok oldalait megk¨l¨nb¨zteti. GL LIGHT MODEL LOCALe e VIEWER ´s GL LIGHT MODEL TWO SIDE lehet. 1. Alap´rtelmez´se (0. TYPE param).el megszorozza) ´s ´ v´gzi el a sz´m´ asokat. pontban l´ttuk. a ıt´ void glLightModel{if} (GLenum pname. e o e e a • a poligonok fel´nk n´z˝ ´s h´ts´ oldalai egyform´n. Megvil´g´ asi modell a ıt´ Az OpenGL megvil´g´ asi modellj´nek h´rom ¨sszetev˝je van: a ıt´ e a o o • glob´lis k¨rnyezeti f´ny. const TYPE *param). a a ıt´ a ıt´ a A GL LIGHT MODEL LOCAL VIEWER param´ter alap´rtelmez´se GL FALSE.. 0. pname ´rt´ke e e GL LIGHT MODEL LOCAL VIEWER GL LIGHT MODEL TWO SIDE lehet. 0. Ez e ıgy e a ıt´ a e 43 ´s e . o A megvil´g´ asi modellt a glLightModel*() paranccsal adhatjuk meg. a o e • a n´z˝pont helye (v´gesben vagy v´gtelen t´volban van). Ezen folt kisz´m´ as´hoz a cs´cspontbeli o e a ıt´ a a a ıt´ a u norm´lis. Ezt ugy ´rhetj¨k el. vagy k¨l¨nb¨z˝k´ppen kezee e o e a o a uo o o e lend˝k. ami leeu o e o o a gyszer˝s´ a sz´m´ asokat. a cs´cspontb´l a f´nyforr´sba. A n´z˝pont hely´nek ilyen ´rtelm˝ e o o a e o e e u “megv´ltoztat´sa” nem jelenti a n´z˝pont hely´nek t´nyleges megv´ltoztat´s´t. void glLightModel{if}v (GLenum pname. hogy l´ssunk valamit m´g akkor is. pname ´rt´ke GL LIGHT MODEL AMBIENT. Ez´rt lehet˝s´g van arra. hogy a GL LIGHT MODEL TWO SIDE param´ternek a a ´ e u e e a o a ıtja a GL TRUE ´rt´ket adjuk.

void glLight{if}v (GLenum light. ilyen esetben a cs´cspont sz´ et a megad´sakor kurrens rajzol´si sz´ e u ın´ a a ın hat´rozza meg.1. akkor e e e e a uo o azokat k¨l¨n felt¨ntetj¨k. e e 6. A v´gtelen t´volban l´v˝ f´nyforr´sb´l kibocs´tott e a e a e o e a o a 44 . paranccsal. GL SPECULAR). a 6. enged´lyezni kell a a ıt´ a ıt´ e e megvil´g´ ast a glEnable(GL LIGHTING). hogy az OpenGL megvil´g´ asi sz´m´ asokat v´gezzen. Egy-egy f´nyforr´snak sok a e a e a jellemz˝je van. a pontos fels˝ korl´tot a GL MAX LIGHTS paa e a o a ram´terrel megh´ e ıvott glGetIntegerv() paranccsal kaphatjuk meg. uo u u Az i-edik f´nyforr´st a glEnable(GL LIGHTi). hogy az adott f´nyforr´s milyen m´rt´kben o e o o e a e e j´rul hozz´ a t´rr´sz k¨rnyezeti f´ny´hez. 6. t´bl´zat pname lehets´ges ´rt´keit ´s azok alap´rtelmez´s´t tartalmazza. u o e e Ahhoz. ir´nya.2.a lehet˝s´g a GL LIGHT MODEL TWO SIDE param´ternek adott GL FALSE ´rt´kkel oe e e e sz¨ntethet˝ meg. A e e e e ın˝ a e e e u val´szer˝ hat´s ´rdek´ben a GL DIFFUSE ´s GL SPECULAR param´tereknek c´lszer˝ o u a e e ugyanazt az ´rt´ket adni. ami egyben az alap´rtelmez´s is. A light param´ter e ´rt´ke GL LIGHTi 0 ≤ i < GL MAX LIGHTS lehet. GLenum pname. GL DIFFUSE) ´s a t¨kr¨z¨tt f´ny (speo e e u o o e a ın´ cular light. sz´ helye.2. Ez lehet v´gesben l´v˝. uveg) e e o e ın´ u u a ¨ tapasztalhatunk ilyen jelens´get.2. A f¨ggv´ny els˝ alakj´val (a e a e e e e u e o a skal´r v´ltozattal) csak az egyetlen skal´rral megadhat´ param´terek ´ll´ a a a o e a ıthat´k be. const TYPE *param). ´s egyenk´nt lehet ˝ket ki.2. a sz´rt f´ny (diffuse light. A f´ny sz´ e ıne A f´nyforr´s ´ltal kibocs´tott f´ny h´rom ¨sszetev˝b˝l ´ll: a k¨rnyezeti f´ny (ambient e a a a e a o o o a o e light. Mindh´rom sz´ et az RGBA komponenseivel kell megadni. o ıne. paranccsal tilthatjuk le. amit mi a f´ny sz´ enek l´tunk.1. A k¨rnyezeti f´ny¨sszetev˝ azt adja meg. A sima fel¨let˝ t´rgyakon (pl. e e a e e e o vagy v´gtelen t´voli (w = 0) pont is. ´s a f´nyes folt leggyakrabban feh´r sz´ unek l´tszik. A t¨kr¨z¨tt f´ny¨sszetev˝ befoly´solja a e ın´ a u o o e o o a az objektumok k´p´n megjelen˝ f´nyes folt sz´ et. A o a 6. Alap´rtelmez´s szerint a megvil´g´ as nem enged´lyezett. paranccsal lehet bekapcsolni. A light azonos´ oj´ f´nyforr´st hozza l´tre. TYPE param). paranccsal pedig ki lehet kapcsolni. (i > 0) f´nyforr´sokra k¨l¨nb¨zik. A f´nyforr´s sz´rt f´ny´nek a sz´ fejezi ki a a e e o e e e a o e e ıne legink´bb azt. F´nyforr´s megad´sa e a a Az OpenGL-ben legal´bb nyolc f´nyforr´st adhatunk meg. A megvil´g´ ast a glDisaa ıt´ a ıt´ e e a ıt´ ble(GL LIGHTING). a e e o e void glLight{if} (GLenum light. A f¨ggv´ny megh´ as´val a light e e u e ıv´ a f´nyforr´snak a pname param´ter ´rt´k´t lehet megadni.´s bekapcsolni. a glDie a sable(GL LIGHTi). Minden OpenGL implement´ci´ban leıt´ u e a e a o gal´bb 8 f´nyforr´st lehet megadni. GL AMBIENT). Ha az a a e e e e e ee alap´rtelmez´s a GL LIGHT0 ´s a GL LIGHTi. mint pl. A f´nyforr´sok helye e a A GL POSITION param´terrel a f´nyforr´s hely´t adhatjuk meg. GLenum pname.

A f´ny e e o e o e e e tompul´s´t a aa 1 T = min . ´br´t). vagyis a f´ny nem tompul. A rendszer ezt az ir´nyt is transzform´lja a e e a a kurrens n´z˝pont-modell transzform´ci´val. c1 = c2 = 0. azaz hogyan tompul a f´ny (attenuation).. 6. −1.). mivel a megvil´g´ assal a o e o a a a ıt´ kapcsolatos sz´m´ asokat itt v´gzi el.. mivel minden ir´nyba bocs´t ki f´nyt.1) c0 + c1 d + c2 d2 kifejez´ssel ´ e ırja le a rendszer. e a a u u A GL SPOT CUTOFF param´terrel a f´nyk´p β f´l ny´ assz¨g´t adhatjuk meg foke e u e ıl´ o e ban. Alap´rtelmez´se (0. hogy a f´nyforr´s nem reflektor. ahol a ´s l ´rtelmez´se a 6.]. u e ıl´ o a a a mivel β ∈ [0. azaz T = 1.2.1 (6. ak´r v´gtelen t´volban van) a kurrens n´z˝pont-modell trane a e a e a e o szform´ci´val a n´z˝pontkoordin´ta-rendszerbe transzform´lja. de a glob´lis k¨rnyezeti f´nyre ´s az ´br´zolt objektumok ´ltal kibocs´tott f´nyre a o e e a a a a e nem. vagyis ha δ < β. Az Il f´nyt e e u a e e e a e kibocs´t´ reflektornak δ f¨ggv´ny´ben bek¨vetkez˝ intenzit´scs¨kken´s´t az Il cosr δ kifeao u e e o o a o ee jez´ssel ´ e ırjuk le.. c0 a t´vols´gt´l f¨ggetlen (GL CONSTANT ATTENUATION). c2 pedig a t´vols´g n´gyzet´vel a a a a a e e ar´nyos (GL QUADRATIC ATTENUATION ) egy¨tthat´ja a f´ny tompul´s´nak. Alap´rtelmez´se 180. a u o e aa Alap´rtelmez´s szerint c0 = 1. A f´nytompul´s e e a e a e a e e a a f´nyforr´sb´l kibocs´tott f´ny mindh´rom ¨sszetev˝j´re (k¨rnyezeti... vagy egy [0.. 0. a ıt´ e V´gesben l´v˝ f´nyforr´s eset´n megadhat´.3. Ennek ´rdek´ben a kibocs´tott e e o e a o e e e a f´nysugarakat forg´sk´p alak´ erny˝vel lehat´roljuk.2. A sz´m´ asok sor´n a a ıt´ a cos δ = a·l |a| |l| kifejez´st c´lszer˝ haszn´lni. Teh´t r = 0. Reflektor f´nyforr´sb´l csak akkor jut el f´ny a cs´cspontba. 90. t¨kr¨z¨tt) e a o a e a o oe o o u o o hat. eo a e e a o e u ha a cs´cspontot ´s a f´nyforr´st ¨sszek¨t˝ egyenes ´s a f´nyk´p tengely´nek δ sz¨ge kiu e e a o oo e e u e o sebb... (Vigy´zzunk. e e e Ezt az ´rt´ket haszn´lja a rendszer v´gtelen t´voli f´nyforr´s eset´n is.sugarak p´rhuzamosak – ilyennek tekinthet˝k a val´s´gban a napsugarak –.] intervallumbeli sz´m. hogy a f´ny intenzit´sa hogyan cs¨kken a k´p tena a e a o u gely´t˝l a pal´st fel´ haladva. ugyanis a −1-gyel val´ szorz´s m´s eredm´nyt ad!) e a e o a a e A v´gesben l´v˝ f´nyforr´sok – sok rendszerben ezeket pontszer˝ f´nyforr´snak is nevee e o e a u e a zik – azonos intenzit´s´ f´nyt bocs´tanak ki minden ir´nyba. ´bra szerinti. c1 a a a a a o u t´vols´ggal ar´nyos (GL LINEAR ATTENUATION). eset´n ıv a a e a f´ny intenzit´sa nem v´ltozik a k´pon bel¨l. tov´bb´ azt.2. e a a a e A GL SPOT DIRECTION param´terrel a f´nyk´p a forg´stengely´nek ir´ny´t ade e u a e a a hatjuk meg. Az ´rt´k vagy 180. azaz cos δ > cos β. Reflektor l´trehoz´s´hoz meg kell e a u u o a e aa adnunk a f´nyk´p tengely´nek ir´ny´t (GL SPOT DIRECTION) ´s f´l ny´ assz¨g´t e u e a a e e ıl´ o e (GL SPOT CUTOFF). ahol d a cs´cspontnak a f´nyforr´st´l m´rt u e a o e t´vols´ga. 90. itt nem val´di homog´n koordin´t´kkal ıci´ a a o a o e aa kell megadnunk a f´nyforr´s hely´t. e o a o 45 .. sz´rt. hogy a f´nyforr´st´l t´volodva milyen e e o e a e o e a o a m´rt´kben cs¨kken a f´ny er˝ss´ge. ahol r (GL SPOT EXPONENT) nemnegat´ sz´m. e e a e e ami azt jelenti. A rendszer a f´nyforr´s au e a a e a hely´t (ak´r v´gesben. ´s a f´nyforr´s a o oa e e a poz´ oja ezek ir´ny´val adhat´ meg. Reflektor V´gesben l´v˝ f´nyforr´sb´l reflektort is l´trehozhatunk. mint a k´p β f´l ny´ assz¨ge (l´sd a 6.

mint mag´t a f´nyt. TYPE param). a a e • az anyag milyen m´rt´kben veri vissza a k¨rnyezeti. vagyis a cs´cspont a f´nyk´pon k´ ul van. az alakzatok sz´ ere a a ıt´ e ın´ rajzol´si sz´ a ınnek nincs hat´sa! Ilyen esetben az alakzatok sz´ et a f´nyviszonyok ´s az a ın´ e e alakzatok optikai anyagtulajdons´gai hat´rozz´k meg.6. Az alap´rtelmez´s 0. ´ a e Fontos tudni. e e e a a e e e ami azt jelenti. GL BACK ´s e e e e 46 . ´bra. vagyis pontosan ugy.2. A megvil´g´ asi a ıt´ meg seg´ eg´vel. void glMaterial{if}v (GLenum face. Anyagtulajdons´gok a Az OpenGL az ´br´zoland´ objektumok anyag´nak a k¨vetkez˝ optikai tulajdons´gait a a o a o o a veszi figyelembe: • az objektum ´ltal kibocs´tott f´nyt. Az a e anyagnak a k¨l¨nb¨z˝ f´nyeket visszaver˝ k´pess´g´t kifejez˝ konstansokat RGBA komuo o o e o e e e o ponenseikkel adhatjuk meg. e o e o a e Az i-edik f´nyforr´s reflektor hat´s´t kifejez˝ skal´r e a aa o a  ha GL SPOT CUTOFF=180◦ . ıts´ e sz´m´ asokn´l a ıt´ a haszn´lt a anyagtulajdons´gokat a adhatjuk A face param´ter ´rt´ke GL FRONT. hogy a f´ny er˝ss´ge nem cs¨kken a pal´st fel´ haladva. hogy a f´ny mennyire kone a e centr´lt.3. ann´l koncentr´ltabb a f´ny. vagyis milyen m´rt´kben cs¨kken az er˝ss´ge a f´nyk´p tengely´t˝l a pal´st fel´ a e e o o e e u eo a e haladva.2. e 6.0 egy´bk´nt. Min´l nagyobb ez az ´rt´k. GLenum pname. Reflektor f´nyforr´s a e a A GL SPOT EXPONENT param´terrel azt szab´lyozzuk. e ´bra szerinti vektorok. a sz´rt ´s a t¨kr¨z¨tt f´nyt. hogy amennyiben a megvil´g´ as enged´lyezett. e e  |a| |l| (6. ha δ > β. a Ezeket a tulajdons´gokat nagyr´szt a glMaterial*() paranccsal adhatjuk meg.  1.   0. const TYPE *param). GLenum pname. u e u ıv¨ Ri = r a·l   max .2) ahol a ´s l a 6. a a a void glMaterial{if} (GLenum face. e e o o e u o o e • a ragyog´st.. vagyis nem reflektor. r pedig az i-edik f´nyforr´s a e a GL SPOT EXPONENT param´tere.

hogy a pname param´terhez rendelt ´rt´kek a poligonok fel´nk n´z˝ e e e e e o oldal´ra. uo o o uo o o a u pname lehets´ges ´rt´keit ´s a hozz´juk rendelhet˝ ´rt´kek alap´rtelmez´s´t a 6. Ezzel e e azt ´ll´ a ıtjuk be. o o e u o e e e a 6. alap´rtelmez´se GL FRONT AND BACK.3) |l| |n| ahol l a cs´cspontb´l a f´nyforr´sba (GL POSITION) mutat´ vektor.3. Ezen k´ ul szerepet o e u o e u ıv¨ 47 .GL FRONT AND BACK lehet. hogy a poligonok k¨l¨nb¨z˝ oldalai k¨l¨nb¨z˝ optikai tulajdons´g´ak legyenek.3. A pontos ¨sso eo u e o a o e o zef¨gg´s u e l·n D = max . A k¨rnyezeti ´s sz´rt f´nyek visszaver˝d´s´vel ellent´tben a szembe eljut´ t¨kr¨z¨tt o e o e o ee e o u o o visszaver˝d´s f¨gg att´l is. ann´l nagyobb a visszaver˝d´s. Ez a param´ter lehet˝v´ a a o o e o e teszi. a a o A GL AMBIENT param´terrel azt adjuk meg. az ¨sszes t¨bbit figyelmen k´ ul hagyja. hogy az anyag milyen m´rt´kben veri e e e vissza a k¨rnyezeti f´nyt. l. n ´s α ´rtelmez´se a 6. a rendszer azonban csak az anyagtulajdons´g GL DIFFUSE param´ter´n´l megaa e e e dott alfa ´rt´ket rendeli a cs´csponthoz. Min´l kisebb ez a sz¨g. kd pedig az anyag a u o o e sz´rt visszaver˝d´si egy¨tthat´ja. h´ts´ oldalukra. ka pedig az anyag k¨rnyezeti f´ny visszaver˝d´si egy¨tte oo o e o e o e u hat´ja. hogy honnan n´zz¨k az objektumokat. u ın´ ıt´ a M´ a sz´rt visszaver˝d´s m´rt´ke f¨gg a f´nyforr´s ´s a fel¨let k¨lcs¨n¨s helyzet´t˝l. Id a cs´cspontba eljut´ sz´rt f´ny. ´bra szerinti. Sz´rt visszaver˝d´s a o o e Minden f´nykomponensn´l ´s visszaver˝d´si egy¨tthat´n´l megadunk alfa (A) ´rt´ket e e e o e u o a e e is. o A GL DIFFUSE param´terrel azt szab´lyozzuk. A visszavert k¨rnyezeti f´ny Ia ∗ka . ıg o o e e e u e a e u o o o eo a visszavert k¨rnyezeti f´ny ett˝l f¨ggetlen. o e o u A val´s´gban az anyagok k¨rnyezeti ´s sz´rt visszaver˝d´si egy¨tthat´ja ´ltal´ban oa o e o o e u o a a megegyezik.2. A f¨ggv´ny els˝ (skal´r) form´ja csak a GL SHININESS param´ter a a u e o a a e megad´sakor haszn´lhat´. A e e u o o ıv¨ e e e e a GL DIFFUSE param´tern´l megadott f´nyvisszaver´si konstans j´tssza a legnagyobb szerepet a fel¨let sz´ enek kialak´ as´ban. Erre szolg´l e oe ıt u aa a e a GL AMBIENT AND DIFFUSE param´ter. ez´rt az OpenGL lehet˝s´get biztos´ ezek egyidej˝ megad´s´ra. e e e e a o e e e ee t´bl´zat tartalmazza. ´bra. A visszaver´s m´rt´ke ezen fel¨leti konstanson u o o e e e e u k´ ul a cs´cspontbeli norm´lisnak ´s a cs´cspontb´l a f´nyforr´sba mutat´ ir´nynak a ıv¨ u a e u o e a o a sz¨g´t˝l is f¨gg. 0 Id ∗ k d (6. vagy mindkett˝re vonatkozzanak. hogy a fel¨let milyen m´rt´kben veri e a u e e vissza a cs´cspontba eljut´ sz´rt f´nyt. ahol Ia az ´br´zolt t´rr´szben o e o e a a e e jelenl´v˝ ¨sszes k¨rnyezeti f´ny. n a cs´cspontbeli u o e a o u norm´lis (cos α = l · n/ (|l| |n|)).

ks az anyag t¨kr¨z˝ u o u o o e u o o visszaver˝d´si egy¨tthat´ja (GL SPECULAR). de arra is lehet˝s´g van.4. ´bra. Ezzel a programunk hat´konys´g´t o a e a a n¨velhetj¨k. amivel azt ´rj¨k el.] intera o vallumon v´ltozhat. az anyag t¨kr¨z¨tt visszaa e u a e a ıci´ u o o ver˝d´si egy¨tthat´ja ´s az anyag ragyog´si t´nyez˝je.. a u o o o e u oa e o ragyog´si kitev˝t pedig a GL SHININESS-el adhatjuk meg.4. Az anyag t¨kr¨z¨tt visszaver˝d´si egy¨tthat´j´t a GL SPECULAR param´terrel. 0 Is ∗ ks . Min´l nagyobb ez a kitev˝. e a a e Ezt a lehet˝s´get ´ltal´ban l´mp´k.j´tszik m´g a cs´cspontbeli norm´lis. ´bra jel¨l´seit haszn´lva.4. o e u o e a e o 6. GLenum mode). Az ut´bbi a [0.4) ahol s = l/ |l| + v/ |v|. oe a a a a a e a ee a Ilyenkor c´lszer˝ m´g az adott objektumban egy f´nyforr´st is l´trehoznunk a vil´g´ otest e u e e a e a ıt´ hat´s el´r´se ´rdek´ben. T¨kr¨z¨tt visszaver˝d´s a u o o o e A 6. m´ meg nem v´ltoztatjuk. a szembe eljut´ t¨kr¨z¨tt f´ny a oe a o u o o e  ha l · n ≤ 0  0. a f´nyforr´s poz´ oja. Az anyagtulajdons´gok v´ltoztat´sa a a a Egy-egy anyagtulajdons´g mindaddig ´rv´nyben van. A kurrens rajzol´si sz´ a ın 48 . hogy az adott anyagtulajdons´g a raje u a zol´si sz´ a ınnek (glColor*()) megfelel˝en fog v´ltozni. egy´bk´nt e e  max |s| |n| (6. a f´nyes ter¨let ann´l kisebb ´s ragyog´bb a e o e u a e o (jobban f´kusz´lt a f´ny). Is a cs´cspontba eljut´ t¨kr¨z¨tt f´ny. s s·n S= . s pedig az anyag ragyog´si kitev˝je o e u o a o (GL SHININESS). o a e A GL EMISSION param´terrel az objektum ´ltal kibocs´tott f´nyt adhatjuk meg. 128. A poligonok face param´terrel megadott oldal´nak a mode param´terrel kie a e jel¨lt tulajdons´g´t a kurrens rajzol´si sz´ o a a a ınhez kapcsolja. hogy valamely anyagtulajdons´got a oe a rajzol´si sz´ a ınhez kapcsoljunk. A a e e ıg a v´ltoztat´s tulajdons´gonk´nt t¨rt´nik. a ee e e 6. o u void glColorMaterial (GLenum face. vagy m´s f´nyforr´sok modellez´s´hez haszn´ljuk. Ezt megtehetj¨k az el˝z˝ekben ismertetett gla a a e o e u o o Material*() paranccsal.

alap´rtelmez´s a GL AMBIENT AND DIFFUSE. Az RGBA form´ban megadott f´nyforr´ssal kapo a e a e e e a csolatos param´terek k¨z¨l csak a GL DIFFUSE ´s GL SPECULAR ´rt´keket haszn´lja a e o u rendszer.59G(sl ) + 0. alap´rtelmez´s GL FRONT AND BACK. Megvil´g´ as sz´ a ıt´ ınindex m´dban o Sz´ ınindex m´dban az RGBA komponensekkel megadott megvil´g´ asi param´tereknek o a ıt´ e vagy nincs hat´suk. GL AMBIENT AND DIFFUSE. a 6. ker¨lj¨k el a mega a e u u vil´g´ as haszn´lat´t sz´ a ıt´ a a ınindex m´dban. A glColorMaterial() parancsot akkor haszn´ljuk. anyagtulajdons´gokat kell megadni (glMaterial*()).4) ¨sszef¨gg´s szerint.3) ¨sszef¨gg´s szerint. ahol o Ie az objektum ´ltal kibocs´tott f´ny.3R(dl ) + 0. e a o o u o o e o u e Ezen sz´m´ asok ut´n a rendszer a kapott RGBA ´rt´keket a [0.1) ¨sszef¨gg´s szerint. ´s ha m´r nem akarjuk haszn´lni az e a a ¨sszekapcsol´st.6. hogy az objektumok megvil´g´ as szerint legyenek ´br´zolva defini´lni a a ıt´ a a a kell egy megvil´g´ asi modellt (glLightModel()).11B(dl ) sci = 0. GL BACK ´s GL FRONT AND BACK lee e e e het. GL SPECULAR ´s GL EMISSION e ´rt´keket veheti fel.3R(sl ) + 0. e e e GL DIFFUSE.] intervallumra lev´gja. a o o 6.5) alakban ´ ırhat´ fel. f´nyforr´st kell l´trehozni (glLight*()) ´s azt be kell kapcsolni (glEnable(GL LIGHTi)).2) ¨sszef¨gg´s szerint.megv´ltoztat´sa (glColor*()) a mode anyagtulajdons´g automatikus v´ltoztat´s´t a a a a aa eredm´nyezi. Az i-edik f´nyforr´s sz´rt. ha egyetlen anyagtulajdons´got a a kell gyakran – sok cs´cspontban – v´ltoztatnunk. A mode param´ter a GL AMBIENT. a o e Ti az i-edik f´nyforr´s tompul´sa a (6..11B(sl ) 49 . A face ´rt´ke GL FRONT. enged´lyezni kell a megvil´g´ ast a ıt´ e a ıt´ e a e e (glEnable(GL LIGHTING)). e e e e A glColorMaterial() parancs kiad´sa ut´n enged´lyezn¨nk kell a hozz´kapcsol´st a a e u a a a glEnable(GL COLOR MATERIAL) paranccsal.5. egy´bk´nt a glMaterial*() parancs u a e e haszn´lata el˝ny¨sebb. a ıt´ a e e a Ahhoz teh´t. illetve t¨kr¨z¨tt f´nykomponens´t sz´ e a o u o o e e ınindex m´dban o a dci = 0. vagy speci´lisan ´rtelmezettek. e a a o u e Ri az i-edik f´nyforr´s reflektor egy¨tthat´ja a (6. A cs´ cspontok sz´ enek meghat´roz´sa megu ın´ a a vil´g´ as eset´n a ıt´ e n−1 n f´nyforr´st felt´telezve a cs´cspontokba eljut´ V f´ny e a e u o e V = Ie + Ig ∗ ka + i=0 Ti Ri (Ai + Di + Si ) (6. e o e u oa Di az i-edik f´nyforr´sb´l a szembe eljut´ sz´rt f´ny a (6. e a u o o u e Ai = Iai ∗ka az i-edik f´nyforr´s k¨rnyezeti f´nykomponens´nek ´s az anyag k¨rnyezeti e a o e e e o f´ny visszaver˝d´si egy¨tthat´j´nak a szorzata. 1.59G(dl ) + 0. akkor a glDisable(GL COLOR MATERIAL) paranccsal le kell tiltao a nunk. a a e Ig a glob´lis k¨rnyezeti f´ny. e a o o o e o u e Si az i-edik f´nyforr´sb´l a szembe eljut´ t¨kr¨z¨tt f´ny a (6. Ha csak lehet.

mint RGBA m´dban. A (6. a f´nytompul´st ´s a f´nysz´r´ hat´st (Ti . GL COLOR INDEXES. A cs´cspont v´gs˝ sz´ o e u o o e ın´ u e o ıne c = min {c0 .5) kifejez´sben a kibocs´tott ´s a glob´lis k¨rnyezeti o e o e a e a o f´ny (Ie ´s Ig ) 0. a cs´cspontb´l a szembe eljut´ f´ny sz´ enek kisz´m´ asa is m´sk´pp a o u o o e ın´ a ıt´ a e t¨rt´nik. Alap´rtelmez´s szerint a k¨rnyezeti komponens e e o sz´ ınindexe 0. A 0. A e e e void glMaterial{if}v (GLenum face. u o o o o o e o u s0 = min {s. o Mint az v´rhat´. vagyis a szem a z¨ld sz´ ın´ e o e e e o ınre a leg´rz´kenyebb ´s a e e e k´kre a legkev´sb´.¨sszef¨gg´sekkel sz´m´ o u e a ıtja ki a rendszer.. Az ´ m´dos´ a ıt´ a a e ıgy o ıtott sz´rt ´s o e t¨kr¨z¨tt ¨sszetev˝k ¨sszeg´t jel¨lj¨k d-vel illetve s-el. a ıt´ a a e ıts¨ az Si sz´m´ as´hoz haszn´lt (6. ahol n a sz´ u e e ınindex-pufferben az egy sz´ sz´m´ra ın a a fenntartott bitek sz´ma.3.11 egy¨tthat´k az emberi szem ın´ o u o sz´ erz´kel˝ k´pess´g´nek felelnek meg.4) kifejez´sben Is ∗ ks -t sci -vel. mint RGBA m´dban. a 50 . sm az anyagnak a GL COLOR INDEXES param´terrel megadott k¨rnyezeti. sm } Az ´ kapott ´rt´ket a rendszer eg´sz sz´mm´ konvert´lja. 0. ahol R(n). A f´nyforr´soknak nincs k¨rnyezeti f´ny komponense o e a o e (Ai = 0). a Di kisz´m´ as´ra haszn´lt (6. pontosabın´ o o e u o o o oe ban azok sz´ ınindexeit adhatjuk meg. Ri ) ugyan´gy sz´m´ ki e e e a e e oo a u a ıtja a rendszer. majd bitenk´nti ´s (AND) ıgy e e e a a a e e n m˝veletbe hozza a 2 − 1 ´rt´kkel. G(n). const TYPE *param). e o sz´rt ´s t¨kr¨z¨tt f´ny sz´ enek indexe. a sz´rt ´s a t¨kr¨z¨tt komponens´ 1. paranccsal az anyag sz´ enek k¨rnyezeti. 1} c0 = am + d (1 − s0 ) (dm − am ) + s0 (sm − am ) ahol am . 0. sz´rt ´s t¨kr¨z¨tt ¨sszetev˝j´t. A glColorMaterial() parancsnak o e u o o e nincs hat´sa sz´ a ınindex m´dban.59. dm .3) kifejez´sben Id ∗ kd -t helyettes´ uk dci -vel. B(n) a sz´ ınpaletta n-edik sz´ enek RGB komponenseit jel¨li.

A f´nyforr´st meghat´roz´ param´terek a a e a a o e pname GL AMBIENT alap´rtelmez´se e e (0.... 0. 0. a f´nytompul´s e a line´ris a tagj´nak a egy¨tthat´ja u o 0. 0. 0. 1.) a f´nyforr´s helye e a (x. 1.. 1. 1..) zetev˝j´nek oe RGBA egy´bk´nt e e komponensei (0. w) (0.) tev˝j´nek oe RGBA egy´bk´nt e e komponensei (0. 1. y..) a reflektor (x. 1..) jelent´se e a f´ny k¨rnyezeti e o ¨sszetev˝j´nek RGBA o oe komponensei GL LIGHT0 a f´ny sz´rt ¨sszee o o eset´n e (1. 0. t´bl´zat.6. 1.. 0. 0. z.1.. −1.. y. a f´ny tompul´s´nak e aa konstans tagja 0.. 0. 1.. z) ir´nya a 0. 0.) GL LIGHT0 a f´ny t¨kr¨z˝ ¨sse u o o o eset´n e (1. a reflektor forg´sk´pj´nak a u a f´l e ny´ assz¨ge ıl´ o 1. 1. a f´nytompul´s e a m´sodfok´ tagj´nak a u a egy¨tthat´ja u o GL DIFFUSE GL SPECULAR GL POSITION GL SPOT DIRECTION GL SPOT EXPONENT GL SPOT CUTOFF GL CONSTANT ATTENUATION GL LINEAR ATTENUATION GL QUADRATIC ATTENUATION 51 .. 1..) (0....... a reflektor f´nyerej´nek e e cs¨kken´se o e 180.

. 1.) kibocs´tott f´ny a e (0.8. Az anyagtulajdons´g param´terei a a a e pname GL AMBIENT GL DIFFUSE GL AMBIENT AND DIFFUSE GL SPECULAR GL SHININESS GL EMISSION GL COLOR INDEXES alap´rtelmez´s jelent´s e e e (0.8.8.) t¨kr¨z˝ f´ny visszaver˝d´si u o o e o e egy¨tthat´ u o 0.) k¨rnyezeti ´s sz´rt f´ny visso e o e zaver˝d´si egy¨tthat´ o e u o (0.. 0.) sz´rt f´ny visszaver˝d´si o e o e egy¨tthat´ u o (0. 0.2.. 1. 0. 0. 0.2. 1. 1. 0. 0. t´bl´zat. 1. 0. 0..) k¨rnyezeti f´ny visszao e ver˝d´si egy¨tthat´ o e u o (0. 0.6.. 1. ragyog´s a (0.8.2. 1) k¨rnyezeti.8.8. sz´rt ´s t¨kr¨z˝ o o e u o o visszaver˝d´s sz´ o e ınindexe 52 ..2.

e o a e a a a ıt´ a • F´nyforr´sok. e u a a • M´trixm˝veletek (l´sd az 5. a u a a a ıt´ o e tov´bb´ ´ltal´ban a m´trixok inverz´re is sz¨ks´g van. ´ltal´ban nem egyezik meg a grafikus hardver sz´m´ra a a a a sz¨ks´ges form´tummal. a o o o a a a o a e Az al´bbiakban az alkalmaz´sok n´h´ny optimaliz´l´si lehet˝s´g´t soroljuk fel. nem pedig dinamikus o a adatb´zis. megvil´g´ asi modell (l´sd a 6. e a a a Arra nincsen garancia. ahogy kor´bban a list´ra ker¨ltek. fejezetet). hogy egyetlen implement´ci´ban sem kev´sb´ hat´kony u o ee a o e e e a display-list´n t´rolt parancsok v´grehajt´sa. Ez a k´t lehet˝s´g tetsz˝legesen kombin´lhat´ egy programon bel¨l. • Text´r´k (l´sd a 13. a grafikus hardver ig´nyeinek e e e megfelel˝en t´rolja a lista parancsait.7. fejezet). ugyanis a rendszer. Mivel a m´trixok kisz´m´ asa id˝ig´nyes lehet. ak´r azonnal e o a a a o a v´grehajthat´k. hogy milyen esetekben c´lszer˝ display-list´kat haszn´lni. ez´rt a lista v´grehajt´sa sokkal a a a a a e e a hat´konyabb lehet. ha egyetlen g´pen dolgozunk – a kliens ´s a szerver ıtm´ e e e g´p megegyezik –. Az a forma. A display-lista megh´ asakor a benne t´rolt parancsokat abban a sorrendben a ıv´ a hajtja v´gre a rendszer. Az optimaliz´l´s m´dja ´s m´rt´ke implea u o e e e a e aa o e e e ment´ci´f¨gg˝. A display-lista parancs cache. mint ugyanazok k¨zvetlen m´dban val´ a a e a o o o v´grehajt´sa. ahogyan megadjuk a raszteres adatokat. hogy a display-list´k haszn´lata sohasem cs¨kkena ou o a a a o theti a teljes´ enyt. vagyis a a e a aa oe e azt. a aa a a e u e e e e e a • Raszteres bitt´rk´pek ´s k´pek (l´sd a 9. fejezetet). N´h´ny – a k´s˝bbiekben felsoe a a u e a eo rolt – kiv´telt˝l eltekintve. fejezet Display-lista A display-lista OpenGL parancsok csoportja. de az biztos. Azt azonban figyelembe kell venn¨nk. fejezet). anyagtulajdons´gok. ez´rt t´l r¨vid list´k haszn´lata eset´n a lista v´grehajt´s´b´l e a o a e u o a a e e aa o sz´rmaz´ el˝ny elhanyagolhat´v´ v´lhat az adminisztr´ci´ okozta plusz munk´hoz k´pest. hogy a display-list´k haszn´lata e a u a a n´mi adminisztr´ci´val j´r. ha csak lehets´ges. m´g akkor sem. mint a parancsok k¨zvetlen kiad´sa. hogy minden OpenGL implement´ci´ optimaliz´lja a displaya o a lista m˝k¨d´s´t. melyet k´s˝bbi v´grehajt´s c´lj´b´l eo e a e a o t´rolunk. az azonban garant´lt. e o e oe o a o u A display-lista lehet˝s´get els˝sorban a h´l´zati k¨rnyezetben futtatott programok oe o ao o optim´lis m˝k¨d´se ´rdek´ben hozt´k l´tre. A display-lista leford´ asa sor´n az OpenGL val´sz´ uleg u e a ıt´ a o ın˝ a hardver sz´m´ra optim´lis form´tumban t´rolja. ua a 53 . az OpenGL parancsok ak´r list´ban t´rolhat´k. ennek k¨vetkezt´ben tartalma ut´lag nem m´dos´ a o e o o ıthat´ ´s a felhaszn´l´ nem oe ao f´r hozz´ a list´n t´rolt adatokhoz.

GL COMPILE eset´n a parancsok nem ker¨lnek v´grehajt´sra mik¨zben a list´ra ker¨lnek.2. param´terek ´rt´ke ker¨l t´rol´sra. nem t´rolhat´k display-list´n.2. a a o a a e e glIs*()). A k¨vetkez˝ parancsok a a a oe e e a a o o nem t´rolhat´k display-list´n: a o a 54 .• Poligonok kit¨lt´se mint´val. A leford´ e a ıt´ a u e ıtott display-list´t a szerver g´pen a e (amin a k´p megjelenik) t´rolja a rendszer. A display-lista tartalma A list´n a kifejez´sek. atmoszf´rikus hat´sok (l´sd a 8.1. o e a a • Opcion´lis v´g´s´ a a o ıkok haszn´lata (l´sd az 5. Display-lista l´trehoz´sa. mintha k¨zvetlen v´grehajt´si a a e ´ o e a m´dban adtuk volna ki azokat. glFlush(). ´s t´rolja ˝ket. kiad´s´t egy lez´ratlan glNewList() parancsnak kell e e o aa a megel˝znie. A mode param´ter ´rt´ke GL COMPILE vagy GL COMPILE AND EXECUTE e e e e u e a o a lehet. Egyszerre csak egy lista hozhat´ l´tre. a o o u e e a a A list param´ter pozit´ eg´sz sz´m lehet. A display-lista v´g´t jel¨li meg. am´ a glEndList() o e o a u ıg parancsot ki nem adjuk. v´grehajt´sa e a e a Display-list´t a glNewList() ´s glEndList() parancsok k¨z¨tt kiadott OpenGL parana e o o csokkal lehet l´trehozni. glFinish()). GLenum mode).3. A glNewList() ´s glEndList() z´r´jelp´r k¨z¨tt kiadott list´n e ao a o o a nem t´rolhat´ parancsokat k¨zvetlen¨l v´grehajtja a rendszer a lista l´trehoz´sa sor´n. A glEndList() parancs e o e kiad´sa OpenGL hib´t eredm´nyez. szakaszt). teh´t csak a display-list´nak megfelel˝ form´tumra konvert´lja a rendszer a u a a o a a parancsokat. o void glEndList (void). amelyek eredm´nye e a e e a kliens (a parancsot kiad´ g´p) ´llapot´t´l f¨gg. mely a lista glob´lis azonos´ oja lesz. Display-lista kezdet´t jel¨li meg. GL COMPILE AND EXECUTE eset´n a konvert´l´s ´s e a o e aa e t´rol´s mellet a rendszer v´gre is hajtja a parancsokat ugy. ez´rt azok a parancsok. a a 7. Az ezt k¨vet˝ OpenGL parancsok – a k´s˝bbiekben e o o o eo felsoroland´ kiv´telekt˝l eltekintve – a list´ra ker¨lnek mindaddig. akkor azt a rendszer b´rmif´le figyelmeztet´s n´lk¨l a e ıt´ u a e e e u fel¨l´ u ırja. szakaszt). ha nem el˝zi meg lez´ratlan glNewList() parancs. A lista o e a ao u a o a v´grehajt´sakor ugyanis a szervernek nem ´llnak rendelkez´s´re a sz¨ks´ges adatok. A e a a ee u e list´n nem t´rolhat´ parancsok ´ltal´ban vagy valamilyen ´rt´ket adnak vissza (glGet*(). nem pedig a param´tereket a e e e e u a a e tartalmaz´ vektor c´ o ıme. vagy a klienssel kapcsolatos inform´ci´t´l f¨ggnek (pl. a a e o a void glNewList (GLenum list. o 7. a oo u vagy a kliens ´ltal kezelt ´llapotv´ltoz´ ´rt´k´t v´ltoztatj´k meg. a o a e a ´s nem a kisz´m´ as´hoz sz¨ks´ges adatok. o e a • K¨d. transzform´ci´s m´trixok eset´n maga a m´trix. vagy a pl. Ha e ıv e a a ıt´ m´r l´tezik ilyen azonos´ oj´ lista.

attrib´tumok.4. majd a lista v´grehajt´s ut´n ´ll´ u e a a a ıtsuk vissza (glPopAttrib(). transzform´ci´s m´trixok). akkor az attrib´tumokat. hogy az ilyen jelleg˝ v´ltoz´sok csak u o e e u a a a display-lista v´grehajt´s´nak idej´re korl´toz´djanak.glDeleteLists() glGenLists() glPixelStore() glFeedbackBuffer() glGet*() glReadPixels() glFinish() glIsEnable() glRenderMode() glFlush() glIsList() glSelectBuffer() A display-list´k tetsz˝legesen sokszor v´grehajthat´k. a pontos sz´mot a GL MAX LIST NESTING param´terrel kiadott glGea a e tIntegerv() paranccsal kaphatjuk meg. Az ilyen jelleg˝ h´ asi l´ncnak van korl´tja. e a e o au a e a o void glCallList (GLuint list). Display-list´k ´s indexek kezel´se a e e A display-list´k indexe tetsz˝leges pozit´ eg´sz sz´m lehet. azaz ugyanazzal az azonos´ oval uj tartalm´ list´t ıt´ ´ u a hozhatunk l´tre. m´g nem e e e u o a o o e haszn´lt azonos´ okat. ´ a e oe a a a e e ıgy term´szetesen beolvas´s´ra sem. illetve e aa e a o u a transzform´ci´s m´trixokat a megfelel˝ verem haszn´lat´val a lista v´grehajt´sa el˝tt a o a o a a e a o ments¨k el (glPushAttrib(). A v´letlen fel¨l´ as elker¨l´se a o ıv e a e u ır´ ue ´rdek´ben a glGetLists() paranccsal k´rhet¨nk a rendszert˝l egym´st k¨vet˝. melyek megv´ltoztatj´k a renda a a szer glob´lis v´ltoz´inak ´rt´keit (pl. ıt´ a 55 . hasznos megold´s lehet. o e A display-list´k tartalmazhatnak olyan parancsokat. Nincs lehet˝s´g azonban a list´k tartalm´nak adatf´jlba ment´s´re. mivel index¨k (azonos´ ojuk) a a a u ıt´ glob´lis ´s egyedi. Ha azt akarjuk. de e ıt a o aa e a e a adott esetben elfogadhat´. Egy nem l´tez˝ lista megh´ as´nak semmilyen k¨vetkezm´nye sincs. Ezek a a a o e e u a o a v´ltoztat´sok term´szetesen a lista v´grehajt´sa ut´n is ´rv´nyben maradnak. A display-list´kat programunkban b´rhol haszn´lhatjuk. e a 7. ami ´ltal a h´ o lista tartalma (hat´sa) is megv´ltozik. akkor nem e o e e ıt´ u t¨rt´nik semmi. hogy egy adott azoa ıt´ e u nos´ o haszn´latban van-e. glPopMatrix()). amivel list´k hierarchikus rendsa ıv´ a zere hozhat´ l´tre. A list azonos´ oj´ display-list´t hajtja v´gre. tov´bb´ display-list´k a o e o a a a v´grehajt´sa ´s k¨zvetlen hat´s´ parancsok kiad´sa tetsz´s szerint kombin´lhat´. Nem sz¨ks´ges. ez b´rmely implement´ci´ban a a a u ıv´ a a a a o legal´bb 64. A display-lista haszn´lata teh´t a program fut´s´nak e aa a a aa idej´re korl´tozott. A a e e o ıv´ a o e hierarchikus display-list´k seg´ eg´vel k¨zvetve m´dos´ a ıts´ e o o ıthat´ egy lista tartalma. miut´n a o a megh´ ıvott list´t b´rmikor fel¨l´ a a u ırhatjuk. ha nem a a e e a a e e tesz¨nk semmilyen ´vint´zked´st. Hierarchikus diplay-list´k a A display-list´k tartalmazhatnak display-lista h´ asokat. Ha nem l´tezik list azonos´ oj´ display-lista. hogy egy lista a megh´ asakor u e ıv´ m´r l´tezzen.3. vagy a glIsList() paranccsal lek´rdezhetj¨k. Ez hasznos lehet pl. glPushMatrix()). A lista parancsai a list´ra ker¨l´s sorıt´ u a e a ue rendj´ben hajt´dnak v´gre. o a 7. Ez a m´dszer e a ıv´ a a o semmik´pp sem biztos´ optim´lis mem´ria-felhaszn´l´st ´s maxim´lis hat´konys´got. ism´tl˝d˝ r´szeket tartalmaz´ objektumok o e e o o e o ´br´zol´sakor.

GLuint glGenLists (GLsizei range); range darab egym´st k¨vet˝, haszn´laton k´ uli display-lista indexet allok´l. A vissa o o a ıv¨ a zaadott ´rt´k nulla, ha nem tudja a rendszer a megfelel˝ sz´m´ indexet allok´lni vagy e e o a u a range = 0 ; egy´bk´nt pedig a lefoglalt indext¨mb els˝ eleme. A lefoglalt indexekhez a e e o o rendszer egy-egy ures display-list´t hoz l´tre. ¨ a e GLboolean glIsList (GLuint list); Ez a parancs GL TRUE ´rt´ket ad vissza, ha list index˝ display-lista m´r l´tezik (az e e u a e azonos´ o m´r foglalt), egy´bk´nt pedig a GL FALSE ´rt´ket. ıt´ a e e e e A glDeleteLists() paranccsal egym´st k¨vet˝ index˝ display-list´kat t¨r¨lhet¨nk, a o o u a oo u ami ´ltal index¨ket felszabad´ a u ıtjuk. void glDeleteLists (GLuint list, GLsizei range); A list indext˝l kezdve range darab egym´st k¨vet˝ index˝ display-list´t t¨r¨l. Nem o a o o u a oo l´tez˝ list´k t¨rl´s´nek nincs semmilyen k¨vetkezm´nye. e o a o ee o e

7.5.

T¨bb lista v´grehajt´sa o e a

Az OpenGL-ben hat´kony mechanizmus van t¨bb display-lista egym´s ut´ni e o a a v´grehajt´s´ra. Ehhez a display-lista indexeket egy t¨mbbe kell tenni ´s a glCallLists() e aa o e parancsot kell kiadni. K´zenfekv˝ ezen lehet˝s´g haszn´lata, ha az indexeknek valamie o oe a lyen jelent´s¨k van, mint pl. karakterek eset´n az ASCII k´doknak. T¨bb karakterk´szlet eu e o o e haszn´lata eset´n mindegyik display-list´nak egy k¨l¨n b´zisindexet kell l´trehozni. Ezt a e a uo a e a c´lt szolg´lja a glListBase() parancs. e a void glListBase (GLuint base); Azt az eltol´st (offsetet) hozza l´tre, amit a rendszer a glCallLists() paranccsal a e v´grehajtott display-lista indexeihez hozz´ad a t´nyleges index kisz´m´ as´hoz. A displaye a e a ıt´ a lista b´zis´nak kezdeti ´rt´ke 0. A b´zis´rt´knek nincs hat´sa a glCallList() ´s glNewa a e e a e e a e List() parancsok eredm´ny´re. e e void glCallLists (GLsizei n, GLenum type, const GLvoid *lists); n darab display-list´t hajt v´gre. A v´grehajtand´ list´k indexeit ugy sz´m´ ki, a e e o a ´ a ıtja hogy a list c´ ımen kezd˝d˝ el˝jeles eg´sz ´rt´kekhez hozz´adja – a glListBase() paranccsal o o o e e e a l´trehozott – kurrens b´zis´rt´ket. e a e e A type param´terrel a list c´ e ımen kezd˝d˝ indexek adatt´ at (m´ret´t) kell megadni. o o ıpus´ e e Ez a t´ ıpus ´ltal´ban az al´bbi ´rt´kek valamelyike: GL BYTE, GL UNSIGNED BYTE, a a a e e GL SHORT, GL UNSIGNED SHORT, GL INT, GL UNSIGNED INT, GL FLOAT. A GL 2 BYTES, GL 3 BYTES, GL 4 BYTES ´rt´kek is adhat´k a t´ e e o ıpusnak. Ebben az esetben k´t, h´rom vagy n´gy egym´st k¨vet˝ byte-ot tol el ´s ad ¨ssze a rendszer a e a e a o o e o display-lista offset kisz´m´ as´hoz, az al´bbi algoritmus szerint: a ıt´ a a 56

/* b= 2, 3, 4; a byte-ok 0, 1, 2, 3-al vannak sz´mozva a t¨mbben */ a o offset = 0; for(i = 0; i < b; i++) { offset = offset << 8; offset += byte[i]; } index = offset + listbase;

57

8. fejezet Speci´lis optikai hat´sok a a
Az itt t´rgyaland´ h´rom technik´val a k´pek min˝s´ge jav´ a o a a e oe ıthat´, val´szer˝s´g¨k n¨velo o ue u o het˝. o

8.1.

´ a o a Atl´tsz´s´g

Az RGBA sz´ ınkomponensek k¨z¨l az alfa (A ∈ [0., 1.]) ´rt´k az ´tl´tsz´s´g modelo u e e a a oa lez´s´re haszn´lhat´. Ezzel ugyanis azt ´ ee a o ırhatjuk el˝, hogy az uj fragmentum sz´ milyen o ´ ıne m´rt´kben vegy¨lj¨n a pixel jelenlegi sz´ evel. Ha A = 1., akkor az uj sz´ teljesen ele e u o ın´ ´ ın fedi (fel¨l´ u ırja) a r´git, teh´t az uj sz´ t¨k´letesen fed; A = 0. eset´n pedig egy´ltal´n e a ´ ın o e e a a nem fed, azaz a pixel r´gi sz´ minden v´ltoztat´s n´lk¨l megmarad. Minden k¨zb¨ls˝ e ıne a a e u o u o ´rt´k azt eredm´nyezi, hogy a pixel uj sz´ az uj fragmentum sz´ enek ´s a pixel r´gi e e e ´ ıne ´ ın´ e e sz´ enek valamilyen kombin´ci´ja lesz. Az alfa ´rt´ket teh´t a legegyszer˝bb a sz´ fed´si ın´ a o e e a u ın e k´pess´g´nek felfogni. e e e Ha a sz´ ınvegy´ es enged´lyezett, akkor a m˝velet a raszteriz´l´s ´s fragment´l´s ut´n ıt´ e u aa e aa a zajlik le, teh´t k¨zvetlen¨l a pixelbe val´ ´ as el˝tt. a o u o ır´ o Az alfa ´rt´kek az un. alfa tesztre is haszn´lhat´k, vagyis arra, hogy az alfa ´rt´k´t˝l e e a o e e eo f¨gg˝en egy uj fragmentumot elfogadjon vagy figyelmen k´ ul hagyjon a megjelen´ o rendu o ´ ıv¨ ıt˝ szer, l´sd a 11.2. pontot. a Miut´n sz´ a ınindex m´dban nem adunk meg alfa ´rt´keket, az ´tl´tsz´s´got csak RGBA o e e a a oa m´dban tudjuk modellezni. o Az OpenGL-ben az uj fragmentumot forr´snak (source), a neki megfelel˝ pixelt – amire ´ a o lek´pezi a rendszer – pedig c´lnak nevezz¨k. A forr´s ´s a c´l sz´ enek vegy´ ese ´rdek´ben e e u a e e ın´ ıt´ e e aa e enged´lyezn¨nk kell ezt a lehet˝s´get a glEnable(GL BLEND) parancs kiad´s´val, ´s e u oe meg kell adnunk, hogy a rendszer a forr´s ´s c´l sz´ osszetev˝inek kombin´l´ t´nyez˝it a e e ın¨ o ao e o milyen m´don sz´m´ o a ıtsa ki. Az egy¨tthat´kat is RGBA komponenseikkel kell megadni u o csak´gy, mint a f´nyvisszaver˝ k´pess´geket le´ o konstansokat. A rendszer a vegy´ u e o e e ır´ ıtett sz´ komponenseit az ın s∗S+d∗D ¨sszef¨gg´ssel sz´m´ ki, ahol S = (SR , SG , SB , SA ) az uj fragmentum (a forr´s) sz´ o u e a ıtja ´ a ıne, s = (sR , sG , sB , sA ) annak kombin´l´ t´nyez˝je; D = (DR , DG , DB , DA ) a pixel (a c´l) ao e o e jelenlegi sz´ ıne, d = (dR , dG , dB , dA ) pedig annak kombin´l´ t´nyez˝je. A * karakter a 6. ao e o fejezetben bevezetett vektorm˝veletet jel¨li. u o

58

megrajzoljuk az els˝ k´pet. 1 − SA . 1 − SA ) (SA . Az sfactor alap´rtelmez´se GL ONE. SB . mind a dfactor param´tereket GL SRC ALPHA-ra ´ll´ a e a ıtjuk ´s A = 0. 1.25 ´rt´k mellett. a e 59 . 1 − DA ) A 8. 1 − DA ) (1 − SR . ha a k´p pixeleihez az alfa ´rt´ket nem t´rolja a grafikus hardver. 1). f´lig a m´sik) el´rhetj¨k pl. DA .A forr´s ´s c´l kombin´l´ t´nyez˝j´nek kisz´m´ asi m´dj´t a glBlendFunc() paranca e e ao e oe a ıt´ o a csal adhatjuk meg. 1 − SA . t´bl´zatban szerepl˝ forr´s ´s c´l kombin´l´ t´nyez˝k nem minden a a o a e e ao e o p´ros´ as´nak van ´rtelme. 1 − DA . SA ) (1 − DR . 1 − DG . sfactor a uo o o e o a u ıt´ e e e e = GL SRC ALPHA param´terek mellett A = 0. m. Felh´ a a e a o a ıt´ ıvjuk a figyelmet arra. a dfactor´ o e e e e e e e e a a pedig GL ZERO. u a o e e e o • K´t k´p egyenl˝ m´rt´k˝ vegy´ es´t (f´lig az egyik.1.25 ar´nyban akarjuk vegy´ a ıteni. 0.1. SA . DA ) (SR . 1. Az al´bbiakban felsorolunk n´h´ny jellemz˝ p´ros´ ast. void glBlendFunc (GLenum sfactor. Az ´tl´tsz´s´ghoz hazn´lhat´ szimbolikus konstansok a a a a oa a o konstans GL ZERO GL ONE GL DST COLOR GL SRC COLOR GL ONE MINUS DST COLOR GL ONE MINUS SRC COLOR GL SRC ALPHA GL ONE MINUS SRC ALPHA GL DST ALPHA GL ONE MINUS DST ALPHA GL SRC ALPHA SATURATE sf + + + − + − + + + + + df + + − + − + + + + + − a kisz´m´ a ıtott egy¨tthat´ u o (0. GLenum dfactor ). DA ) (1 − DA . SA ) (1 − SA . Ez a t´ u vegy´ es a leggyakrabban haszn´lt. hogy ugyanaz a hat´s t¨bbf´lek´ppen is el´rhet˝. 1 − DB . Az sfactor param´terrel az uj fragmentum (a forr´s) egy¨tthat´j´nak. 1) (DR . DB . 0) (1.1. a felhaszn´l´i programok t¨bbnyire csak n´h´ny p´ros´ ast a ıt´ a e ao o e a a ıt´ haszn´lnak.75 : 0. Az sfactor ´s dfactor param´terek lehets´ges ´rt´keit a a 8. t´bl´zat tartalmazza. vagyis abban az o u e a a e e e a esetben is alkalmazhat´. SG . t´bl´zat. majd a m´sodik k´pet sfactor = GL SRC ALPHA. a dfactor pae ´ a u oa ram´terrel pedig az uj fragmentumnak megfelel˝ pixel sz´ e ´ o ınkombin´l´shoz haszn´lt egy¨ttaa a u hat´ kisz´m´ asi m´dj´t ´ o a ıt´ o a ırhatjuk el˝. SA . DG . m. DA . 0. Ha az els˝ ´s m´sodik k´pet e a a e o e a e 0. 1 − SB . 1 − DA ) (m.33333 ´rt´kkel rajzoljuk meg mindh´rom k´pet. hogy az sfactor param´tert GL ONE-ra ´ll´ ´ e ezut´n mind az sfactor. o e e e a Vegy¨k figyelembe azt is. hogy ezek k¨z¨l n´h´ny csak a forr´s alfa ´rt´k´t haszn´lja. o e ugy. akkor rajzoljuk meg az els˝ k´pet ugy o e ´ mint az el˝bb. 8. e e o e e u ıt´ e e e a e u a ıtjuk. 1 − DA .5 alf´val megrajzoljuk a m´sodik k´pet. 1 − SA ) (DA . dfactor = o a e e e e ıpus´ GL ONE MINUS SRC ALPHA param´terekkel A = 0. m = min(SA. ıt´ a • H´rom k¨l¨nb¨z˝ k´p egyenl˝ ar´ny´ vegy´ es´hez dfactor = GL ONE. 1 − SG .

pl. dfactor = GL ONE MINUS SRC ALPHA param´terek e mellett rajzoljuk meg a legt´volabbi objektumot A = 0.8-al a k´ket 0. mivel a n´z˝pontt´l a a o o o a e o o t´volabb van. Felt´telezz¨k tov´bb´. dfactor = ın´ e e e GL ONE MINUS SRC ALPHA param´terekkel az ecsetvon´s fed´s´nek megfelel˝ e a ee o (pl. e o o uo a • Tegy¨k fel. Ezt a probl´m´t ugy a a o e a ´ 60 . a rendszer fel¨l´ a a a e m´lys´gpufferban a pixel m´lys´g´t. a v¨r¨s komponenst 0. e e e e e ´ o e o mint a pixelen t´rolt. k´t egym´sra mer˝leges e e e u oa u a e a o s´ ıkbeli n´gysz¨gre. Ez mindaddig helyes eredm´nyt ad. a ın´ a e ın´ • Az a sz´ ınkombin´l´si sz´m´ as. a z¨ldet 0. ekkor a e o a ırt rajzol´s sz´ enek a h´tt´r sz´ evel kell megegyeznie.• Ecsettel val´ fest´s sor´n az ecsetvon´sokkal fokozatosan tudjuk elfedni a h´tt´r o e a a a e sz´ et. o e e • Nem n´gysz¨g alak´ raszterk´pek hat´sa ´rhet˝ el az´ltal. hogy pl. mint a kor´bban megjelen´ a a ıtett ´tl´tsz´ objektum. a sz´lein kisebb. Hasonl´ technik´val tudunk rad´ modellezni. hogy a k´p k¨l¨nb¨z˝ e o u e a e o a e uo o o fragmentumaihoz k¨l¨nb¨z˝ alfa ´rt´ket rendel¨nk. majd az sface e e e tor = GL SRC ALPHA. ha a rendszer a n´z˝ponthoz k¨zelebbi fragmene e o o tum m´lys´g´vel fel¨l´ a z-puffer megfelel˝ elem´t. a a o o e o ın a o e o a legk¨zelebbi pedig 90 %-´t engedi ´t.1 alfa ´rt´kkel. 0-´t minden nem l´that´ ´s uo o o e e u a a oe 1-et minden l´that´hoz. ha az uj fragmentum k¨zelebb van a n´z˝ponthoz. Ezt a hat´st egyszer˝ sz˝r˝ haszn´lat´val is e a a a u uo a a el´rhetj¨k. Ennek modellez´se ´rdek´ben a h´tteret rajo a a e e e a zoljuk meg az sfactor ´s dfactor param´terek alap´rtelmez´se szerint. lehet˝v´ teszi a e e o e sz´ ınkomponensenk´nti szab´lyoz´st. a e o e u a a hogy a legt´volabbi objektum a m¨g¨tte l´v˝ sz´ 80 %-´t.6 ´s a a o e o e legk¨zelebbit A = 0. hogy egy ´tl´tszatlan h´tt´r el˝tt h´rom k¨l¨nb¨z˝ m´rt´kben ´tl´tsz´. melyre lombkorona mint´t raktunk) tesz¨nk. mintha o a a u t´rbeli poligonnal k¨zel´ enk a lombkoron´t ´s azt text´r´zn´nk. a dfactor param´ternek pedig e e e a GL SRC COLOR vagy GL ONE MINUS SRC COLOR ´rt´ket. Ezt az elj´r´st billboardingnak is szokt´k nevezni. amikor az sfactor param´ternek a GL DST COLOR aa a ıt´ e vagy GL ONE MINUS DST COLOR ´rt´ket adjuk. a z¨ldet 20 a e u oo e o %-al a k´ket 60 %-al cs¨kkent˝ sz˝r˝t alkalmazn´nk. 10%-os) alfa ´rt´kkel rajzoljuk meg az ecset k´p´t. ugyanis pl. mely az ´tl´tsz´ objektum m¨g¨tt van nem fog l´tszani. a k¨z´ps˝ 40 %-´t. Ha a l´that´s´g e e e a a a a oa u ırja a szerinti ´br´zol´s enged´lyezett (glEnable(GL DEPTH TEST)). hogy m´s lesz az eredm´ny a a oa e e o a a o a e ha egym´s k´p´t ´tfed˝ poligonokat a n´z˝ponthoz k´pesti t´vols´guk szerint h´tulr´l a e e a o e o e a a a o el˝re. Egy a o aa a t´rbeli fa k´p´nek ill´zi´j´t kelthetj¨k az´ltal. A val´szer˝s´g fokoz´sa e e e e o ue a ´rdek´ben az ecset k¨l¨nb¨z˝ r´szein v´ltoztathatjuk a fed´st. Ezt a probl´m´t az OpenGL a ıt´ e a m´lys´gpuffer´nek (z-puffer) speci´lis haszn´lat´val oldhatjuk meg. vagy el¨lr˝l h´tulra haladva jelen´ unk meg. vagy a n´z˝pontot v´ltoztat´ megjelen´ esek eset´n a helyes a o e o a o ıt´ e sorrend meg´llap´ asa gyakorlatilag kivitelezhetetlen. u a a a e o a uo o o e e a a o egym´st r´szben eltakar´ objektumot akarunk megrajzolni.4-el e u oo o e megszorozva ugyanazt a hat´st ´rj¨k el. vagy hely¨ket ıt´ e o a o a o u v´ltoztat´ objektumok. azonban sok poligonb´l ´ll´. N´h´ny poligon eset´n a megjeo o o a ıt¨ e a e len´ es sorrendj´t k¨nnyen meghat´rozhatjuk. mintha a v¨r¨s f´nyt 40 %-al. e o ıten´ a e ua a Az ´tl´tsz´s´g (fed´s) modellez´si m´dja alapj´n l´that´. az ecset k¨zep´n e e uo o o e a e o e nagyobb.6-al. akkor egy k´s˝bb megjelen´ e e e u ırja o e eo ıtend˝ o objektum. az el˝z˝ m´don megadott fakorona mint´zat´ text´r´t (egy e o o o o a u ua f´li´t.2. Ez sokkal gyorsabb. Atl´tsz´ objektum eset´n ugyanis. a k¨z´ps˝t A = 0. Ennek modellez´se ´rdek´ben az sfactor = GL SRC ALPHA. m´ nincsenek ´tl´tsz´ objektua e ıg a a o ´ a o mok.

azonban ennek a e e oe e figyelembe v´tele is implement´ci´f¨gg˝. a jelens´g cs¨kkent´s´re. hogy az alaphelyzethez k´pest t¨bb pixelt e aa ıt´ a e o fest ki a rendszer. A rendszer kisz´m´ ezen t´glalapot e e a ıtja e metsz˝ pixelekre. (Atl´ o e e rajzol´sa el˝tt ne felejts¨k el letiltani a h´ts´ lapok elt´vol´ as´t!) a o u a o a ıt´ a 8. hogy h´nyad r´sz¨k esik a t´glalap k´p´re. a felhaszn´l´ a ıt´ e e e a e ao ´ltal haszn´lt sz´ a a ınpalett´n m´lik. e a ou o 61 . Mindk´t esetben jelent˝sen e ıt´ e a e o felnagy´ ıtottuk a k´perny˝r˝l levett k´pet. Ezt a sz´mot nevezz¨k o a e u e e e a u fedetts´gi ´rt´knek. ami ´ltal az ´tl´tsz´ objeko a u a a a o tum megrajzol´sa sor´n a t´vols´gokat ¨ssze tudja hasonl´ a a a a o ıtani a rendszer. l´pcs˝s lesz. e e u e e e Az. de mindenk´ppen id˝ig´nyes. hanem a fedetts´gt˝l f¨gg˝en a a ın´ e o u o szakasz ´s a h´tt´r sz´ enek kombin´ci´j´val. hogy az ´tl´tsz´ objektum rajzol´sa el˝tt a m´lys´gpuffert a glDeptha a o a o e e Mask(GL FALSE) paranccsal csak olvashat´v´ tessz¨k. nem ´tl´tsz´ objektum rajzol´sa el˝tt ujra ´ u ırni o o a a o a o ´ ırhat´v´ kell o a ´ atsz´ objektumok tenni a m´lys´gpuffert a glDepthMask(GL TRUE) paranccsal. illetve a k´p min˝s´g´t. de ezeket m´r nem a szakasz sz´ evel.1. nem pedig ugr´sszer˝. Vagyis a szakasz ´s a h´tt´r k¨z¨tt fokozatos e a e ın´ a oa e a e o o ´tmenet lesz. Sim´ as (antialiasing) ıt´ Raszteres grafikus display-n szakaszt rajzolva azt tapasztaljuk. Ezt a jelens´get angolul e u o e e aliasingnak. A k¨vetkez˝.1. A e e e a ıt´ a ou o e o e glHint() paranccsal befoly´solhatjuk a sebess´get. Az OpenGL-ben haszn´lt sim´ asi technika a pixelek fedetts´g´nek sz´m´ as´n alapul. a u A k´p hat´r´nak kisim´ asa teh´t azt jelenti. Kiv´ltk´pp ´ van ez e e a o e o a e ıgy a majdnem v´ ızszintes ´s majdnem f¨gg˝leges szakaszok eset´n. a k´p hat´r´nak kisim´ as´ra ir´nyul´ technik´kat e o ee e aa ıt´ a a o a antialiasingnak nevezik. 1111 ha teljes a fedetts´g). hogy ez a be´ll´ as hogyan ´s milyen m´rt´kben befoly´solja a k´pet. ´bra.2. de nem tudja fel¨l´ a puffert. Az ´ kapott alfa ´rt´ket felhaszn´lva e e e o e e e ıgy e e a a pixel sz´ evel vegy´ ın´ ıthetj¨k a fragmentum sz´ et a hat´s el´r´se ´rdek´ben. e oo e 8. Szakasz k´pe kisim´ as n´lk¨l (bal oldali k´p) ´s kisim´ assal (jobb oldali k´p) a e ıt´ e u e e ıt´ e A fedetts´gi ´rt´k sz´m´ asa implement´ci´f¨gg˝. A 8. hogy a nem f¨gg˝leges u o vagy v´ ızszintes szakaszok k´p´nek hat´ra t¨redezett. e e e RGBA sz´ ınmegad´si m´d eset´n a rendszer a pixeleknek megfelel˝ fragmentumok alfa a o e o ´rt´k´t megszorozza a megfelel˝ fedetts´gi ´rt´kkel. a ıt´ e e a ıt´ a A szakaszok k´pe minden esetben t´glalap lesz.tudjuk megoldani. ´br´n egy szakasz sim´ as n´lk¨li (bal oldali a a u a a ıt´ e u k´p) ´s sim´ e e ıtott (jobb oldali k´p) megjelen´ es´t l´thatjuk. u ın´ a ee e e Sz´ ınindex m´dban a rendszer a fragmentum fedetts´g´nek megfelel˝en ´ll´ o e e o a ıtja be a sz´ ınindex 4 legkisebb helyi´rt´k˝ bitj´t (0000 ha nincs fed´s.

ıt´ a oe e Seg´ eg´vel be´ll´ ıts´ e a ıthatjuk.) Az ezek ut´n rajzolt szakaszokat. Pont ´s szakasz sim´ asa e ıt´ Pont sim´ as´t ıt´ a a glEnable(GL POINT SMOOTH). A lehets´ges e oe oır´ e ´rt´kek list´j´t a 8. a szakasz´t e a glEnable(GL LINE SMOOTH) paranccsal enged´lyezni kell. a ıtsa A sz´ ´s text´ra-koordin´t´k interın e u aa pol´ci´j´nak min˝s´g´t adja meg. Text´ra eset´n azonban a perspekt´ hat´st is figyelembe vev˝ interpol´ci´t kell u e ıv a o a o haszn´lni a vizu´lisan elfogadhat´ eredm´ny ´rdek´ben.void glHint (GLenum target.2. a a o e e e 8. t´bl´zat. GL NICEST ´s GL DONT CARE. vagy sfactor = GL SRC ALPHA. e e hogy a sz´ ıneket ´s a text´rakoordin´t´kat a rendszer a kevesebb sz´m´ assal j´r´ line´ris e u aa a ıt´ ao a interpol´ci´val sz´m´ ki. poligon k´phat´rok e a sim´ as´nak min˝s´g´t adja meg.2. A target param´ter ´rt´kei a a e e e target GL POINT SMOOTH HINT GL LINE SMOOTH HINT GL POLYGON SMOOTH HINT GL FOG HINT jelent´se e A pont. hogy teljesen ıt´ e e e a ou o figyelmen k´ ul hagyja a rendszer. (Az ut´bbi megold´s a szakaszok o a metsz´spontj´t jobban kiemeli. a GL NICEST a legjobb min˝s´get ad´ m´dszer haszn´lat´ra utas´ a e oe o o a a ıtja rendszert. e miut´n ez vizu´lisan elfogadhat´ eredm´nyt biztos´ j´llehet matematikailag nem pona a o e ıt. oe oo RGBA sz´ ınmegad´si m´d eset´n enged´lyezn¨nk kell a sz´ a o e e u ınvegy´ est ıt´ (glEnable(GL BLEND)). vagy cs´cspontonk´nt u e (GL FASTEST) sz´m´ ki a rendszer.1. hogy mire vonatkozzon a min˝s´gi el˝´ as. vagy a t¨bb sz´m´ ast ig´nyl˝. A kombin´l´si egy¨tthat´kat ´ltal´ban vagy sfactor aa u o a a = GL SRC ALPHA. de a val´s´gnak jobban mega o a ıtsa o a ıt´ e o oa felel˝ perspekt´ hat´st is figyelembe vev˝ m´don sz´m´ ki a cs´cspontbeli ´rt´kekb˝l o ıv a o o a ıtsa u e e o kiindulva.2. A hint param´ter lehets´ges ´rt´kei: e e aa a a e e e e GL FASTEST. Az OpenGL n´h´ny tulajdons´g´t befoly´solhatjuk seg´ eg´vel. a oa oe e GL PERSPECTIVE CORRECTION HINT A GL PERSPECTIVE CORRECTION HINT param´ter eset´n azt adhatjuk meg. Ezen e e u a utas´ asok figyelembe v´tele teljes m´rt´kben implement´ci´f¨gg˝. hogy a k¨d effektus sz´m´ asait pixelenk´nt o a ıt´ e (GL NICEST). lehet. GLenum hint). hogy nincs preferenci´nk. A rendszerek ´ltal´ban a line´ris interpol´ci´t haszn´lj´k a sz´ a a a a o a a ınek eset´n. A target pae a a a a ıts´ e ram´terrel azt adjuk meg. t´bl´zat tartalmazza. ıv¨ 8. dfactor = GL ONE ´rt´kre ´ll´ e e a ıtjuk. A GL FASTEST ´rt´k a lege e e hat´konyabb. szakasz. a GL DONT CARE ´rt´kkel pedig azt jelezz¨k. illetve pontokat e a a 62 . A glHint() parancce sal a min˝s´gre vonatkoz´ ´hajunkat adhatjuk meg. dfactor = GL ONE MINUS SRC ALPHA. o tos.

ha t¨bb alakzat ´tfedi egym´st.1. hogy siker¨l-e 16 olyan a u u sz´ tal´lnunk. amivel az eg´sz k´p kisim´ a a e u e e ıthat´ (l´sd a 10. akkor a poligon sim´ az el˝z˝ek szerint t¨rt´nik. beleolvadnak a e o o a a u k¨d sz´ ebe. hom´ly. e e e u ´ ıt´ a a A megjelen´ es min˝s´g´t a target = GL POLYGON SMOOTH HINT param´terrel kiaıt´ oe e e dott glHint() paranccsal befoly´solhatjuk. hiszen ekkor elvileg az ezek k¨z¨tti ıtja o a a o o folytonos ´tmenetet kellene biztos´ a ıtani. ´ a o 63 . ´les kont´r´ az objektumok k´pe f¨ggetlen¨l att´l. Poligonok sim´ asa ıt´ Ha a poligonok megjelen´ esi m´dja pont vagy szakasz (a glPolygonMode() parancsot ıt´ o e ıtott megjelen´ ese ıt´ GL POINT vagy GL LINE param´terrel adtuk ki). ´ lassabb. f¨st ´s szennyezett leveg˝ is modellezhet˝. megvil´g´ as ´s text´ra-lek´pez´s ut´n o a o a ıt´ e u e e a adja hozz´ a k´phez. e e e a o o 8. A k¨vetkez˝kben le´ elj´r´ssal is megolda ıt´ e ıgy o o ırt aa hat´ a probl´ma. Bonyol´ a helyzetet. melyek a h´tt´r ´s a rajzol´si sz´ k¨z¨tt folytonos ´tmenetet biztos´ ınt a a e e a ın o o a ıtanak. a a oa e e e e u e Sz´ ınindex m´d eset´n minden a sz´ o e ınpalett´n m´lik. majd az alfa szerinti sz´ ınvegy´ est enged´lyezni kell sfactor ıt´ e u o e u = GL SRC ALPHA SATURATE. hogy ´ltal´ban f´mesen a ıt´ e e u e e a a e csillog´. Elvileg mind o e e ou e ou e e RGBA. o Poligonok kisim´ ıtott rajzol´s´t a glEnable(GL POLYGON SMOOTH) paranccsal aa enged´lyezni kell. vagyis azon. aa e ´ a 8. o o ıt´ u o o o ın˝ k¨z¨s ´llel rendelkez˝ poligonokat rajzolunk. Ezen lehet˝s´g haszn´lat´hoz teh´t a sz´ ıti oe a a a ınvegy´ es ıt´ (´tl´tsz´s´g. Komplex szimul´ci´s programok eset´n a k¨d alkalmaz´s´val n¨vela e a o e o aa o hetj¨k a sebess´get. A tov´bbiakban kit¨lt¨tt poligonok (GL FILL) sim´ as´r´l o o o e a o o ıt´ a o lesz sz´. pontosabban csak olvashat´v´ tessz¨k a sim´ a o a u ıtand´ pontok. o ıt´ a ´ Atfed˝ alakzatok eset´n RGBA m´dban sokkal jobb eredm´nyt kaphatunk. azonban o o aa t¨bb. szakaszban l´ttuk.3. Ennek hat´s´ra a poligonok hat´rol´ ´leihez tartoz´ fragmentumok alfa e aa a oe o ´rt´keit megszorozza a rendszer a fedetts´gi index¨kkel ugy.2. hogy a m´lys´gpuffert o a u o ınt a e e e nem haszn´ljuk. nagy k¨r¨ltekint´st ig´nyel. Teh´t mindenk´ppen meggondoland´ sz´ a e o ınindex m´dban a kisim´ ast haszn´lni. mivel a o e o e rendszer az ¨sszes egym´sra ker¨l˝ sz´ tudja kombin´lni felt´ve. A k¨ddel p´ra. mert a s˝r˝ k¨ddel bor´ u e uu o ıtott objektumok megrajzol´s´t elhagyhatjuk. V´g¨l a poligonokat m´lys´g szerint rendezni kell ´s h´tulr´l el˝re haladva meg kell rajzolni.2. mint szakaszok sim´ as´n´l. fedetts´g) ismerete ´s meg´rt´se sz¨ks´ges. o ın´ o a a u e o o A k¨d effektust a rendszer a transzform´ci´k. A legjobb eredm´nyt a gy˝jt˝ puffer o o e o e u o haszn´lat´val ´rhetj¨k el. mint a 8. mind sz´ ınindex m´dban kisim´ o ıthatjuk a kit¨lt¨tt poligonok hat´r´t. szakaszok o rajzol´s´nak idej´re ugy. aminek hat´s´ra az objeka oe o ue aa o e aa tumok a n´z˝pontt´l t´volodva fokozatosan elhom´lyosodnak. o Kit¨lt¨tt poligonok sim´ asa abban az esetben a legkritikusabb.4. dfactor = GL ONE egy¨tthat´kkal. hogy milyen k¨zel vannak a o e uu e u u o o n´z˝ponthoz. K¨d (atmoszf´rikus hat´sok) o e a A sz´m´ og´ppel k´sz¨lt k´pekkel szemben gyakori ´s jogos kritika. Az el˝z˝ szakaszban ismertetett k´phat´r-sim´ as mellett az OpenGL-ben e o o o e a ıt´ tov´bbi lehet˝s´g a val´szer˝s´g fokoz´s´ra a k¨d modellez´se. aa mivel ugysem lesznek l´that´k. elt˝nnek. szakaszt). Ezut´n csak olvashat´v´ kell tenni a z-puffert a a o a (glDepthMask(GL FALSE)). de o a ez nagyon sz´m´ asig´nyes. ez viszont el´g k¨r¨lm´nyes.kisim´ ıtva jelen´ meg a rendszer. egym´st ´tfed˝ poligon kisim´ o a a o ıtott rajzol´sa nem c´lszer˝ sz´ a e u ınindex m´dban. ha k¨l¨nb¨z˝ sz´ u.

) ıv´ e e a Sz´ ınindex m´dban pedig a pname = GL FOG INDEX ´rt´k mellett a param-mal ´tadott o ´rt´k a k¨d sz´ e e o ınindexe.2. e e e e Ha pname ´rt´ke GL FOG DENSITY. A k¨d kombin´l´ t´nyez˝j´nek megad´sa a a o ao e oe a f f f f kisz´m´ asa a ıt´ −density·z =e 2 = e−(density·z) end−z = end−start param ´rt´ke a glFog*()-ban e e GL EXP GL EXP2 GL LINEAR ahol z a fragmentum k¨z´ppontj´nak a n´z˝pontt´l m´rt t´vols´ga a o e a e o o e a a n´z˝pontkoordin´ta-rendszerben.A k¨dhat´st enged´lyezn¨nk kell a glEnable(GL FOG) paranccsal. Ezt az f kombin´l´ t´nyez˝t az a 8. e e e RGBA m´dban a k¨d sz´ et pname = GL FOG COLOR ´rt´k mellett a sz´ RGBA o o ın´ e e ın komponenseivel adhatjuk meg. Ck pedig a o u e a ıtja ´ a k¨d sz´ o ıne. Ik pedig a k¨d sz´ e a o ınindexe. ahol Ci az uj (forr´s) fragmentum. start. t´bl´zat. Sz´ ınindex m´dban pedig az o I = Ii + (1 − f )Ik kifejez´s szerint. oe e a a szakaszt). o e e a ıt´ a Alap´rtelmez´s szerint density = 1. A GL FOG HINT param´terrel kiae uue e e dott glHint() paranccsal a min˝s´get. GL FOG END.3. 1. GL FOG START. A k¨d sz´ et a rendszer a bej¨v˝ (forr´s) fragmentum sz´ evel vegy´ felo ın´ o o a ın´ ıti. end. majd a k¨d sz´ et o a e u o ın´ ´s s˝r˝s´g´t kell megadnunk a glFog*() paranccsal. const TYPE *param). Ez azt jelenti. GL FOG START.3.] intervallumra u o lev´gja. illetve a sebess´get befoly´solhatjuk (l´sd a 8. TYPE param). illetve end ´rt´ket adjuk meg az f sz´m´ as´hoz. az utols´nak pedig a k¨d´vel. A sk´la els˝ sz´ enek a k¨d n´lk¨li ob¨ u o ınsk´ o´ ıt´ a a o ın´ o e u jektum sz´ evel kell megegyeznie. Sz´ ınindex m´dban o ugyeln¨nk kell a megfelel˝ sz´ ala el˝all´ as´ra is. hogy t¨bb ın´ o o e o 64 .. e e GL FOG COLOR vagy GL FOG INDEX lehet. akkor a e e param-al a megfelel˝ density. GL FOG END. Az ´ kisz´m´ ıgy a ıtott f egy¨tthat´t a rendszer a [0. (Ekkor csak a vektoros h´ asi forma megengedett. haszn´lva a k¨d kombin´l´ t´nyez˝j´t. Alap´rtelmez´s a GL EXP. GL FOG MODE eset´n az f egy¨tthat´ kisz´m´ asi m´dj´t adhatjuk meg. GL FOG DENSITY. start ´rt´keket a glFog*() paranccsal e o a e e adhatjuk meg. 8. o a ıt´ a u e e e pname ´rt´ke GL FOG MODE. A density. ekkor a e u o a ıt´ o a param ´rt´ke GL EXP. void glFog{if}v (GLenum pname. a void glFog{if} (GLenum pname. start = 0 ´s end = 1. GL EXP2 vagy GL LINEAR lehet. ahol Ii a forr´sfragmentum. A k¨d effektus sz´m´ as´hoz sz¨ks´ges ´rt´keket adhatjuk meg vele. RGBA m´dban a k¨d miatti sz´ o o ınvegy´ est a ıt´ C = f Ci + (1 − f )Ck ¨sszef¨gg´s szerint sz´m´ ki a rendszer. t´bl´zat a o ao e oe ao e o a a szerint adhatjuk meg.

e o ıne u A sz´m´ og´pi grafik´ban a te´skann´nak kit¨ntetett szerepe van. a k¨d sz´ pedig sz¨rke (0. kiss´ rem´nytelenn´ teszi a k¨dhat´s modellez´s´t sz´ o e e e e e o a e e ınindex m´dban. u o o o ın˝ e o o o o ınsk´ a e ami meglehet˝sen neh´zkess´. Az un.6. gyakran haszn´lj´k grafikai hat´sok a ıt´ e a a a u a a a demonstr´l´s´n´l.6.0. start = 1 ´s end = 5. egym´shoz sim´n kapcsol´d´ B´zier-fel¨lettel modellezt´k. ırt a a o o e u e 1 65 . Az als´ a e e a o k´pen pedig ugyanaz a be´ll´ as k¨dhat´ssal l´that´. az el˝z˝eknek megfelel˝ sz´ al´t kell l´trehozni.0. amikor a University of aa a a o e e u Utah-on egy te´skann´t digitaliz´ltak (ez a kanna az´ta egy bostoni m´zeumban van) ´s 306 kontrolla a a o u e ponttal le´ 32db. ´bra fels˝ k´p´n te´skann´k1 megvil´g´ a o e e a a a ıtott. A k¨d param´tereinek be´ll´ asai: e a ıt´ o a a o o e a ıt´ GL EXP.2. o A 8. Utah teapot t¨rt´nete az 1960-as ´vekre ny´lik vissza. ´rnyalt k´p´t l´thatjuk. density = 0.k¨l¨nb¨z˝ sz´ u objektum eset´n t¨bb.25.6).

2.8. Te´skann´k k¨d n´lk¨l (fels˝ k´p) ´s k¨ddel (als´ k´p) a a a o e u o e e o o e 66 . ´bra.

ami persze nem jelenti azt. Ahol a t´rk´pben 1 szerepel. a neki megu e a e a o e e felel˝ pixelt a rendszer ´t´ o a ırja a rajzol´si sz´ a ınnel. A GLUT f¨ggv´nyk¨nyvt´r is tartalmaz karakterek ´ as´t u e o a ır´ a seg´ o f¨ggv´nyeket. Kurrens raszterpoz´ o ıci´ A rendszer a bitt´rk´peket ´s k´peket mindig a kurrens raszterpoz´ ot´l kezd˝d˝en rae e e e ıci´ o o o jzolja meg ugy. az RGBA ´rt´keket). vagy alfa szerint kombin´lja a raja zol´si sz´ a pixel sz´ evel att´l f¨gg˝en. K¨l¨nbs´g m´g. Bitt´rk´pek ´s karakterek e e e A bitt´rk´p a 0 ´s 1 ´rt´kek t¨mbj´nek tekinthet˝. a 67 . a a e a ır´ Karakterek rajzol´s´hoz csak a legalacsonyabb szint˝ szolg´ltat´sokat biztos´ aa u a a ıtja az OpenGL.2. a k´ppel pedig fel¨l´ vagy kombin´lja a t´rolt adatokat e ır´ e u ırja a a (pl. A kurrens raszterpoz´ ot a rendszer egy glob´lis v´ltoz´ban a e u ıci´ a a o t´rolja. Bitt´rk´pek e e o a e e haszn´lat´nak tipikus p´ld´ja a karakterek ´ asa. Karaktersorozat rajzol´s´t t´mogat´ minden tov´bbi f¨ggv´nyt a felaa a o a u e haszn´l´nak kell meg´ ao ırnia. hogy maguknak a ua a o ooe karaktereknek is. hogy a bitt´rk´pet egy maszkk´nt teszi r´ a rendszer e e uo e e e e e a a k´pre (pl. Karakterk´szlet l´trehoz´s´t aa e e e a e e aa ´s karaktersorozat rajzol´s´t seg´ e aa ıtik a display-list´kn´l megismert (l´sd a 7. A karaktereket le´ o bitt´rk´pek bitekben m´rt sz´less´g´nek ´s ıt˝ u e ır´ e e e e e e e hossz´s´g´nak 8 t¨bbsz¨r¨s´nek kell lenni. Mindkett˝ pixelek egy e e o e e e e o t´glalap alak´ t¨mbje. a k´p pedig t¨bb bitben. de minden pixelhez ugyanannyiban (pl. 9. hogy a kurrens raszterpoz´ o lesz a bitt´rk´p (k´p) bal als´ sarka (ha ´ ıci´ e e e o m´sk´nt nem rendelkez¨nk).9. a a o e o RGBA ´rt´keket). fejezea a a tet) parancsok.1. hogy milyen pixelenk´nti m˝veletek vannak a ınt ın´ o u o e u el˝´ oırva. A bitt´rk´p 0 elemeinek megfelel˝ pixelek v´ltozatlanok maradnak. e e 9. karakterek ´ asa). hogy a bitt´rk´p minden pixelhez egyetlen e u o uo e e e bitben t´rol inform´ci´t. fejezet Raszteres objektumok rajzol´sa a K´tf´le raszteres objektum rajzolhat´: a bitt´rk´p ´s a k´p. a k¨l¨nbs´g csak az. Ezek a pozicion´l´s ´s bitt´rk´pek rajzol´sa. mely a k´pmez˝ egy t´glalap alak´ e e e e e o e o e o e u ter¨let´nek rajzol´si maszkjak´nt haszn´lhat´.

A glBitmap() paranccsal csak a k´pmez˝ oldalaival p´rhuzamosan lehet ´ e o a ırni. GLfloat yi. akkor a kurrens raszterpoz´ o st´tusza ıci´ e o ıv¨ ıci´ a “´rv´nytelen” lesz. egy lapleolvas´val raszteriz´lt f´nyk´p. Az (xo . Az eltol´s e e o a oa aa a komponensei lehetnek negat´ ıvok is. A bitt´rk´p e ıci´ a e e e e raszteriz´l´sa ut´n az (xc . GLfloat xi. de pl. Ha a transzform´ci´k ut´n u a o a a megadott poz´ o a k´pmez˝n k´ ulre esik. Bitt´rk´p rajzol´sa e e a void glBitmap (GLsizei width. e e 9. A kurrens raszterpoz´ ot ´ll´ be. void glRasterPos{234}{sifd}v (conts TYPE *pos). hogy a k´p pixelenk´nt t¨bb bitnyi adatot tartalmaz. y.void glRasterPos{234}{sifd} (TYPE x. yo ) koordin´tap´rral gyakorlatilag a oa ıci´ a a bitt´rk´p bal als´ sark´nak (orig´j´nak) eltol´s´t adhatjuk meg pixelekben. hogy a karaktert k¨vet˝ bet˝k¨zt is taro o u o talmazza. azaz nem lehet a sz¨veget elforgatni. Lehet˝s´g van fel¨lr˝l lefel´. z. o 9. akkor a rendszer automatikusan a z = 0. Alapvet˝ k¨l¨nbs´g azone e e ıt e e o uo e ban. b´r a bitt´rk´p ua a o e u o ooe a e e ´ltal lefoglalt ter¨let mindk´t m´rete mindig 8 t¨bbsz¨r¨se. yc + yi ) ´rt´kre ´ll´ aa a ıci´ e e a ıtja a rendszer. TYPE w ). Az ´ megadott e e e ıti a a e e e ıgy raszterpoz´ ot pontosan ugy transzform´lja a rendszer az ablakkoordin´ta-rendszerbe. Az (xi . const GLubyte *bitmap). GLfloat xo. h´ber karakterekn´l – a h´berben a o u e e e e e jobbr´l balra ´ o ırnak – xi < 0. e e A GL CURRENT RASTER POSITION param´terrel kiadott glGetFloatv() parane ccsal lek´rdezhetj¨k a kurrens raszterpoz´ o koordin´t´it. ugyanezzel a param´terrel e u ıci´ aa e kiadott glGetBoolean() paranccsal pedig megtudhatjuk. GLsizei hight. a grafikus hardver vie e o o a e e deomem´ri´j´b´l beolvasott k´p vagy valamely program ´ltal kisz´molt ´s a mem´ri´ban o aa o e a a e o a 68 . Az x. Ha a kurrens raszterpoz´ o ´rv´nytelen. vagy alulr´l felfel´ val´ ´ asra oe u o e o e o ır´ is. ıci´ ´ a a mint a glVertex*() paranccsal megadott cs´cspontokat. Ha k´t koordin´t´val adjuk meg. az RGBA sz´mn´gyest. w = 1 aa e aa ´rt´kekkel eg´sz´ ki. A bitmap c´ ımen kezd˝d˝ bitt´rk´pet rajzolja meg a rendszer ugy. pl. hogy a bitt´rk´p o o e e ´ e e orig´j´t a kurrens raszterpoz´ ora helyezi.3. hogy a kurrens raszterpoz´ o ıci´ ´rv´nyes-e. TYPE y. A width ´s hight param´terek a bitt´rk´p pixelekben m´rt sz´less´g´t ´s e e e e e e e e e hossz´s´g´t jel¨lik. akkor nem ıci´ e e rajzol semmit ´s a kurrens raszterpoz´ o tov´bbra is ´rv´nytelen marad.4. A e e o a e k´p eredet´t illet˝en lehet pl. Ezeknek nem kell felt´tlen¨l 8 t¨bbsz¨r¨s´nek lennie. yi ) ´rt´keket ugy szoktuk be´ll´ e e ´ a ıtani. h´rom koordin´ta eset´n pedig a w = 1 ´rt´kkel. yc ) kurrens raszterpoz´ ot az (xc + xi . a u e e o oo Az ´ll´ latin bet˝k eset´n yi = 0 ´s xi > 0. K´pek e Az OpenGL-ben a k´p nagym´rt´kben hasonl´ a bitt´rk´phez. TYPE z. GLfloat yo. w param´terek az uj poz´ o koorıci´ a ıtja e ´ ıci´ din´t´i.

A format param´terrel a pixelekr˝l beolvasand´ adatelemeket adjuk meg (l´sd a 9. ugyanis a m´sol´si parancs haszn´lata eset´n az adat nem ker¨l a a e e a a a e u processzor mem´ri´j´ba. hogy a pixelt¨mb bal als´ sarka a kurrens raszterpoz´ oba ker¨l. 9. pixelt¨mb adatainak be´ asa a mem´ri´b´l a k´ppufferba. A k´pek amellett. GLenum format. akkor a rendszer az ´rt´ket az adott t´ 69 . o aa Ezen parancsok rendk´ ul egyszer˝ feladatokat hajtanak v´gre. a a e a a ıpus´ a a a void glDrawPixels (GLsizei width. mint pl. Ha a kurrens rasz´ o o ıci´ u terpoz´ o ´rv´nytelen. melynek bal als´ sarka (x. hogy megjelen´ a e e ıthet˝k a k´perny˝n pl. u e void glReadPixels (GLint x. stencilpuffer. azonban t´glalap alak´ ırt e a e u pixelt¨mb¨k adatait – melyek nemcsak sz´ o o ınek lehetnek – ´ ırhatjuk m´s pufferbe is. GLint y.1. magass´ga height. Ha az adatelem egy index.2. const GLvoid *pixels).4. ´s ezeket u e e e sokf´lek´ppen lehet t´rolni. y). GLenum type. A k´ppuffer azon pixelt¨mbj´nek az adatait olvassa be. pixelt¨mb m´sol´sa a k´ppufferen bel¨l. m´lys´gpuffer. e o o a t´bl´zatot). a e e akkor a rendszer az adatt´ ıpusnak megfelel˝ intervallumra k´pezi le az adatokat.1. teh´t o e a adatveszt´s is el˝´llhat. mivel nagyon sokf´le adat van a k´ppufferben. Az adatokat a pixels c´ e e a ımen kezd˝d˝ mem´riater¨letre o o o u teszi. Pixeladatok olvas´sa. GLenum format. pl. ´ a fenti m˝veletek sor´n ´ltal´ban t¨bbf´le adatkonverzi´ra e e a ıgy u a a a o e o van sz¨ks´g. text´rak´nt is o e o u e haszn´lhat´k. ´ asa ´s m´sol´sa a ır´ e a a A k´pek manipul´l´s´ra az OpenGL h´rom alapvet˝ parancsot tartalmaz: e aa a a o • glReadPixels(). e o e o sz´less´ge width. GLenum type. a type param´terrel pedig az adatt´rol´s t´ at (l´sd a 9. GLsizei width. majd be´ ank annak egy a e o ırn´ m´sik r´sz´re. Ha a pixeladat elemei folytonos adatot reprezent´lnak. const GLvoid *pixels).t´rolt k´p is. mintha beolvasn´nk a k´ppufferb˝l. Ez csak eredm´ny´t o a a e u e e tekintve ugyanaz. o aa • glDrawPixels(). A pixels c´ ımen t´rolt width sz´less´g˝. nem GL FLOAT. t´bl´zatot). sz´ vagy stencilindex. pixelt¨mb adatainak beolvas´sa a k´ppufferb˝l (framebuffer) a o a e o processzor mem´ri´j´ba. A v´grehajt´s azonıv¨ u e e a ban nem mindig egyszer˝. pl. ´s a t´ e oa ıne ıpus e e ıpus bitjeivel maszkolja. height magass´g´ pixelt¨mb¨t rajzolja meg a e e u a u o o ugy. akkor nem rajzol semmit. GLsizei height. vagy a olvashatjuk m´s pufferb˝l is. A format ´s type param´terek ´rtelmez´se a glReadPixels() parane e e e e e csn´l ´ a ırtakkal megegyezik. az RGB ´rt´kek. gy˝jt˝puffer (l´sd a 10. a o K´p hallat´n ´ltal´ban a sz´ e a a a ınpufferbe ´ k´pre asszoci´lunk. GLsizei height. ´s a kurrens raszterpoz´ o tov´bbra is ıci´ e e e ıci´ a ´rv´nytelen marad. o ır´ o a o e • glCopyPixels(). a o e e u o a fejezetet).

8 bites el˝jel n´lk¨li eg´szekben o e u e 16 bites el˝jel n´lk¨li eg´sz o e u e 16 bites el˝jeles eg´sz o e 32 bites el˝jel n´lk¨li eg´sz o e u e 32 bites eg´sz e egyszeres pontoss´g´ lebeg˝pontos a u o void glCopyPixels (GLint x. z¨ld. t´bl´zat. Egy pixelt¨mb adatait m´solja ugyanazon a pufferen bel¨l a kurrens raszterpoz´ oba. Az adatt´rol´s t´ a a a a ıpusa type GL UNSIGNED BYTE GL BYTE GL BITMAP GL UNSIGNED SHORT GL SHORT GL UNSIGNED INT GL INT GL FLOAT az adatt´ ıpus le´ asa ır´ 8 bites el˝jel n´lk¨li eg´sz o e u e 8 bites el˝jeles eg´sz o e 1 bit. vagy a sz´ o o u o ınindexek ker¨lnek m´sol´sra. GLsizei height. GLint y. GLenum type). k´k ´s alfa komponensek oo o e e v¨r¨s sz´ oo ınkomponens z¨ld sz´ o ınkomponens k´k sz´ e ınkomponens alfa komponens vil´goss´g a a vil´goss´g ´s alfa komponens a a e stencilindex m´lys´g e e 9. t´bl´zat. type = GL STENCIL eset´n pedig a stencilindexek. u a a e e e e e e type = GL DEPTH eset´n a m´lys´g´rt´kek. GLsizei width.1. GL STENCIL ´s GL DEPTH lehet. glPixelMap*() ´s glPixelZoom() parancsokkal a a a e e ınmegad´si a be´ll´ a ıtott manipul´ci´k hat´sa ´rv´nyes¨l. magass´ga a o o o a aa e e a e height. z¨ld ´s k´k sz´ oo o e e ınkomponensek v¨r¨s. A type param´ter ´rt´ke GL COLOR.9. 70 . y).2. type = GL COLOR eset´n a sz´ a o a e e u m´dt´l f¨gg˝en vagy az RGBA komponensek. A pixelekr˝l beolvashat´ adatelemek a a o o format GL COLOR INDEX GL RGB GL RGBA GL RED GL GREEN GL BLUE GL ALPHA GL LUMINANCE GL LUMINANCE ALPHA GL STENCIL INDEX GL DEPTH COMPONENT a beolvasott adat sz´ ınindex v¨r¨s. o a u ıci´ A m´soland´ t¨mb bal als´ sark´nak koordin´t´i (x. A e e e m´sol´s sor´n a glPixelTransfer*(). sz´less´ge width.

5. glBitmap(). glTexImage1D(). o o u o e e 9. A pixeladatok form´tuma hat´rozza meg a t´rolt o e e o a a a adatok sz´m´t ´s sorrendj´t. e a mint amennyi sz¨ks´ges lenne (32 bit). az RGBA komponensek vagy a m´lys´g).. ´s a k´perny˝ mine e u e e e e o den olyan pixele sz´m´ra l´trehoz egy fragmentumot. glReadPixels*(). Negat´ sk´l´z´si ´rt´kek a mege o a ıv a a a e e felel˝ tengelyre vonatkoz´ t¨kr¨z´seket is eredm´nyeznek. hogy a glDrawPixels*(). a a o a o void glPixelStore{if} (GLenum pname. az adat ´llhat o a a e e a puszt´n a sz´ a ınindexb˝l. Ez´rt pazarl´s lenne pl. A glDrawPixels*(). xfactor ´s yfactor alap´rtelmez´se 1.4. Az OpenGL explicite defini´lja a k¨l¨nb¨z˝ form´tumok k¨z¨tti kono a a uo o o a o o verzi´kat. glTexImage2D() parancsok hoe gyan csomagolj´k ki az adatokat a mem´ri´b´l. a sz´ u e e a ınpufferb˝l beolvao sott sz´ ınkomponenseket 32 biten t´rolni. Seg´ eg´vel a pixelt¨mb¨k rajzol´sa ´s m´sol´sa sor´n v´grehajtand´ sk´l´z´si faktoıts´ e o o a e a a a e o aa a rokat ´ ırhatjuk el˝. azok adatt´ at. A lebeg˝pontos sz´mokat a megfelel˝ pufferben a grafikus hardvert˝l a o a o o f¨gg˝en ´ltal´ban kisebb helyen – sz´ u o a a ınkomponens eset´n 8 biten – t´rolja a rendszer. A pixeladatok t´rol´s´nak szab´lyoz´sa a a a a a A t´rol´si m´d a glPixelStore() paranccsal szab´lyozhat´. GL PACK* eset´n pedig azt. o a 71 . eg´sz vagy leo e e a o o a e beg˝pontos sz´m. GLfloat yfactor ).6. o 9. Raszteriz´l´skor a k´p minden pio e e e aa e xel´t egy-egy xf actor × yf actor m´ret˝ t´glalapk´nt kezeli a rendszer. Pixelek t´rol´sa.9. glPolygonStipple(). 8 – 32 bit.3. a vil´goss´gb´l (luminance. mivel egy k´p pixeleinek sz´ma a a a e a k¨nnyen meghaladhatja az 1 milli´t is. a a e e N´h´ny adatelem eg´sz sz´m (pl. t´bl´zat a pname param´ter lehets´ges a a e e ´rt´keit.] intervale e e e a a lumon v´ltoznak. A a 9. glTexImage2D() ´s glGetTexImage() parancsok m˝k¨d´s´t befoly´sol´ e u o ee a o pixeladat t´rol´si m´dot ´ll´ a a o a ıtja be. hogy a gla o a o ReadPixels*() ´s glGetTexImage() parancsok hogyan t¨m¨r´ (csomagolj´k ¨ssze) e o o ıtik a o az adatokat a mem´ri´ba. glBitmap(). ami ´ltal´ban az RGB ´rt´kek ´tlaga) o a a o a a e e a vagy magukb´l az RGBA ´rt´kekb˝l. TYPE param). a a e o e e vagy ennek a t´glalapnak az als´ vagy bal oldal´ra esik. kezdeti ´rt´k´t ´s a megadhat´ ´rt´kek intervallum´t tare e ıpus´ e e e e o e e a e e a talmazza. o o Az adatok t¨bbf´lek´ppen t´rolhat´k a mem´ri´ban. glPolygonStipple(). lek´pez´se a a aa e e A mem´ri´ban t´rolt k´p pixelenk´nt1 − 4 adatelemet tartalmazhat.2. m´sok lebeg˝pontos e a e a ına o ´rt´kek (pl. 1. a sz´ vagy stencilindex). melyek ´ltal´ban a [0. ann´l is ink´bb. mely k¨z´ppontja ebbe a t´glalapba. nagy´ asa e ıt´ ıt´ void glPixelZoom (GLfloat xfactor. glTexImage1D(). GL UNPACK* param´ter eset´n azt szab´lyozza. K´pek kicsiny´ ese. transzform´l´sa. Pl.

void glPixelMap{uiusf}v (GLenum map. e e e e oe e a 9. GLint mapsize.7. a sz´ ´s stencilindexeket ın. t´bl´zat. A pixeladatok t´rol´s´nak param´terei a a a aa e pname GL UNPACK SWAP BYTES GL PACK SWAP BYTES GL UNPACK LSB FIRST GL PACK LSB FIRST GL UNPACK ROW LENGTH GL PACK ROW LENGTH GL UNPACK SKIP ROWS GL PACK SKIP ROWS GL UNPACK SKIP PIXELS GL PACK SKIP PIXELS GL UNPACK ALIGNMENT GL PACK ALIGNMENT adatt´ ıpus GLboolean GLboolean GLint GLint GLint GLint kezdeti ´rt´k e e GL FALSE GL FALSE 0 0 0 4 felvehet˝ ´rt´kek oe e GL TRUE GL FALSE GL TRUE GL FALSE nemnegat´ eg´sz ıv e nemnegat´ eg´sz ıv e nemnegat´ eg´sz ıv e 2 hatv´nyai a (1. A m´retnek mindig 2 hatv´ny´nak kell lennie. glReadPixels*(). mik¨zben a k´ppufferb˝l (vagy a k´ppufferba) u e o e o e mozgatjuk. const TYPE *values). glTexImage1D(). . Bet¨lti a values c´ o ımen kezd˝d˝.8. A a 9. e e e e a a 72 . o o e u ıpus´ a a t´bl´zat tartalmazza a map param´ter lehets´ges ´rt´keit. t´bl´zat a pname param´ter lehets´ges ´rt´kei. 4. A glDrawPixels*(). 2. Ezen m˝veletek egyr´szt a glPixelTransfer*(). o void glPixelTransfer{if} (GLenum pname.3.5. m´sr´szt a glPixelMap*() u e a e paranccsal ´ ırhat´k le. TYPE param). M˝ veletek pixelek mozgat´sa sor´n u a a A pixeleken m˝veleteket hajthatunk v´gre. mapsize m´ret˝ map t´ u t´bl´zatot. keza ıtja a a e e e e ıpus´ deti ´rt´k´t ´s a megadhat´ ´rt´kek intervallum´t tartalmazza. glTexImage2D() ´s glGetTexImage() parancsok m˝k¨d´s´t befoly´sol´ pixel´tviteli m´dot e u o ee a o a o ´ll´ be. Transzform´l´s t´bl´zat seg´ eg´vel aa a a ıts´ e A k´perny˝ mem´ri´j´ba val´ be´ as el˝tt a sz´ e o o aa o ır´ o ınkomponenseket. A m´ret alap´rtelmez´se 1. glCopyPixels*().9.e egy t´bl´zat seg´ eg´vel is m´dos´ a a ıts´ e o ıthatjuk.) 9. . azok adatt´ at.3. az a a e e e e e e e ´rt´kek´ pedig 0. A a 9. .

t´bl´zat. 1. 1. 1. t´bl´zat. 0. A glPixelMap() paranccsal bet¨lthet˝ t´bl´zatok t´ a a o o a a ıpusa map GL PIXEL GL PIXEL GL PIXEL GL PIXEL GL PIXEL GL PIXEL GL PIXEL GL PIXEL GL PIXEL GL PIXEL mire vonatkozik I TO I sz´ ınindex S TO S stencilindex I TO R sz´ ınindex I TO G sz´ ınindex I TO B sz´ ınindex I TO A sz´ ınindex R TO R R G TO G G B TO B B A TO A A milyen ´rt´ket tartalmaz e e sz´ ınindex stencilindex R G B A R G B A MAP MAP MAP MAP MAP MAP MAP MAP MAP MAP 73 . 0.5.9. 0. 1. 0. A glPixelTransfer() parancs param´terei a a e pname GL MAP COLOR GL MAP STENCIL GL INDEX SHIFT GL INDEX OFFSET GL RED SCALE GL GREEN SCALE GL BLUE SCALE GL ALPHA SCALE GL DEPTH SCALE GL RED BIAS GL GREEN BIAS GL BLUE BIAS GL ALPHA BIAS GL DEPTH BIAS adatt´ ıpus GLboolean GLint GLint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat kezdeti ´rt´k e e GL FALSE 0 0 1. felvehet˝ ´rt´k oe e GL TRUE GL FALSE tetsz˝leges eg´sz o e tetsz˝leges eg´sz o e tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o tetsz˝leges val´s o o 9. 0.4.

• gy˝jt˝puffer. ´ pl. B alpufferei. G. Ezek vagy sz´ ınindexeket vagy RGB sz´ ınkomponenseket ´s alfa ´rt´keket tartalmaznak. jobb els˝. • m´lys´gpuffer. B. melyek t´mogatj´k a e e e a o a a 74 . pl. m´lys´g. A a o e a a a o lek´rdezhet˝ pufferek azonos´ oj´t a a 10. A vagy R. t´bl´zat tartalmazza. e o ıt´ a a a 10.1.10. Egy k´phez tartoz´ ¨sszes puffert egy¨ttesen k´ppuffernek e oo u e nevezz¨k. a l´that´s´gi e o´ ıt´ a e ıt´ e a ın¨ a oa vizsg´latokhoz a m´lys´g¨ket (az ablakkoordin´ta-rendszerbeli z koordin´t´t). Azok az OpenGL implement´ci´k. u Az OpenGL a k¨vetkez˝ puffereket haszn´lja: o o a • sz´ ınpufferek: bal els˝. hogy o e e e e u implement´ci´nk az egyes pufferekben pixelenk´nt h´ny biten t´rolja az inform´ci´t. A glGetIntegerv() paranccsal lek´rdezhetj¨k.1. Az OpenGL-ben t¨bb puffer van. fejezet Pufferek Raszteres grafikus display-n a k´pet pixelekb˝l (k´ppontokb´l). m´lys´gpuffer. e e • stencilpuffer. Egy-egy o k´p el˝all´ as´hoz ´s megjelen´ es´hez a pixelekhez t´rolni kell sz´ uket. Ezen t´glalapok oldalai az ablakkoordin´ta-rendszer tengeo o e a lyeivel p´rhuzamosak ´s a bal als´ sarok koordin´t´ival azonos´ a e o aa ıtjuk ˝ket. jobb h´ts´ ´s tov´bbi kieg´sz´ o o a o o a o e a e ıt˝ sz´ ınpufferek. tov´bb´ egy sz´ o o e e e u o a a ınpuffer sz´ ınindex m´dhoz stencil.´s m´lys´gpufferrel. stencila ee e e a e a a u e index. u o A pufferek sz´ma ´s a bit/pixel m´rete implement´ci´f¨gg˝.´s gy˝jt˝puffer. apr´ t´glalap alak´ e o e o o e u foltokb´l rakjuk ¨ssze. bal h´ts´. amibe rajzolunk. mint pl. melyekben minden pixelhez ugyanannyi adatot t´rolunk pufa u a fernek nevezz¨k. hogy a e e a ou o minden implement´ci´ban van legal´bb egy sz´ a o a ınpuffer RGBA sz´ ınmegad´si m´dhoz ´s a o e ehhez kapcsol´d´an stencil-. a sz´ u o ıgy ınpuffer. Egy e e puffernek lehetnek alpufferei. Egy´b a e e u a aa e hat´sok el´r´se ´rdek´ben tov´bbi adatok pixelenk´nti t´rol´sa is sz¨ks´ges. Azokat a t´rter¨leteket. Sz´ ınpufferek A sz´ ınpuffer az. azonban biztos. RGBA sz´ ınmegad´si m´d eset´n a sz´ a o e ınpuffernek R. G.

A komponensek u o t´rol´s´ra haszn´lt bitek sz´ma pixelenk´nt a aa a a e sztereoszk´pikus (bicentr´lis) ´br´zol´st.3. el´g puszt´n ´tm´solni egyik pufferb˝l a m´sikba. ez´rt minden pixelhez m´lys´get (az ablakkoordin´ta-rendszerbeli z a ıt´ a e e e a ´rt´ket) is t´rol. B. t´bl´zat. egy´bk´nt csak els˝. pl.1. G. ism´tl˝d˝en haszn´lt k´pek t´rol´s´ra. a a e o e a Ahhoz hasonl´ mint amikor egy kartonlapba feliratot v´gunk. ´s a lapot egy fel¨letre ıt. Ha m´sk´nt nem rendelkez¨nk. G. Az OpenGL nem rendelkezik ezek haszn´lat´r´l. A pufferek azonos´ oi a a ıt´ azonos´ o ıt´ GL RED BITS GL GREEN BITS GL BLUE BITS GL ALPHA BITS GL DEPTH BITS GL STENCIL BITS GL ACCUM RED BITS GL ACCUM GREEN BITS GL ACCUM BLUE BITS GL ACCUM ALPHA BITS jelent´se e a sz´ ınpufferben az R. hogy az anim´ci´t t´mogatja-e a o a (van-e h´ts´ sz´ a o ınpuffere). amennyiben annak az ablakkoordin´ta-rendszerbeli z ´rt´ke ´ a e e kisebb. a a 10. e e e e e o o e a a 10. hogy a rajzol´st a k´perny˝ bizonyos r´szeire korl´tozzuk. vagyis tetsz´s¨nk a ao eu szerint hasznos´ ıthatjuk ˝ket. k¨zvetlen¨l meg nem jelen´ a o a o u ıthet˝ sz´ o ınpuffert tartalmazhatnak. hogy implement´ci´nk e u a o t´mogatja-e a sztereoszk´pikus ´br´zol´st (van-e jobb oldali sz´ a o a a a ınpuffere is).2. ´ ugyanis nem o e o o a e a a a ıgy kell mindig ujrarajzolni a k´pet. akkor van els˝ ´s h´ts´ a o a a o oe a o sz´ ınpuffere is.10. Az implement´ci´k legfeljebb 4 tov´bbi. Minden OpenGL implement´ci´ban lenni kell egy bal e e o a o els˝ sz´ o ınpuffernek. B. a glGetBoolean(GL DOUBLE BUFFER) paranccsal pedig azt. Ha az anim´ci´t t´mogatja az implement´ci´. a rendszer fel¨l´ e e a a e u u ırja a hozz´ tartoz´ a o pixelt az uj fragmentummal. o a a a e a a u ıt´ a e 75 . aminek sor´n a fel¨letre csak a felirat ker¨l. ´ e e a a a o a A glGetBoolean(GL STEREO) paranccsal lek´rdezhetj¨k. A komponensek t´rol´s´ra haszn´lt bitek sz´ma pixelenk´nt a aa a a e a m´lys´gpuffer pixelenk´nti m´rete e e e e a stencilpuffer pixelenk´nti m´rete e e a gy˝jt˝pufferben az R. mivel ez a z ´rt´k (a m´lys´g) a n´z˝pontt´l m´rt t´vols´got fejezi ki. A GL AUX BUFFERS param´terrel kiadott glGetIntegerv() e paranccsal az opcion´lis sz´ a ınpufferek sz´m´t kaphatjuk meg. M´s hasonlattal ´lve. M´lys´gpuffer e e Az OpenGL a m´lys´gpuffer (z-puffer) algoritmust haszn´lja a l´that´s´g e e a a oa meg´llap´ as´hoz. bal ´s jobb oldali sz´ o a a a a e ınpuffereket is tartalmaznak. Ha egy implement´ci´ nem t´mogatja a sztereoszk´pikus ´br´zol´st. akkor csak bal oldali a o a o a a a sz´ ınpuffere van. Stencilpuffer A stencilpuffert arra haszn´ljuk. a e u helyezve lefestj¨k. A f´nym´sol´k elterjed´se u a u u e a o e el˝tt ezt a technik´t haszn´lt´k kis p´ld´nysz´m´ sokszoros´ asra.

u o o e e e e majd a kapott eredm´nyt az ´ e ırhat´ sz´ o ınpufferekbe be´ ırja. GLfloat value). ´ pl. a ırja u o 76 . o o A gy˝jt˝puffer haszn´lat´val hasonl´ hat´s ´rhet˝ el. a teljes k´p kisim´ asa (antialiasing). e ırja u o • GL MULT: a gy˝jt˝pufferbeli ´rt´ket megszorozza a value ´rt´kkel.] intervallumra lev´gja. mint amikor a f´nyk´p´sz u o a a o a e o e e e ugyanarra a filmkock´ra t¨bbsz¨r expon´l. a m´lys´g´less´g szimul´l´sa is. elmos´dottan fog megjelenni. A ´rt´keit kiolvassa. majd az eredm´nyt vissza´ a gy˝jt˝pufferbe. megszorozza ˝ket a value ´rt´kkel ´s hozz´adja a e e o e e e a gy˝jt˝pufferhez. u o o • GL RETURN: a gy˝jt˝pufferb˝l kiolvasott ´rt´keket megszorozza a value ´rt´kkel. G.. 1. hogy t¨bb k´pet ¨sszegezve ´ll´ u o a a a o e o a ıtsunk el˝ egy o v´gs˝ k´pet. majd az ¨sszegy˝jt¨tt – a gy˝jt˝pufferben megkompon´lt – k´p visszam´solhat´ a e o u o u o a e a o sz´ ınpufferbe. Sz´ a o ınindex m´dban a gy˝jt˝puffer tartalma defini´latlan. majd vissza´ a gy˝jt˝pufferbe. mint a sz´ u ınpuffer. mint a sz´ e e a a ınpufferek´. Ekkor ugyanis a lef´nyk´pezett t´rben eseta o o a e e e legesen mozg´ alakzat t¨bb p´ld´nyban. Ezen k´ ul m´s o o e a o ıv¨ a hat´sok is el´rhet˝k. u o e e a e e • GL ADD: a gy˝jt˝pufferbeli ´rt´kekhez hozz´adja a value ´rt´ket. A ´rt´keit kiolvassa. B. megszorozza ˝ket a value ´rt´kkel ´s fel¨l´ vel¨k a e e o e e e u ırja u gy˝jt˝puffer megfelel˝ elemeit. G. A kerek´ esi hib´k cs¨kkent´se ´rdek´ben a gy˝jt˝puffer a o ıt´ a o e e e u o bit/pixel ´rt´ke ´ltal´ban nagyobb. A o u o a gy˝jt˝puffert ´ltal´ban arra haszn´ljuk. speci´lis hat´sokhoz is j´l haszn´lhat´ a e a u o o a a o a o stencilpuffer. hogy e mellett m´g m´s “tr¨kk¨kh¨z”. A gy˝jt˝puffer m˝k¨d´s´t szab´lyozza. a value param´terrel pedig a m˝velethez haszn´lt ´rt´ket. L´tni foa a o u a e u a a gjuk. Az op param´terrel a m˝veletet v´laszthatjuk u o u o ee a e u a ki. az eredm´nyt a u o e e e e e [−1.a stencilpuffer haszn´lat´val tetsz˝leges alak´ ablakon ´t n´zhetj¨k a vil´got. e void glAccum (GLenum op. az akkumul´l´s mindig t´glalap alak´ u o o u aa e u pixelt¨mb¨kre vonatkozik ´s az adatforgalom k¨zte ´s a sz´ o o e o e ınpuffer k¨z¨tt van. Az op lehets´ges ´rt´kei ´s e u a e e e e e e hat´sa: a • GL ACCUM: a glReadBuffer() paranccsal olvas´sra kiv´lasztott puffer pixeleinek a a R. Gy˝ jt˝puffer u o A gy˝jt˝puffer RGBA sz´ u o ınkomponenseket tartalmaz ugyan´gy. hogy l´that´ legyen. A sz´ ınpufferek valamelyik´be kell rajzolni ´s k¨zben a gy˝jt˝pufferben is t´rolni kell a e e o u o a k´pet.4. 10. B. Ezzel a m´dszerrel vihet˝ v´gbe pl. a teljes k´p kisim´ asa. u o a a • GL LOAD: a glReadBuffer() paranccsal olvas´sra kiv´lasztott puffer pixeleinek R. ha a sz´ ınmegad´si m´d RGBA. e o e o o e e ıt´ A gy˝jt˝pufferbe nem tudunk k¨zvetlen¨l rajzolni. a e o ıgy e ıt´ e e e e aa Az OpenGL parancsokkal nem lehet k¨zvetlen¨l csak a gy˝jt˝pufferbe ´ o u u o ırni.

hogy mik´nt v´lasszuk meg az elmozdul´sokat. A helyes feloszt´s m´dja csak tapasztalati uton ´llap´ e a a o ´ a ıthat´ o meg.n/i). o e e e e a a Egy´ltal´n nem biztos. hanem ıt´ a ıt. parancsot kell kiadni. amikor a felhaszn´l´ minden k´p a oe ıv o e a ao e hozz´ad´sa ut´n d¨nthet arr´l.4.3. hogy most nem a kamer´t kell mozgatni. hogy az ´br´zolt t´rr´szben vannak r¨gz´ e u a a e e o ıtett ´s mozg´ objektumok. amelyik nem l´that´ – ez dupla sz´ a o ınpuffer haszn´latakor lehets´ges – ´s csak a a e e glAccum(GL RETURN.decayf). Ekkor a rajzol´st v´gz˝ e a e o ciklusban minden kirajzol´s ut´n a a a glAccum(GL RETURN. 1.1.1. hanem az els˝ k´p megrajzol´sa el˝tt a u o o e a o glAccum(GL LOAD. mintha csak a f´nyk´pez˝g´pet tart´ e e o e o k´z remegne. M´sik lehet˝s´g egy interakt´ k¨rnyezet l´trehoz´sa. m´s e e a a r´szek kiss´ (vagy nagyon) hom´lyosak. M´lys´g´less´g e e e e Egy f´nyk´pez˝g´ppel k´sz´ e e o e e ıtett k´pen vannak objektumok. amivel az ¨sszegy˝jt¨tt k´p l´that´ lesz./n)..]. Amikor ugyanarr´l az objektumr´l t¨bb k´pet a e o o o e kell ilyen m´don l´trehozni. akkor abba a sz´ ınpufferbe rajzoljunk.2. V´g¨l a k´pet – a h´tt´r.1. hogy tov´bb jav´ a a a o o a ıtsa-e a k´pet. a kamera o u o e a o a remeg´se egy pixeln´l kisebb legyen! Az elj´r´s egy kicsit gyorsabb. hogy az a j´. A kamera remegtet´s´nek olyan kicsinek kell lenni. ha ez a t´nyez˝ kicsi a mozg´s gyorsabbnak e o a l´tszik. A gy˝jt˝pufferbe minden rajzol´sn´l a u o a a glAccum(GL ACCUM. parancsot adjuk ki.).10. parancsot adjuk ki. Norm´l k¨r¨lm´nyek k¨z¨tt az OpenGL-el e e a a ou e o o 77 . v´g¨l a a ıt´ u o e e u glAccum(GL RETURN. ahol i a ciklusv´ltoz´. ahol decayf ∈ [0. melyek ´lesen l´tszanak. Az elmozdul´s. 10. ´s a e o e mozg´ alakzatok k¨l¨nb¨z˝ helyzeteit ugyanazon a k´pen akarjuk ´br´zolni ugy.4. be´ll´ as mellett ker¨lj¨n a k´p.4.).1. A megold´s a k´p o e e o a e kisim´ as´hoz hasonl´ A k¨l¨nbs´g az. uo e a az alakzatot. Teljes k´p kisim´ asa e ıt´ A teljes k´p kisim´ as´hoz el˝bb t¨r¨lj¨k a gy˝jt˝puffert ´s enged´lyezz¨k az els˝ e ıt´ a o oo u u o e e u o sz´ ınpuffer ´ as´t ´s olvas´s´t. fontos k´rd´s./n).) paranccsal a l´that´ a ırt o o o sz´ ınpufferbe ´ ırhatjuk. parancs kiad´sa el˝tt v´ltsunk a l´that´ sz´ a o a a o ınpufferre. a o 10. hogy az n darab k¨zb¨ls˝ f´zis is l´that´ o u o a a o legyen. hogy a k´pmez˝n m´rve e ee e o e az elmozdul´s 1 pixeln´l kisebb legyen. Bemozdul´sos ´letlens´g (motion blur) a e e Felt´telezz¨k. a mozg´ alakzat pillanatnyi poz´ oja ´s az el˝z˝ a e u e a e o ıci´ e o o a o helyzetek ´ltal le´ elmos´d´ cs´va – a glAccum(GL RETURN. ha nem t¨r¨lj¨k a e e aa oo u gy˝jt˝puffert.1.1. hogy az o uo o o e a a ´ id˝ben visszafel´ haladva a k´pek egyre elmos´dottabbak legyenek. parancsot kell kiadni. Ez ut´n rajzoljuk meg n-szer a k´pet picit k¨l¨nb¨z˝ ır´ a e aa a e uo o o poz´ ob´l (a vet´ esi lek´pez´st picit m´dos´ ıci´ o ıt´ e e o ıtsuk). Ha nem akarjuk. ha a pixelt egyenletesen felosztjuk mindk´t ir´nyban a a o e a ´s a r´cspontokba toljuk el. ´s a e glAccum(GL MULT.

. A t¨rl´sre ford´ oo a o o e u e o o e ıtott id˝ o cs¨kkent´se ´rdek´ben legt¨bb grafikus hardver egyidej˝leg t¨bb puffert is tud t¨r¨lni.k´sz´ e ıtett k´pek minden r´sze ugyanolyan ´les. hogy az ´br´zoland´ t´rr´szt megad´ csonka g´l´knak legyen egy a a a a o e e o ua k¨z¨s t´glalapja. 0. egyszer˝bb rajzok eset´n a t¨rl´s hosszabb o e o e u e o e ideig tarthat. ırni e a o e void glClearColor (GLclampf red. elmos´dottabb legyen a k´p. amivel fel¨l akarjuk o e e e e e u ´ a puffer elemeit.5. azt az ´rt´ket. GLclampf alpha). A gy˝jt˝pufferrel azonban el´rhet˝ az. Ennek a m´dos´ asnak term´szetesen nagyon csek´lynek kell lennie. A k´pet a a a o ıt´ e e e szok´sos m´don ´tlagolni kell a gy˝jt˝pufferben. GLclampf green. o ıt´ e o A t¨rl´shez el˝bb be kell ´ll´ o e o a ıtani a t¨rl´si ´rt´ket. a o a u o 10. A vet´ esi k¨z´ppontok elhelyez´se a m´lys´g´less´g modellez´s´hez a ıt´ o e e e e e e ee Ennek ´rdek´ben t¨bbsz¨r kell megrajzolni a k´pet a perspekt´ lek´pez´s olyan e e o o e ıv e e v´ltoztat´sa mellett. hanem pl. a m´lys´gpuffert e e is t¨r¨lni kell. mely a csonka g´la alaplapj´val p´rhuzamos s´ o o e u a a ıkban van (l´sd a 10.1. 0.. Alap´rtelmez´s: 0. ´bra. de a v´geredm´ny el´gg´ hasonl´ a e e o e u o ee aa e e e e ıt f´nyk´pez˝g´ppel k´sz´ e e o e e ıtett k´phez. Ez ıkt´ a a o e nem a f´nyk´pez˝g´p m˝k¨d´s´nek a szimul´l´sa. o e e e 78 . majd v´gre kell hajtani mag´t a t¨rl´st.. 1.. A t¨rl´si sz´ megad´sa RGBA sz´ o e ın a ınmegad´si m´d eset´n. a ´br´t). Pufferek t¨rl´se o e A pufferek t¨rl´se nagyon id˝ig´nyes feladat. ez ar´nyosan n¨veli a t¨rl´shez sz¨ks´ges id˝t. Alap´rtelmez´s: 0. A megadott ´rt´keket a a o e e e rendszer a [0. o e e e o u o oo amivel jelent˝s megtakar´ as ´rhet˝ el. e 10. e e e u o e o hogy egy adott s´ ol t´volodva egyre hom´lyosabb. GLclampf blue.1. Ha nemcsak a sz´ a ınpuffert. 0. mint maga a rajzol´s. A t¨rl´si sz´ megad´sa sz´ o e ın a ınindex m´d eset´n..] intervallumra lev´gja. a e e void glClearIndex (GLfloat index ).

6.. 79 . hasonl´k´ppen e o e a o o e e e a GL FRONT ´s GL BACK a bal ´s a jobb oldalira is. tov´bb´ minden ´ a a ırhat´ puffert t¨r¨l a rendszer. A mode param´ter az al´bbi ´rt´keket a a e a e e veheti fel: GL FRONT.. Alap´rtelmez´s: 0. gondoskodva a k´t puffer megfelel˝ cser´j´r˝l. a k¨z¨s h´tteret egyszerre megrajzolhatjuk az els˝ ´s h´ts´ a o e o o a oe a o sz´ ınpufferekbe. jobb h´ts´ vagy a kieg´sz´ o sz´ a o o a o a o e ıt˝ ınpufferekbe.] u o o e ın´ a e e intervallumra lev´gja. A stencilpuffer t¨rl´si ´rt´k´nek megad´sa. void glDrawBuffer (GLenum mode). 0. GLclampf blue. 0. GL DEPTH BUFFER BIT. GLclampf alpha).. illetve a h´ts´ o uo o o a o a o pufferbe. o oo 10. Alap´rtelmez´s: 1. A gy˝jt˝puffer t¨rl´si sz´ enek megad´sa. a e e void glClear (GLbitfield mask ). GL NONE A GL LEFT ´s GL RIGHT az els˝ ´s a h´ts´ pufferekre is vonatkozik. azaz egyszerre t¨bb sz´ o a oa o ınpufferbe is rajzolhatunk. GL AUXi. 1. vagy ezeknek a logikai vagy (OR) m˝velettel ¨sszekapcsolt tetsz˝leges kombin´ci´ja lehet. illetve ezek tetsz˝leges kombin´ci´j´ba. vagy sz´ ınpufferekbe ker¨lhet. vagy az RGBA puffer.] intervallumra o e e e a e e lev´gja. A mask param´terrel megadott puffereket t¨rli. majd a mozg´ alakzat k¨l¨nb¨z˝ helyzeteit felv´ltva az els˝. Az ´ ırand´ ´s olvasand´ pufferek kiv´laszt´sa oe o a a A rajzol´s eredm´nye az ´ltalunk kiv´lasztott sz´ a e a a ınpufferbe. o e e e e a e e void glClearAccum (GLclampf red. a e e void glClearStencil (GLint s). Az ´ ırand´ vagy t¨rlend˝ sz´ o o o ınpuffer kiv´laszt´sa.void glClearDepth (GLclampd depth). GL BACK.. GL RIGHT.. GL LEFT. Alap´rtelmez´s: 0. GL BACK RIGHT. GL FRONT RIGHT. 1. A t¨rl´si m´lys´g megad´sa. e o mask ´rt´ke a e e GL COLOR BUFFER BIT. GL STENCIL BUFFER BIT.. A megadott ´rt´keket a rendszer a [0.. Anim´ci´ eset´n pl. GL ACCUM BUFFER BIT konstansok valamelyike. A megadott ´rt´keket a rendszer a [0. GL FRONT LEFT. A GL AUXi pedig az i-edik kieg´sz´ o sz´ e ıt˝ ınpuffert azonos´ ıtja. 0. jobb els˝. GLclampf green. azaz vagy a sz´ o o ınindex-puffer. e o eeo A glDrawBuffer() paranccsal ´ll´ a ıthatjuk be a kurrens puffert. GL BACK LEFT. bal h´ts´. GL FRONT AND BACK. GL COLOR BUFFER BIT u o o a o eset´n mindig a megfelel˝ sz´ e o ınpuffer t¨rl˝dik. u teh´t a bal els˝.

A maszkol´si m˝veleteket az al´bbi parancsokkal o a u a adhatjuk meg: void glIndexMask (GLuint mask ). o e o Alap´rtelmez´s: GL TRUE. k´t e ık a e e e e k´ps´ (double-buffered mode) eset´n pedig GL BACK. Csak l´tez˝ pufferekb˝l val´ olvas´s enged´lyezhet˝. G. GL FALSE eset´n csak olvashat´. teh´t a GLX vagy GLUT k¨nyvt´r megfelel˝ f¨ggv´ny´vel lehet megtenni. Alap´rtelmez´s szerint mind a n´gy komponenst be´ ırja. a void glColorMask (GLboolean red. o o e o a e a Egy k´ps´ haszn´lata eset´n (single-buffered mode) az alap´rtelmez´s GL FRONT. e e maszkolja az adatokat. A ´rt´kek k¨z¨l melyiket ´ be a sz´ e e o u ırja ınpufferbe. GL TRUE e ırja e e e eset´n be´ e ırja. o Ahol a maszkban 1 szerepel. stencil) a ın. (A k´t m´d k¨z¨tti v´laszt´s e ık e e o o o a a hardverf¨gg˝. e o o o a e o Egy k´ps´ haszn´lata eset´n (single-buffered mode) az alap´rtelmez´s GL FRONT. teh´t a GLX vagy GLUT k¨nyvt´r megfelel˝ f¨ggv´ny´vel lehet megtenni.) u o a o a o u e e 10. Pufferek maszkol´sa a Miel˝tt az OpenGL be´ o ırna egy adatot a kiv´lasztott pufferbe (sz´ m´lys´g. Alap´rtelmez´s szerint a sz´ e e ınindex maszkj´nak minden bitje 1. amelyb˝l a glReadPixels().7. u e A kor´bbi glReadBuffer() a h´ as´nak hat´s´t ´rv´nytelen´ ıv´ a aa e e ıti. seg´ eg´vel azt szab´lyozhatjuk. glCopyPia a o xels(). e e void glStencilMask (GLuint mask ). (A k´t m´d k¨z¨tti v´laszt´s e e ık e e o o o a a hardverf¨gg˝. m´ a kijel¨lt pufferek o u e ıg o k¨z¨tt van l´tez˝. Annak a sz´ ınpuffernek a kiv´laszt´sa. e ık a e e e k´t k´ps´ (double-buffered mode) eset´n pedig GL BACK. e e 80 . GLboolean green. ahol 0 szerepel azt nem. GL FALSE eset´n nem ´ be. a sz´ ınindex megfelel˝ bitj´t be´ a rendszer a sz´ o e ırja ınpufferbe. a sz´ ınindex megfelel˝ bitj´t be´ a rendszer a sz´ o e ırja ınpufferbe. a o e a ıts´ e a hogy a rendszer az R. seg´ eg´vel a sz´ a o a ıts´ e ınindex maszkolhat´. ahol 0 szerepel azt nem.) u o a o a o u e e void glReadBuffer (GLenum mode). glCopyTexSubImage*() ´s glCopyConvolutionFile ter*() f¨ggv´nyekkel pixeladatokat olvashatunk be. GLboolean blue. Alap´rtelmez´s szerint a mask minden bitje 1. GLboolean alpha). hib´ra jutunk.Kijel¨lhet¨nk olyan puffert is amelyik nem l´tezik mindaddig. glCopyTexImage*(). void glDepthMask (GLboolean flag). B. Ha a flag ´rt´ke GL TRUE. Ahol a mask ban 1 szerepel. Csak sz´ ınindex sz´ ınmegad´si m´dban van hat´sa. Csak RGBA sz´ ınmegad´si m´d eset´n van hat´sa. a m´lys´gpuffer ´ e e e e ırhat´. vagyis bitenk´nti logikai ´s (AND) m˝veletet hajt v´gre a maszk e e u e megfelel˝ elem´n ´s a be´ o e e ırand´ adaton. Ha a kiv´lasztott pufferek egyike sem l´tezik.

Az itt megadott maszk nem azonos a glStencilFunc() parancs harmao dik param´terek´nt megadand´ maszkkal. hogy melyik e a bits´ ´ ık ırhat´. ´s az el˝t´rben mozg´ alakot ´ rajzoljuk meg e e o a u e oe o ıgy k´pkock´nk´nt.Sz´ ınindex m´dban sz´mos tr¨kk el´rhet˝ maszkol´ssal.1. majd a o a m´lys´gpuffert csak olvashat´v´ tessz¨k. Ez mindaddig j´l m˝k¨dik. azzal ugyanis azt szab´lyozzuk. ha ugyanabban a e a a a a a k¨rnyezetben mozog egy alak. A glStencilMask() paranccsal megadott maszk azt szab´lyozza. 81 . akkor a h´tteret csak egyszer rajzoljuk meg. hogy a stencil e e o a f¨ggv´ny mely bits´ u e ıkokat vegye figyelembe. Tov´bbi alkalmaz´s lehet pl. m´ az el˝t´rben l´v˝ alak ´br´zol´s´hoz nem e a e o u o ıg oe e o a a aa sz¨ks´ges a m´lys´gpuffer ´ u e e e ırhat´s´ga. szakaszt). o a u e o a A m´lys´gpuffer maszkol´s´nak alkalmaz´s´ra m´r az ´tl´tsz´ alakzatok ´br´zol´s´n´l e e aa aa a a a o a a aa a l´thattunk p´ld´t (l´sd a 8. Ezek aa o e u ık a o seg´ eg´vel hajthat´ v´gre pl. oa A stencilpuffer maszkol´s´val t¨bb 1 bit/pixel m´ret˝ stencils´ haszn´lhat´. a z´rt fel¨letekb˝l a v´g´s´ ıts´ e o e a u o a o ıkok ´ltal lemetszett r´szek bea e fed´se.

a e e 82 . fragment´l´s. alfa-vizsg´lat. a e 11. Egy fragmentum akkor jut t´l a kiv´g´si a u e u u e u a a vizsg´laton. m´lys´gvizsg´lat. Ebben a fejezetben a fragmentumokon v´grehajthat´ vizsg´latokat ´s m˝veleteket e o a e u foglaljuk ¨ssze. A rendszer pl. Kiv´g´si vizsg´lat a a a A glScissor() paranccsal a rajzol´st lesz˝k´ a u ıthetj¨k az ablaknak. amelyek a k´pmez˝ adott ter¨let´n k´ ul esnek. vagy e o u e ıv¨ t´volabb vannak a n´z˝pontt´l. fejezet A fragmentumokon v´grehajtott e vizsg´latok ´s m˝ veletek a e u Amikor geometriai alakzatokat. a 4. a 3. Ezek teljes list´ja a v´grehajt´s sorrendj´ben a k¨vetkez˝: o a e a e o o 1. egy az ablak oldalaival u p´rhuzamos oldal´ t´glalap alak´ ter¨let´re. ha erre a t´glalapra esik a k´pe. aa 6. k´pmez˝e o a o a ıt´ a ıt´ ıt´ a o e o transzform´ci´. A vizsg´latok a e o o o a e e a ut´n megmarad´ fragmentumok sz´ et a megfelel˝ pixelek sz´ evel kombin´lhatja a renda o ın´ o ın´ a szer az alfa komponensek szerint. u Ha egy fragmentum a fentiek k¨z¨l valamelyik vizsg´laton fennakad. dithering. kiv´g´si vizsg´lat. logikai m˝veletek. a a a 2. stencilvizsg´lat.11. sz´ ınkombin´l´s alfa szerint. e e a 5.1. vet´ esi transzform´ci´. 7. A fragmentumok is sok vizsg´laton mennek ´t m´ v´g¨l a o aa a a ıg e u valamilyen form´ban esetleg megjelennek a k´perny˝n. akkor a t¨bbi o u a o vizsg´latot nem hajtja v´gre rajta a rendszer. megvil´g´ asi sz´m´ asok. sz¨veget vagy raszteres k´pet rajzolunk az OpenGL o e seg´ eg´vel. mint a megfelel˝ pixel aktu´lis m´lys´ge. figyelmen k´ ul a e o ıv¨ hagyja azokat a fragmentumokat. a megjelen´ ıts´ e ıtend˝ alakzatokon sok m˝veletet hajt v´gre a rendszer: modello u e n´z˝pont transzform´ci´.

de a m´sodik rajzol´s el˝tt tegy¨k e e e a e e u a a o u a m´lys´gpuffert csak olvashat´v´. A u a e e a a a m´lys´gs´gvizsg´latot mindk´t esetben enged´lyezz¨k. A t´glalap a a e e a e bal als´ sark´nak koordin´t´i (x. ez´rt nagyon gyors lehet. alfa az uj fragmentum alfa komponens´t jel¨li. Ehhez az alakzatot a a a oa a k´tszer kell megjelen´ e ıteni. e e Alap´rtelmez´s szerint func = GL AWAYS. vagy tov´bbengedi a megjelen´ esi m˝veletsoron. A glGetIntegerv() parancsot a e o e e o ıt´ u e GL ALPHA TEST FUNC param´terrel kiadva a kurrens ¨sszehasonl´ o f¨ggv´nyt. Az els˝ megjelen´ eskor csak azokat a fragmentumokat eno ıt´ gedj¨k ´t.void glScissor (GLint x. a a e A kiv´g´s a stencilvizsg´lat speci´lis eset´nek tekinthet˝. a a e 11. A kiv´g´si t´glalap m´reteit adja meg az ablakkoordin´ta-rendszerben. a ao ıt´ u e e a 83 . GLint y. a glIsEnabled(GL ALPHA TEST) paranccsal pedig lek´rdezhet˝. melyek alfa ´rt´ke 1. L´t´t az indokolja. a e glIsEnabled(GL SCISSOR TEST) paranccsal pedig lek´rdezhet˝. a glDisaa e ble(GL ALPHA TEST) paranccsal letiltani. A GL SCISSOR BOX param´terrel kiadott glGetIntegerv() parancce e sal pedig a kiv´g´si t´glalap adatait kapjuk meg. 1. sz´less´ge width. t´bl´zat tartalmazza a func param´ter lea a a e hets´ges ´rt´keit. ´s az ¨sszehasonl´ as eredm´ny´t˝l f¨gg˝en eldobja o ıtja e e e o ıt´ e eo u o a fragmentumot.5-re (vagy m´s 0 ´s 1 k¨z´ es˝ ´rt´kre). ref = 0 ´s nem enged´lyezett. Ha ez a vizsg´lat enged´lyezett. A megadott ref ´r´tket e e e o ıt´ u e a ıtja ee lev´gja a [0. a e e e e u GL ALPHA TEST REF param´terrel kiadva pedig a referencia´rt´ket k´rdezhetj¨k le. ellent´tben a a o u a e e a tetsz˝leges alak´ kiv´g´si ter¨letet megenged˝ stencilvizsg´lattal.1. A 11. a glDisable(GL SCISSOR TEST) paranccsal letiltani. melyet szoftverb˝l o u a a u o a o val´s´ o ıtanak meg. hogy enged´lyezett-e. amelyiket ´tl´tsz´v´ akarjuk tenni. melyek alf´ja nem 1. o ıt´ u e void glAlphaFunc (GLenum func.2. A referencia´rt´ket ´s az ¨sszehasonl´ o f¨ggv´nyt ´ll´ be. Alap´rtelmez´s o a aa e e a e e szerint a kiv´g´si t´glalap megegyezik az ablakkal. a e e e a e o e o e e tov´bb´ ¨sszehasonl´ o f¨ggv´nyk´nt v´lasszuk a GL GREATER-t. A referencia´rt´ket ´s a ıt´ u e e e az ¨sszehasonl´ o f¨ggv´nyt a glAlphaFunc() paranccsal adhatjuk meg.. e e Az alfa-vizsg´lattal ´tl´tsz´s´gi algoritmust implement´lhatunk. y). Az alfa szerinti e e e ´ e o vizsg´latot a glEnable(GL ALPHA TEST) paranccsal lehet enged´lyezni. a a o a o ´s ´ll´ e a ıtsuk az alfa-vizsg´lat referencia´rt´k´t 0. a m´sodik sor´n csak azokat. A kiv´g´si vizsg´latot a glEnable(GL SCISSOR TEST) paranccsal lea a a het enged´lyezni. GLclampf ref ). Alfa-vizsg´lat a RGBA sz´ ınmegad´si m´d eset´n lehet˝s´g van fragmentumok elhagy´s´ra alfa kompoa o e oe aa nens¨k alapj´n. magass´ga height. hogy a a a a e o ee ezt a kiv´g´st k¨nny˝ a hardverben implement´lni. hogy a kiv´g´s e o a a enged´lyezett-e. e e o a Az alfa-vizsg´lat seg´ eg´vel billboarding hat´s is megval´s´ a ıts´ e a o ıthat´. a t¨bbit 1-re.] intervallumra. a rendszer az uj fragmentum alfa ´rt´k´t u a a e ´ e e e ¨sszehasonl´ egy referencia´rt´kkel. A text´ra azon o u r´szeinek alfa ´rt´k´t ´ll´ e e e e a ıtsuk 0-ra. GLsizei width. GLsizei height).

ha a fragmentum nem jut t´l a stencilvizsg´laton. ´s az ¨sszehasonl´ as eredm´ny´t˝l f¨gg˝en m´dos´ a pufferben e e e o ıt´ e eo u o o ıtja t´rolt ´rt´ket.1. GLint ref. A func param´ter lehets´ges ´rt´keit a 11. ref = 0 ´s mask minden bitje 1. amelyhez tartoz´ bitnek a mask -ban 1 az ´rt´ke. A vizsg´lat abb´l ´ll. hogy a rendu a o a szer ¨sszehasonl´ a fragmentumnak megfelel˝ pixelhez a stencilpufferben t´rolt ´rt´ket o ıtja o a e e egy referencia´rt´kkel. e e e o ıt´ e e e e t´bl´zat tartalmazza. A fail param´terrel megadott a e e f¨ggv´nyt akkor haszn´lja a rendszer. zfail ´s zpass a a e param´terek ´rt´kei a 11.2. de a m´lys´gvizsg´laton nem.3. GLenum zpass). Ha a stencilpuffernek s o e e darab bits´ ıkja van. A rendszer a referencia´rt´ket a func f¨ggv´ny szerint e e u e ¨sszehasonl´ o ıtja a stencilpufferben t´rolt ´rt´kkel. t´bl´zat. GLuint mask ). a t´bl´zatban val a fenti bitenk´nti AND m˝velet eredm´ny´t jel¨li. a a u e e a zpass-al megadottat pedig akkor. a u e a u a zfail -el megadottat akkor. a u e e e a vagy van de azon is t´ljutott. ha a stencilvizsg´laton t´ljut. Alap´rtelmez´s szerint fail = zfail = zpass = GL KEEP. ha van stencilpuffer. referencia´rt´ket (ref ) a a a o ıt´ u e e e ´s maszkot (mask ) ´ll´ e a ıtja be.3. o ıt´ void glStencilFunc (GLenum func. a a e e e e e o ıt´ u e m´dos´ ast pedig a glStencilOp() paranccsal adhatjuk meg. GLenum zfail.11. de annak csak azokat a bitjeit veszi a e e figyelembe. Az alfa-vizsg´lathoz haszn´lhat´ ¨sszehasonl´ o f¨ggv´nyek a a a a oo ıt´ u e func GL NEVER GL ALWAYS GL LESS GL LEQUAL GL EQUAL GL GEQUAL GL GREATER GL NOTEQUAL hat´sa a soha nem engedi tov´bb a fragmentumot a mindig tov´bbengedi a fragmentumot a tov´bbengedi ha alf a < ref a tov´bbengedi ha alf a ≤ ref a tov´bbengedi ha alf a = ref a tov´bbengedi ha alf a ≥ ref a tov´bbengedi ha alf a > ref a tov´bbengedi ha alf a = ref a 11. A fail. u e e 84 . a a a a e u e e o Alap´rtelmez´s szerint func = GL ALWAYS. e e e a a Inkrement´l´s ´s dekrement´l´s ut´n a rendszer a kapott ´rt´ket a [0. ha a stencilvizsg´laton t´ljut ´s nincs m´lys´gvizsg´lat. e e e void glStencilOp (GLenum fail. ahol s a stencilpuffer bit/pixel m´rete. A referencia´rt´ket ´s az ¨sszehasonl´ o f¨ggv´nyt a glStencilFunc(). Seg´ eg´vel azt adhatjuk meg. A stencilvizsg´latn´l haszn´lt ¨sszehasonl´ o f¨ggv´nyt (func). hogy a rendszer hogyan m´dos´ ıts´ e o ıtsa a stencilpuffert amikor a fragmentum tov´bbmegy vagy fennakad a vizsg´laton. akkor a rendszer az ¨sszehasonl´ as el˝tt a stencilpufferbeli ´rt´ket o ıt´ o e e ´s a mask s darab kisebb helyi´rt´k˝ bitj´t logikai ´s (AND) m˝veletbe hozza ´s ennek e e e u e e u e eredm´ny´n v´gzi el az ¨sszehasonl´ ast. 2s − 1] interaa e aa a e e vallumra lev´gja. egy´bk´nt a e e e a fragmentumok ezen a ponton mindig t´ljutnak. t´bl´zat szerintiek lehetnek. Stencilvizsg´lat a A stencilvizsg´latokat csak akkor hajtja v´gre a rendszer.

A stencilvizsg´latokkal kapcsolatos be´ll´ asokat a 11. hogy a k´perny˝ tetsz˝leges alak´ a a e o o u ter¨let´t lemaszkoljuk. A rajzol´s sor´n ne v´ltoztassuk a stencils´ e e a a a ıkok tartalm´t! a 85 . K¨zvetlen¨l nem lehet a stencilpufferbe rajzolni. ´s az ¨sszehasonl´ o e e e o ıt´ f¨ggv´nyt olyanra. a ıt´ • a sz´ • a sz´ ınmaszkot ´ll´ a ıtsuk 0-ra (vagy GL ZERO). hogy a fragmentum akkor jusson t´l. t´bl´zat. A stencilvizsg´lathoz haszn´lhat´ ¨sszehasonl´ o f¨ggv´nyek a a a a oo ıt´ u e func GL NEVER GL ALWAYS GL LESS GL LEQUAL GL EQUAL GL GEQUAL GL GREATER GL NOTEQUAL hat´sa a soha nem engedi tov´bb a fragmentumot a mindig tov´bbengedi a fragmentumot a tov´bbengedi ha ref < val a tov´bbengedi ha ref ≤ val a tov´bbengedi ha ref = val a tov´bbengedi ha ref ≥ val a tov´bbengedi ha ref > val a tov´bbengedi ha ref = val a 11.3. hogy tartalma v´ltozzon. Ehhez el˝bb u e u o t¨lts¨k fel a stencilpuffert 0-val ´s rajzoljuk meg a k´ ant alakot a stencilpufferbe 1 o u e ıv´ ´rt´kkel. e u A stencilvizsg´lat leggyakoribb alkalmaz´sa. azaz nem engedj¨k.11. ha nem akarjuk. t´bl´zatbeli param´terekkel a a ıt´ a a e kiadott glGetIntegerv() paranccsal k´rdezhetj¨k le.4. a a • a m´lys´gpuffert tegy¨k csak olvashat´v´. t´bl´zat. e e u o a a A stencilter¨let megad´sa ut´n ´ll´ u a a a ıtsuk a referencia´rt´keket 1-re. de a k¨vetkez˝ elj´r´ssal k¨zvee e o u o o aa o tett m´don ugyanazt az eredm´nyt kapjuk: o e ınpufferbe zpass = GL REPLACE be´ll´ as mellett rajzoljunk. a glDisable(GL STENCIL TEST) paranccsal letilthatjuk.2. ha a stencils´ ´rt´ke megegyezik u e u ık e e a referencia´rt´kkel. hogy enged´lyezette u e e. hogy oda rajzoljon a rendszer. hogy a sz´ ınpufferben ne t¨rt´njen o e v´ltoz´s. a e u glIsEnabled(GL STENCIL TEST) paranccsal pedig lek´rdezhetj¨k. A glStencilOp() f¨ggv´ny param´tereinek lehets´ges ´rt´kei a a u e e e e e ´rt´k e e GL KEEP GL ZERO GL REPLACE GL INCR GL DECR GL INVERT hat´sa a megtartja a kurrens ´rt´ket e e 0-val fel¨l´ a kurrens ´rt´ket u ırja e e a referencia´rt´kkel ´ fel¨l e e ırja u eggyel n¨veli a kurrens ´rt´ket o e e eggyel cs¨kkenti a kurrens ´rt´ket o e e bitenk´nt invert´lja a kurrens ´rt´ket e a e e A stencilvizsg´latot a a glEnable(GL STENCIL TEST) paranccsal enged´lyezhetj¨k.

a a o ık a Amennyiben nem akarjuk a belsej´t l´tni ezt konvex objektum eset´n el´rhetj¨k ugy. M´lys´gvizsg´lat e e a Az OpenGL a m´lys´gpufferben minden pixelhez t´rolja a m´lys´get. Igy e u ´ o e e a oa k´p´t kapjuk. mind a m´lys´gpuffert fel¨l´ a rende e u ırja ´ v´g¨l az alakzatok l´that´s´g szerinti szer az uj fragmentum megfelel˝ ´rt´keivel. Ennek ´rdek´ben ın˝ u u e e • t¨r¨lj¨k a stencilpuffert 0-val. a glDisable(GL DEPTH TEST) paranccsal lehet letiltani. ami a pixelen e e a e e ´br´zolt objektumoknak a n´z˝pontt´l val´ t´vols´g´t fejezi ki. Alap´rtelmez´s szerint a m´lys´gpuffer haszn´lata nem ena e e e e e a ged´lyezett. All´ o o uo o o o ıt´ u e ugy. Ha az alakzatok k´p´t pontmint´val akarjuk megrajo e a e e a zolni. Eg´sz pontosan: ez a a e o o o a a a e a m´lys´g a k´pmez˝koordin´ta-rendszerbeli z ´rt´k. e 86 . akkor mind a sz´ o e ınpuffert. melyeket nem kell lefedni a a e o e e ´ ıtsuk be az ¨sszehasonl´ o f¨ggv´nyt 0 lesz.11. a lefedend˝knek pedig 0-t´l k¨l¨nb¨z˝. ´s rajzoljunk a ´ a e e e lefed´s sz´ evel egy akkora poligont. hogy a m´lys´gpuffer e o e e haszn´lata enged´lyezett-e. o ıt´ u e hogy minden fragmentum t´ljusson. a a ram´terek e A stencil-vizsg´latok be´ll´ asainak lek´rdez´s´hez haszn´lhat´ paa a ıt´ e ee a o a visszaadott ´rt´k e e FUNC stencil f¨ggv´ny u e REF stencil referencia´rt´k e e VALUE MASK stencil maszk FAIL fail f¨ggv´ny u e PASS DEPTH FAIL zfail f¨ggv´ny u e PASS DEPTH PASS zpass f¨ggv´ny u e param´ter e GL STENCIL GL STENCIL GL STENCIL GL STENCIL GL STENCIL GL STENCIL Ha egy z´rt objektumot valamely v´g´s´ elmetsz. Ha az uj fragmentum z ´rt´ke kisebb a oa a a a a ´ e e mint a megfelel˝ pixel´. e 11. hogy csak akkor engedje ´t a fragmentumot. ´ o ırjuk be a mint´t a stencilpufferbe (a mint´val t¨r¨lj¨k). ´s ´ll´ e u a e a ıtsuk az ¨sszehasonl´ o f¨ggv´nyt olyanra. A m´lys´gpuffert leggyakrabban e e e o a e e e e a l´that´s´g szerinti ´br´zol´shoz haszn´ljuk. e a e e u ´ hogy egy konstans sz´ u fel¨lettel befedj¨k. ha a stencil´rt´k nem 0. akkor belel´thatunk a testbe. e ın´ e e o Kit¨lt´s mint´val (stippling). t´bl´zat. oo u • enged´lyezz¨k a stencilvizsg´latot. A m´lys´gpuffer haszn´lat´t a glEnable(GL DEPTH TEST) parance e e e a a csal lehet enged´lyezni. a e glIsEnabled(GL DEPTH TEST) paranccsal pedig lek´rdezhet˝. amely az eg´sz k´pmez˝t lefedi. kit¨lteni. a A rajzol´s ut´n a k´pmez˝ azon pixeleinek stencil´rt´ke.4. majd a megfelel˝ a a oo u o felt´telek mellett rajzoljuk meg az alakzatot. oe e e a a • rajzoljuk meg a z´rt konvex alakzatot. u • invert´ljuk a stencils´ a ıkok megfelel˝ ´rt´k´t minden ´tengedett fragmentumn´l.4.

5.Ne feledj¨k. fel¨l´ u e e u ırjuk a fragmentum sz´ evel a piın´ ´ atsz´ objektumok rajzol´sakor. 11. ha a z koordin´t´ja ´s a megfelel˝ pixel a u aa e o m´lys´ge a func f¨ggv´nnyel el˝´ kapcsolatban van. dithering. hogy a k´p minden ujrarajzol´sa el˝tt t¨r¨lni kell a m´lys´gpuffert. Sz´ ınkombin´l´s. alfa. t´bl´zat. de minden ıt´ e ıt´ o e e e o esetben a fragmentum ´s a pixelhez t´rolt (ha t´rolja a rendszer) alfa ´rt´kek alapj´n e a a e e a t¨rt´nik. ami egyben az alap´rtelmez´s is. a a a o e e e o akkor a dithering hat´st alkalmazhatjuk. bz a pufferben t´rolt m´lys´get a a e e e a e e jel¨li. a a o ınek sz´m´t a felbont´s cs¨kkent´se r´v´n n¨velni akarjuk. o e 87 . f z a fragmentum m´lys´g´t. ´ o o a a a e e u akkor annak sz´ et a megfelel˝ pixel sz´ evel t¨bbf´lek´ppen kapcsolatba hozhatjuk. Alap´rtelmez´s: func = GL LESS. Sz´ ınkombin´l´s aa A sz´ ınkombin´l´s az uj fragmentum ´s a neki megfelel˝ pixelhez t´rolt R. A vegy´ es t¨bbf´lek´ppen v´grehajthat´. vagy a k´phat´r kisim´ asakor vegy´ xel sz´ et. vagyis u e ´ a o oo e e fel kell t¨lteni azzal a t´vols´ggal.5. G. a void glDepthFunc (GLenum func). A m´lys´gek ¨sszehasonl´ as´hoz haszn´lhat´ f¨ggv´nyek a a e e o ıt´ a a o u e func GL NEVER GL ALWAYS GL LESS GL LEQUAL GL EQUAL GL GEQUAL GL GREATER GL NOTEQUAL hat´sa a soha nem engedi tov´bb a fragmentumot a mindig tov´bbengedi a fragmentumot a tov´bbengedi ha f z < bz a tov´bbengedi ha f z ≤ bz a tov´bbengedi ha f z = bz a tov´bbengedi ha f z ≥ bz a tov´bbengedi ha f z > bz a tov´bbengedi ha f z = bz a A glGetIntegerv() parancsot a GL DEPTH FUNC param´terrel kiadva a kurrens e m´lys´g¨sszehasonl´ as f¨ggv´ny´t kapjuk meg.1. o e e 11.5. A m´lys´gek ¨sszehasonl´ as´ra haszn´lt f¨ggv´nyt adhatjuk meg vele. Ezen a e e o ıt´ a a u e vizsg´laton akkor jut t´l egy fragmentum.5. t´bl´zat mutatja. stencil. szakaszt). e e o ıt´ u e e 11. B ´s alfa aa ´ e o a e komponensek vegy´ es´t jelenti. logikai m˝ veletek aa u Ha egy uj fragmentum az el˝z˝ vizsg´latokon – kiv´g´s. V´g¨l sz´ a e u ınindex m´dban tetsz˝leges bitenk´nti o o e logikai m˝veletet hajthatunk v´gre a sz´ u e ıneken.5. Atl´ o ın´ a e a ıt´ ıthetj¨k u a k´t sz´ Ha az ´br´zolhat´ sz´ e ınt. A func param´ter lehets´ges ´rt´keit e e u e oırt e e e e a 11. Legın´ o ın´ o e e egyszer˝bb esetben. m´lys´g – t´ljut. amelyn´l t´volabbi fragmentumot nem vesz¨nk figyeo a a e a u lembe (l´sd a 10.

Vagyis a megjelen´ es sor´n a rajzol´s pixele a k´perny˝ pixeleinek egy e ıt´ a a e o n´gyzetes t¨mbje lesz. Ha azona a a e e ban k¨l¨nb¨z˝ r´tegekre k´sz¨lt rajzok kompoz´ ojak´nt ´ll´ uo o o e e u ıci´ e a ıtunk el˝ egy k´pet. azaz cs¨kken a felbont´s. amikor a sz¨rke k¨l¨nb¨z˝ ´rnyalatait k¨zel´ az el˝bb e e ıt´ e e u uo o o a o ıtik o v´zolt technik´val.5. A GL LOGIC OP MODE param´terrel e e e kiadott glGetIntegerv() paranccsal a kurrens logikai m˝velet k´rdezhet˝ le. e e e Ez a technika mind sz´ ınindex. Eg´sz o o e a e e e e sz´mnak c´lszer˝ tekinteni a sz´ a e u ınindexeket pl. sz´ o ır´ o ınindex m´dban m´g bitenk´nti o e e logikai m˝veletek v´grehajt´s´ra is lehet˝s´g van. melyek uj sz´ hat´s´t a ıt¨ ´ ın aa eredm´nyezik. de ezek a pixelt¨mb¨k uj. hogy enged´lyezett-e. Uj sz´ ugy ´ll´ a a a aa o u ın ´ a ıthat´ el˝. Sz´ ınindex m´dban az uj fragmentum f i sz´ o ´ ınindex´n ´s a neki megfelel˝ pixel pi e e o sz´ ınindex´n v´grehajtand´ bitenk´nti logikai m˝velet kiv´laszt´s´ra szolg´l. illetve glDisae u ble(GL DITHER) parancsokkal.2. Az opcode e e o e u a aa a param´ter lehets´ges ´rt´keit ´s azok jelent´s´t a 11.11.5. az eredeti pie o o a o o ´ xeleken el nem ´rhet˝ sz´ uek lesznek. e o u void glLogicOp (GLenum opcode). t´bl´zat mutatja. hogy a rajzol´st a k¨l¨nb¨z˝ bits´ u o o o ır´ a a uo o o ıkokra korl´tozzuk. ´rnyal´sn´l ´s ditheringn´l. Ezek a m˝veletek k¨l¨n¨sen hasznosak ´s gyorsan v´grehajthat´k a e u uo o e e o bitt¨mb¨k gyors mozgat´s´ra specializ´lt (bitBlt – bit block transfer) hardver˝ grafikus o o aa a u berendez´sek eset´n. u e o 88 . az OpenGL-b˝l csak eno ıt´ u o o ged´lyezhetj¨k. a glDisable(GL LOGIC OP) paranccsal letilthatjuk ´s a e u glIsEnabled(GL LOGIC OP) paranccsal lek´rdezhetj¨k. Ilyen technik´t haszn´lnak a fekete-feh´r ujs´gok e o ın˝ a a e ´ a a f´nyk´pek megjelen´ es´n´l. a c´lszer˝ a sz´ e u ınindexeket bitsorozatnak tekinteni. Alap´rtelmez´s e e e e e ee a a e e szerint opcode = GL COPY. hogy az eredetileg o o haszn´lhat´ sz´ a o ınekkel kisz´ ınezett pixelmint´kat jelen´ unk meg. Alap´rtelmez´s szerint a dithering nem enged´lyezett.3. mind RGBA m´dban haszn´lhat´. RGBA m´dban o a o o ez az utols´ m˝velet a sz´ o u ınpufferbe val´ be´ as el˝tt. u e aa oe 11. a a A dithering megval´s´ asa teljesen hardverf¨gg˝. e u e e Alap´rtelmez´s szerint nem enged´lyezett. A logikai m˝veletek v´grehajt´s´t a glEnable(GL LOGIC OP) paranccu e aa e sal enged´lyezhetj¨k.6. illetve letilthatjuk a glEnable(GL DITHER). Dithering A grafikus hardverek egy r´sze lehet˝s´get biztos´ arra. hogy a megjelen´ e oe ıt ıthet˝ sz´ o ınek ´ sz´m´t a felbont´s rov´s´ra n¨velj¨k. A logikai m˝veleteket az uj fragmentum ´s a megfelel˝ pixel sz´ u ´ e o ınindex´nek bitsorozat´n e a hajthatjuk v´gre. Az OpenGL-ben a glLogicOp() parancs seg´ eg´vel v´laszthatjuk e e ıts´ e a ki a v´grehajtand´ logikai m˝veletet. vagyis o e k¨l¨nb¨z˝ ´ asi maszkot haszn´lunk. Logikai m˝ veletek u Sz´ ınindex m´dban az indexek tekinthet˝k eg´sz sz´mk´nt ´s bitsorozatk´nt is.

11.6. t´bl´zat. A glLogicOp() f¨ggv´nnyel el˝´ a a u e oırhat´ bitenk´nti logikai m˝veletek o e u opcode GL CLEAR GL COPY GL NOOP GL SET GL COPY INVERTED GL INVERT GL AND REVERSE GL OR REVERSE GL AND GL OR GL NAND GL NOR GL XOR GL EQUIV GL AND INVERTED GL OR INVERTED hat´sa a 0 fi pi 1 ¬f i ¬pi f i ∧ ¬pi f i ∨ ¬pi f i ∧ pi f i ∨ pi ¬(f i ∧ pi) ¬(f i ∨ pi) f i XOR pi ¬(f i XOR pi) ¬f i ∧ pi ¬f i ∨ pi 89 .

ilyenkor csak a megfelel˝ adatokat t´rolja a rendszer a kor´bban l´trehozott e o a a e pufferbe. A glRenderMode() parancs ´ltal visszaadott ´rt´knek aka e e kor van jelent´se. ha a kurrens m˝k¨d´si m´d (amir˝l ´tv´ltunk) vagy GL SELECT. e u o e o o a a vagy GL FEEDBACK. Erre szolg´l a visszacsatol´si mechanizmus. a a a Ugyancsak fontos. magyarul r´mutat´ azonos´ asnak nevezz¨k. e u ¨ o Kiv´laszt´si ´s visszacsatol´si uzemm´dban a rajzol´si utas´ asoknak nincs l´that´ a a e a ¨ o a ıt´ a o eredm´nye. visszacsatol´s a a a Interakt´ grafikus programok ´ asakor gyakran van sz¨ks´g arra.12. visszacsatol´si uzemm´dn´l pedig a visszacsatol´si pufferbe tett adatok a a a ¨ o a a sz´ma. Ezt a grafikus ina o o u a ıts´ e putot angolul pick inputnak. A negat´ visszaadott ´rt´k azt jelzi. GL SELECT ´s GL FEEDBACK o e e e ´rt´knek megfelel˝en. vagy plotter). kiv´laszt´si puffert. e o u e u u o e o a a ıt´ a GLint glRenderMode (GLenum mode). fejezet Kiv´laszt´s. A megjelen´ es. a visszacsatol´si uzemm´d el˝tt a glFeedbackBufa ıt´ o a ¨ o o fer() parancsot kell kiadni. kiv´laszt´s ´s visszacsatol´si uzemm´dok k¨z¨tti v´laszt´st teszi leıt´ a a e a ¨ o o o a a het˝v´ a mode param´ternek adott GL RENDER. 90 . hogy a megfelel˝ puffer (kiv´laszt´si. A rendszer a megadott uzemm´dban marad a k¨vetkez˝. a u A GL RENDER MODE param´terrel kiadott glGetIntegerv() paranccsal e lek´rdezhetj¨k a kurrens uzemm´dot. Kiv´laszt´s a a A r´mutat´ azonos´ as megval´s´ asa ´rdek´ben: a o ıt´ o ıt´ e e e a a a a e e • l´tre kell hozni az un. amiben a v´laszt´s eredm´ny´t kapjuk vissza. CAD rende e a o o e a szer. Ezt a funkci´t a o ıt´ u o t´mogatja az OpenGL kiv´laszt´si mechanizmusa. hogy az OpenGL felhaszn´l´s´val meg´ alkalmaz´saink fut´si aa a ırt a a eredm´ny´t m´s rendszer vagy eszk¨z bemen˝ adatk´nt haszn´lhassa (pl. A kiv´laszt´si uzemm´d e aa a a ¨ o be´ll´ asa el˝tt a glSelectBuffer(). hogy a k´perny˝n ıv ır´ u e e o l´that´ objektumok k¨z¨l v´lasszunk a grafikus kurzor seg´ eg´vel.1. a a Mindk´t funkci´hoz sz¨ks´g¨nk van az OpenGL m˝k¨d´si m´dj´nak be´ll´ as´ra. 12. m´s e e o ¨ o o o a param´terrel kiadott glRenderMode() parancs kiad´s´ig. Kiv´laszt´si uzemm´db´l val´ kil´p´s eset´n a visszaadott ´rt´k a a a ¨ o o o e e e e e tal´latok sz´ma. vagy a ıv e e o a a visszacsatol´si) t´lcsordult.

hogy a v´laszthat´ k´pelemeket azonos´ oval kell e ´ ´ a o e ıt´ ell´tni. a e a a ¨ o • olyan speci´lis vet´ esi m´trixot kell megadni. Ures veremre kiadott glPoe o e e o ıt´ pName() parancs a GL STACK UNDERFLOW hib´t eredm´nyezi. A name azonos´ ot a n´vverem legfels˝ szintj´re teszi. ıt´ a e e void glSelectBuffer (GLsizei size. e ¨ mint pl. Az ıt´ a a e u ujonnan l´trehozott k´pelem azonos´ oja a n´vverem legfels˝ szintj´n t´rolt azonos´ o lesz. A n´vverem m´lys´ge impleıt´ e o e e e e ment´ci´f¨gg˝. A GL MAX NAME STACK DEPTH param´terrel kiaa ou o a e dott glGetIntegerv() paranccsal kaphatjuk meg a pontos ´rt´ket. a glInitNames() parancs kiad´sa ut´n. A kiv´lasztott k´pelemek adatainak visszaad´s´ra szolg´l´ puffer megad´sa. akkor a GL INVALID OPERATION a a hiba keletkezik. miel˝tt a glLoadName() parancsot u o kiadn´nk. Ezt a parancsot mindig ki kell adnunk. A megengedettn´l e e e t¨bb szint haszn´lat´ra tett k´ erlet a GL STACK OVERFLOW hib´t eredm´nyezi. A rendszer egy a oa e e e ıt´ a veremszerkezetet tart karban ezen azonos´ ok sz´m´ra. GLuint *buffer ). Ezt n´vveremnek nevezz¨k. melyeket legal´bb r´szben tartalmazott a speci´lis e ıt´ a a e a vet´ esi m´trixszal megadott t´rr´sz. A n´vvermet t¨rli. A buffer a e aa ao a param´ter a size m´ret˝ el˝jel n´lk¨li eg´szekb˝l ´ll´ puffer c´ e e u o e u e o a o ıme. e o void glPushName (GLuint name). o a a o a e e A v´laszthat´s´g ´rdek´ben a k´pelemeket azonos´ oval kell ell´tni. A n´vverem legfels˝ szintj´n l´v˝ ´rt´ket a name ´rt´kkel fel¨l´ e o e e oe e e e u ırja. a e void glLoadName (GLuint name). a e a ¨ o a a • vissza kell t´rni rajzol´si uzemm´dra. amivel a kiv´laszt´si pufferben megkapjuk azon k´pelemek azonos´ oj´t. ures verem eset´n egy tetsz˝leges ´rt´ket ue e e ¨ e o e e tegy¨nk a verembe a glPushName() paranccsal. miel˝tt kiv´laszt´si m´dra ´tt´rn´nk. a 91 . ´ e e ıt´ e o e a ıt´ void glInitNames (void). Ennek elker¨l´se ´rdek´ben. ıci´ o e e • a k´pet ujra kell rajzolni ugy. o a a ıs´ a e void glPopName (void).• ´t kell t´rni kiv´laszt´si uzemm´dra. de legal´bb 64. amelyik csak az adott poz´ o (praka ıt´ a ıci´ tikusan a grafikus kurzor poz´ oja) kis k¨rnyezet´t k´pezi le. Ha a n´vverem ures. ¨ A n´vverem legfels˝ szintj´n l´v˝ azonos´ ot eldobja.

viewport). amivel megkapjuk a pufferbe ´ adatok e a ¨ o ırt sz´m´t. GLdouble y. m´s m˝k¨d´si m´dban megh´ asa hat´stalan. GLdouble width. • ´t kell t´rni visszacsatol´si uzemm´dra. Visszacsatol´s a A visszacsatol´s megval´s´ asa nagyon hasonl´ a kiv´laszt´s´hoz. A type param´ter azt specifik´lja.void gluPickMatrix (GLdouble x. paranccsal kaphatunk meg. a sz´less´g ´s magass´g ´ltal kijel¨lt tartom´ny a a ıci´ e e e a a o a pedig a r´mutat´ azonos´ o eszk¨z ´rz´kenys´gek´nt foghat´ fel. o e a u o e o ıv´ a A marker a o e o e e o a GL PASS THROUGH TOKEN konstansb´l ´s a token lebeg˝pontos ´rt´kb˝l ´ll. a e a ¨ o ´ e • ujra kell rajzolni a k´pet. hogy e a a rendszer milyen adatokat adjon vissza a cs´cspontokr´l. u o e e e t´bl´zat tartalmazza.1. o a ¨ o e e void glPassThrough (GLfloat token). Ha visszacsatol´si m´dban h´ a o ıvjuk meg. y) k¨z´ppont´. a a • a pufferben visszakapott adatokat kiolvashatjuk. A glBegin() ´s glEnd() k¨z¨tti kiad´sa a GL INVALID OPERATION hib´t eredm´nyezi. A k´pmez˝-koordin´t´kban megaa o e e o aa dott (x. 12. amit a e o a glGetIntegerv(GL VIEWPORT.2. width ıt´ a e e o o e u sz´less´g˝ ´s height magass´g´ ter¨let´re korl´tozza a rajzol´st. 4 RGBA m´dn´l. A folyamat az al´bbi a o ıt´ o a ae a l´p´sekb˝l ´ll: e e o a • l´tre kell hozni az un. y) ´ltal´ban a kurzor poz´ oja. GLfloat *buffer ). Azt a vet´ esi m´trixot hozza l´tre. GLdouble height. akkor egy markert tesz a visszaadott adatok k¨z´. e o o a a e 92 . ´s ezzel a m´trixszal e e u e a u u e a a e a megszorozza a kurrens m´trixverem legfels˝ elem´t. A lehets´ges ´rt´keket a 12. visszacsatol´si puffert. amely a k´pmez˝ (x. feldolgozhatjuk. GLenum type. GLint viewport[4] ). A t´bl´zatban k ´rt´ke 1 sz´ a a a a e e ınindexm´d eset´n. A o e o a glFeedbackBuffer() parancsot ki kell adni miel˝tt visszacsatol´si uzemm´dba l´pn´nk. size a pufferben a ¨ o a aa e t´rolhat´ adatok sz´ma. A viewport[] param´ter a o ıt´ o e e e e o e a kurrens k´pmez˝ hat´rait tartalmazza. void glFeedbackBuffer (GLsizei size. • vissza kell t´rni rajzol´si uzemm´dra. buffer a t´rter¨let c´ a o a a u ıme. amiben a k´pelemek adatait majd e a e megkapjuk. A visszacsatol´si uzemm´d adatainak t´rol´s´ra hoz l´tre egy puffert.

1. y. z x. y. y.12. z sz´ ın – – k k k text´ra u – – – 4 4 ¨sszes o 2 3 3+k 7+k 8+k 12. A visszaadand´ adatok t´ a a o ıpusa type GL 2D GL 3D GL 3D COLOR GL 3D COLOR TEXTURE GL 4D COLOR TEXTURE koordin´t´k aa k x. z x. z x. t´bl´zat. y. t´bl´zat.2. A visszaadott k´dok a a o alapelem t´ ıpusa pont szakasz poligon bitt´rk´p e e pixelt¨mb o megjegyz´s e k´d o GL POINT TOKEN GL LINE TOKEN GL LINE RESET TOKEN GL POLYGON TOKEN GL BITMAP TOKEN GL DRAW PIXEL TOKEN GL COPY PIXEL TOKEN GL PASS THROUGH TOKEN adat cs´cspont u k´t cs´cspont e u cs´cspontok u cs´cspont u cs´cspont u lebeg˝pontos sz´m o a 93 .

3 vagy 4 adat tartozhat minden ınt. ism´telje a text´r´t (tegye egym´s mell´). hiszen a mint´k ´ltal´ban ´les e o u a a a e kont´r´ak. Ennek a probl´m´knak t¨bbf´le megold´s´t k´ alja a a e a o e a a ın´ 94 . un. vagy 3 dimenzi´s t¨mbj´nek tekinthet˝. Az egyes texelekhez t´rolt adat k´pviselhet o o e o a e sz´ f´nyer˝ss´get vagy sz´ ´s alfa ´rt´ket. mintha a k¨rnyezet t¨kr¨z˝dne az objektumon.. ugyanis a e e e e e ee aa u text´r´t a modellt´rben rendelj¨k hozz´ a geometriai alakzathoz. e o e a e e e a o e a A text´r´kat t¨bbnyire k´tdimenzi´snak (s´ ua o e o ıkbelinek) gondoljuk. de ugy is. Ezzel szemben. perspekt´ torz´ as. fejezet Text´ r´k u a A val´szer˝ k´pek l´trehoz´s´nak egy fontos eszk¨ze a text´ralek´pez´s. A t´glalap alak´ text´r´kat azonban tetsz˝leges alak´ poligonokra. t´l szab´lyosak lenn´nek. vagy m´s jellemz˝it szeml´ltesse. 1. Ennek ´rdek´ben az objektumok l´trehoz´sakor e ıt´ a o e e e a a cs´cspontok geometriai koordin´t´i mellett a text´rakoordin´t´kat is meg kell adni. hogy az egys´gn´gyzeten k´ uli koore e ıv¨ din´t´kat hogy ´rtelmezze a rendszer. A r´helyez´s mik´ntj´t a modellt´rben kell megadni. Az er˝sen ragyog´ fel¨let˝ objektumok ugy is a o e o o u u ´ text´r´zhat´k. pl. vagy ellenkez˝leg. Ezen mint´k geomea ın˝ u u o a a triai le´ asa ´s geometriai objektumk´nt val´ kezel´se (amit az eddig t´rgyalt eszk¨z¨k ır´ e e o e a o o lehet˝v´ tenn´nek) azonban rendk´ ul id˝ig´nyes ´s nagy t´rol´kapacit´st lek¨t˝ felao e e ıv¨ o e e a o a oo dat lenne. hogy a text´ra az objektum szintvoe ao ´ u nalait. u aa u aa Egy k´tdimenzi´s text´ra koordin´t´i a [0. de el˝ kell ´ a a o ırnunk. A val´s´gban o u e e aa o u e e oa a t´rgyak nem egysz´ uek. A t´rbelis´g ´rz´keltet´s´nek fokoz´s´ra is alkalmas a text´ra. egy t´glafal t´volabb e e u a ıt´ o o ıv ıt´ e a l´v˝ t´gl´i kisebbek lesznek a k´pen. ha egy val´di objektum fel¨let´nek uu u a e o u e k´p´t (mint´zat´t) vissz¨k fel a sz´m´ og´ppel el˝´ll´ e e a a u a ıt´ e oa ıtott objektumra. 1.] × [0. mely sorokba ´s oszlopokba rendezett u e u u e text´raelemekb˝l. 2. pl. A text´r´kat lek´pezhetj¨k ugy. 2. hogy a transzform´ci´kon o a o ´tesett text´ra t¨bb eleme l´tszik egy fragmentumon. azonban a text´r´k ua lehetnek egy.13. hogy azt a hat´st kelts´k. poligonh´l´kra kell e u ua o u ao r´helyezni. ´ a text´r´kra is hata a e e e e ıgy ua nak a modell. ´s a t´gl´k szemk¨zti ´lei nem lesznek p´rhuzamosak. hanem a fel¨let¨k¨n mint´k vannak. aa e e ua a e A text´ra hat´s´nak ´rv´nyes´ ese a k´pmez˝koordin´ta-rendszer´ben az ´br´zoland´ u aa e e ıt´ e o a e a a o objektum fragment´l´sa ut´n t¨rt´nik. azaz 1. e o u aa e e u a Amikor a cs´cspontokhoz hozz´rendelj¨k a text´ra pontjait ezen a ter¨leten k´ ul es˝ u a u u u ıv¨ o koordin´tap´rt is megadhatunk. hogy azok a o ua e u ´ lefedj´k a poligonokat (poligonh´l´kat). ´ aa a o e Igy el˝fordulhat.] egys´gn´gyzeten bel¨l v´ltoznak.vagy h´romdimenzi´sak is. ua o a e o u o o A text´ra geometriailag egy t´glalap alak´ ter¨let. r¨viden texelekb˝l (texture element) ´p¨l fel. Mindamellett nem is lenne el´g val´szer˝..´s vet´ esi transzform´ci´k. e o e ın e e e egyes texelhez. t¨bb fragmena u o a o o tumon l´tszik egyetlen texel. A text´ra teh´t adatok u o o o e u u a 1. sokkal ´letszer˝bb e u lesz a k´p. ´ a fel¨leti mint´n is ua e u a ıgy u a ´rv´nyes¨l a centr´lis vet´ esb˝l ered˝.

hogy a text´r´t hogyan alkalmazza a rendszer a fragmentumokra (sz˝r˝ megad´sa). Az ilyen helyzeteket azonban lehet˝s´g szerint ker¨lj¨k el! oe u u 13. el˝´ u u ırja ın´ a a a oırhatjuk. Megadhatjuk. majd az els˝ hall´sra o e u o e o u aa o a kev´sb´ k´zenfekv˝ egy. a rendszer mindig a legnagyobb dimenzi´j´t veszi figyeu e e e ou lembe. e e e o e a o ua e 95 . mintha egy matric´t ragasztan´nk r´). hogy a cs´cspontok geometriai ua o ´ u koordin´t´i mellett megadjuk a text´rakoordin´t´it is. ako a a u e e o ua a a kor c´lszer˝ text´raobjektumokat l´trehozni. sz˝r´si m˝veleteken kereszt¨l. Ha t¨bb text´r´t felv´ltva haszn´lunk. Ezek a ao a a o ue u u m˝veletek rendk´ ul sz´m´ asig´nyesek. ´s ezek haszn´lat´t ´ltal´ban hardveres vagy szoftveres gyors´ ok seg´ e a a a a ıt´ ıtik. hogy a text´r´val m´dos´ ua o ıtsa (pontosabban sk´l´zza) a fragmentum sz´ et. illetve glDisau e e e e a a ble() parancsoknak a GL TEXTURE 1D.1. melyek egy-egy text´r´t (esetleg t¨bb fele u u e ua o bont´sban) tartalmaznak. 2. Az enged´lyez´s. illetve o aa e 3 dimenzi´s text´ralek´pez´st enged´lyezhetj¨k vagy tilthatjuk le. e u e a ua ua • meg kell adni. ez´rt a fejlettebb grafikus munkahelyek hardu ıv¨ a ıt´ e e verb˝l t´mogatj´k a text´ralek´pez´st.rendszer.2. A text´ ralek´pez´s enged´lyez´se u e e e e Az objektumok text´r´zott megjelen´ es´hez a megrajzol´suk el˝tt enged´lyezni kell a ua ıt´ e a o e text´ralek´pez´st. A felhaszn´l´ ´ltal el˝´ aoa oırhat´. Text´r´zott poligonh´l´ megjelen´ es´hez m´g a legegyszer˝bb esetben is az al´bbi ua ao ıt´ e e u a l´p´seket kell megtenni: e e • enged´lyezni kell a text´ralek´pez´st. N´h´ny OpenGL implement´ci´ban text´raobjektumok muna e a a o u kacsoportj´t lehet l´trehozni. Ezekkel rendre az 1. aa u aa 13. hogy a text´ra hogyan hasson a megjelen´ o u ıtend˝ objektum o sz´ ere. a felhaszn´l´k ´ltal kiv´laszthat´ un. Ezeket a nagy hat´konys´g´ text´raobjektumokat rezidensıv¨ e e a u u nek nevezik. v´g¨l a fragmentum sz´ enek ´s egy konstans a ıt´ e ua a aa a e u ın´ e sz´ ınnek a text´raelemen alapul´ kever´s´t is el˝´ u o ee oırhatjuk. uo a • enged´lyezni kell a text´ralek´pez´st. Ha egyszerre t¨bb o u e e e u o text´ralek´pez´s is enged´lyezett.´s h´romdimenzi´s text´r´k´val foglalkozunk. e u e e • l´tre kell hozni egy text´raobjektumot ´s hozz´ kell rendelni egy text´r´t. e u e e • meg kell rajzolni a text´r´zand´ objektumokat ugy. a e o ua a e mint a csoporton k´ uliek´. illetve letilt´s a szok´sos glEnable(). hogy a megfelel˝ texel(ek) sz´ legyen a fragmentum sz´ (egysın´ o ıne ıne zer˝en fel¨l´ a fragmentum sz´ et. GL TEXTURE 2D vagy GL TEXTURE 3D szimbolikus konstansokkal val´ kiad´s´val lehets´ges. Text´ ra megad´sa u a El˝bb a term´szetesnek t˝n˝ k´tdimenzi´s text´ra megad´s´val. A csoporthoz tartoz´ text´r´k haszn´lata hat´konyabb. ami a megaa ın´ vil´g´ as ´s text´r´z´s hat´s´t kombin´lja.

GL LUMINANCE4 ALPHA4. GL ALPHA16. GL RED. GL GREEN. ilu aa e e e e e letve height param´terek ´rt´k´nek 2w +2b. e e u a a e ıpus´ ırj´ Jelent´s¨k megegyezik a glDrawPixels() parancs megfelel˝ param´tereinek jelent´s´vel.) o a a ua a a a Az internalFormat (bels˝ form´tum) param´terrel azt ´ o a e ırjuk el˝. A level param´tert akkor haszn´ljuk. GL RGBA12. GL INTENSITY16. LUMINANCE6 ALPHA2. GL RGBA4. GL INTENSITY4. GLenum format. RGBA2. hogy az OpenGL az implement´ci´ ´ltal t´mogatott form´tumok a a oa a a k¨z¨l az ehhez legk¨zelebb ´ll´ szerint t´rolja a texelekhez kapcsolt adatokat. GL LUMINANCE4. A width. GLenum type. szakaszban t´rgyaljuk. a a A format ´s type param´terek a text´raadatok form´tum´t ´s t´ at ´ ak le. 3. GLsizei width. A target param´ter ´rt´ke GL TEXTURE 2D vagy e o ua e e e e GL PROXY TEXTURE 2D lehet. hogy a piros ´s z¨ld sz´ 3-3 biten. a k´ket pedig 2 biten e o ınt e t´rolja a rendszer. GL RGB. A e e u e e e a a a border a text´ra hat´r´nak sz´less´g´t adja meg. ahol 0 ≤ h. pl. A text´r´k m´ret´nek maximuma implement´ci´f¨gg˝. LUMINANCE16. GLint border. GL RGB5. Ert´ke 1.7. egy´bk´nt a level param´ternek adjuk a 0 ´rt´ket. GL ALPHA4. GL RGB10. GL BLUE. GL RGB5 A1. GL RGB. illetve magass´g´t adj´k meg. GL LUMINANCE8. 2. Ezen konstansok jelent´s´t a text´raf¨ggv´nyek le´ as´n´l ismertetj¨k. RGBA16. A format param´ter a a o e ´rt´ke GL COLOR INDEX. illetve hat´rral 66 × 66 -nak kell lennie. ha a text´r´t e a ua t¨bb felbont´sban is t´rolni akarjuk. INTENSITY8. GLsizei height. esetleg f´nyer˝ss´get vagy e e o e ´ e sz´ oss´get haszn´lja a rendszer. eu o e ee Val´j´ban a text´raadatok ugyanolyan form´tum´ak.void glTexImage2D (GLenum target. GL RGBA8. GL RGB12. GL LUMINANCE ALPHA. amelyeket a glDrawPixels() is haszn´l. Csak az garant´lt. 4 vagy az al´bbi el˝re defini´lt szimboıner˝ e a a o a likus konstansok valamelyike lehet: GL GL GL GL GL GL GL GL GL GL ALPHA. hogy egy k´p texeo e leinek a le´ as´hoz az R. ez´rt a glPixelStorage*() ´s glPixelTransfer*() a a e e e parancsok ´ltal be´ll´ a a ıtott form´tumokat haszn´lja mindkett˝. GL INTENSITY12. 3. G. GL RGB16. a e a a o ıv´ a GL R3 G3 B2 konstanssal azt. a 96 . GL RGB8. A szimbolikus konstansokkal a texelekhez t´rolt a komponenseket ´s azok pontoss´g´ra vonatkoz´ k´ ans´gunkat adhatjuk meg. ´rt´ke vagy 0. GL LUMINANCE8 ALPHA8. GLint level. GL LUMINANCE12. illetve 2h +2b alak´nak kell lenni. illetve 4 ´rt´kek o o a e e e e rendre a GL LUMINANCE. const GLvoid *texels). LUMINANCE12 ALPHA4. GL RGB10 A2. mint a glDrawPixels() paoa u a u rancs ´ltal haszn´lt adatok´. LUMINANCE16 ALPHA16. illetve GL RGBA szimbolikus konstansoknak felelnek meg. K´tdimenzi´s text´r´t hoz l´tre. GL ALPHA12. GL R3 G3 B2. GL LUMINANCE ALPHA. e a e e e ua e e a ou o de legal´bb 64 × 64. GL RGB. GL LUMINANCE vagy GL LUMINANCE ALPHA lehet. e e GL ALPHA. GL INTENSITY. GL RGBA. 2.0 verzi´val val´ kompatibilit´s ´rdek´ben az 1. B. RGB4. GL LUMINANCE12 ALPHA12. vagy 1 lehet. ee u u e ır´ a a u Az OpenGL 1. o u o a o a A width ´s height param´terek a text´ra sz´less´g´t. A sz´ ır´ a ınkomponensek melyik´t. hogy a rendszer biztosan ´ is hajtja v´gre a parana ıgy e csot. GL ALPHA8. Ez nem jelenti azt. GLint internalFormat. w e e e e u eg´sz sz´mok ´s b a border ´rt´ke. vagyis a e e e GL STENCIL INDEX ´s GL DEPTH COMPONENT kiv´tel´vel azokat. GL RGBA. o a a e e e e e (A t¨bb felbont´sban t´rolt text´r´k haszn´lat´t a 13. LUMINANCE.

hogy a pixeleket nem a k´ppufferbe. u (Az OpenGL 1. teljes m´rt´kben implee e e ment´ci´f¨gg˝. e u void glCopyTexImage2D (GLenum target. a ou o A text´r´k sorai ´s oszlopai sz´m´nak (a hat´rt levonva) 2 hatv´ny´nak kell lenni. GLsizei height. A pixeleket a kurrens e o e o ua e o e ´ o (GL READ BUFFER) pufferb˝l kiolvassa ´s ugy dolgozza fel ˝ket. GLint widthout. Erre szolg´l a glCopyTexIe a o e o u a mage2D(). o aa u e ıv´ o e A visszaadott ´rt´k 0.A type param´ter pedig a GL BYTE. ua e a a a a a Ha egy olyan k´pb˝l szeretn´nk text´r´t l´trehozni. hogy melyik hat´konyabb. void *dataout). GL UNSIGNED INT. GL BITMAP vagy a t¨m¨r´ o o ıtett pixeladatok valamelyik´t. GLint heightin. e GL UNSIGNED SHORT. GLsizei width. o a u a e e A target param´ternek a GL TEXTURE 2D ´rt´ket kell adni. A glPixelTransfer*() be´ll´ asait ´s a u a a o a a a ıt´ e t¨bbi pixel´tviteli m˝veletet haszn´lja. A bels˝ o t´rol´si form´tumnak (internalFormat) hat´sa van a text´ram˝veletek v´grehajt´si a a a a u u e a sebess´g´re is. majd a dataout c´ ıv´ e u e aa ımen kezd˝d˝ mem´riater¨letre o o o u let´rolja.) a A k´ppuffer tartalm´b´l is l´trehozhat´ text´ra. GLint y. e border. GLenum typeout. GLint internalFormat. const void *datain. e o e ua e e a GLU f¨ggv´nyk¨nyvt´r gluScaleImage() f¨ggv´ny´t c´lszer˝ haszn´lni. mely a k´ppufferb˝l kiolvas egy t´glalap alak´ ter¨letet. GL INT. ha a f¨ggv´ny sikeresen v´grehajt´dott. GLint border ) A k´ppuffer adataib´l egy k´tdimenzi´s text´r´t hoz l´tre. GL UNSIGNED BYTE. mint a glCopyPixels() parancs eset´n azzal a k¨l¨nbs´ggel. majd ezt a dataout c´ a e u e ımen kezd˝d˝ ter¨letre o o u ki´ a kurrens GL PACK* pixelt´rol´si m´dnak megfelel˝en. A format.2-ben bevezetett t¨m¨r´ o o ıtett pixelt´rol´si form´tumokat a GLU 1. y a kim´soland´ pixelt¨mb bal als´ sark´nak a k´ppufferbeli koordin´t´i. GLint x. GL SHORT. hanem e uo e e a text´ra sz´m´ra lefoglalt mem´ri´ba m´solja. amely m´rete ennek nem tesz eleget. e e Az azonban. typein (a bej¨v˝ adatok t´ a o o ıpusa) ´s a typeout (a kimen˝ adatok e o t´ ıpusa) a glDrawPixels() ´ltal t´mogatott b´rmely form´tum. illetve t´ a a a a ıpus lehet. majd ennek pixeleib˝l e o e u u o l´trehozza a text´ra texeleit.3 a a a t´mogatja. GL FLOAT. A bej¨v˝ widthin × heightin m´ret˝ k´pet line´ris transzform´ci´val ´s box sz˝r´ssel trano o e u e a a o e ue szform´lja widthout × heightout m´ret˝v´. u e o a u e e e u a int gluScaleImage (GLenum format. GLint level. A datain c´ ımen t´rolt k´padatokat a megfelel˝ pixelt´rol´si m´dot haszn´lva kicsoa e o a a o a magolja. egy´bk´nt egy GLU e e u e e o e e hiba¨zenet. Az eredm´ny t´rol´s´ra ırja a a o o e a aa alkalmas mem´ria lefoglal´s´t a f¨ggv´ny megh´ asa el˝tt el kell v´gezni. internalFormat. A level. GLint widthin. a k´ ant m´ret˝v´ sk´l´zza. GLint heightout. e A texels a l´trehozand´ text´ra adatainak t´rol´s´ra szolg´l´ t¨mb c´ e o u a aa ao o ıme. mint a glTexImage2D() eset´n. a o o o a e aa 97 . width ´s height param´terek jelent´se ugyanaz. GLenum typein. e e e e x.

Az OpenGL 1. hogy rendelkez´sre ´ll-e elegend˝ er˝forr´s a text´ra l´trehoz´s´ra.13. ´s implement´ci´t´l ua ao o e e e a oo f¨gg˝en k¨l¨nb¨z˝ megszor´ asok vannak a text´raform´tumokra. a texels pae e e e a ua ram´terben pedig a NULL c´ e ımet adjuk. LUMINANCE SIZE. a o ua ıv´ a Ha a glGetIntegerv() f¨ggv´nyt megh´ u e ıvjuk a GL MAX TEXTURE SIZE param´terrel. BORDER. Ezut´n a glGetTexLevelParameter() parana ccsal lek´rdezhetj¨k. akkor a lek´rdezett text´ra jellemz˝ ´rt´kek´nt 0-´t ad a e e u o e e e a vissza a f¨ggv´ny. height. GL TEXTURE HEIGHT. GL PROXY TEXTURE 3D. Ezzel a f¨ggv´nnyel t´nylegesen l´trehozott text´r´k param´terei is u e u e e e ua e lek´rdezhet˝k. border. format ´s type param´tereknek ugyanazt e e az ´rt´ket adjuk. TYPE *params). 98 . A level param´terrel megadott r´szletez´si szintnek megfelel˝ text´raparam´tereket e e e o u e adja vissza a params v´ltoz´ban. e u e a o o a u e aa Ha nem ´ll rendelkez´sre. GL TEXTURE INTERNAL FORMAT. A fenti ´rt´k e a a e u e e meghat´roz´sakor azonban a rendszer nem veszi (nem veheti) figyelembe a text´r´k a a ua t´rol´s´nak form´tum´t ´s azt. e akkor megkapjuk. BLUE SIZE. GL TEXTURE DEPTH. GL PROXY TEXTURE 1D. RED SIZE. GL TEXTURE INTENSITY SIZE. ´ e e e a level. P´lda a text´rahelyettes´ o haszn´lat´ra e u ıt˝ a a GLint height. hogy a text´r´t esetleg t¨bb felbont´sban is t´rolni kell a aa a a e ua o a a (mipmapping). a o A target param´ter lehets´ges ´rt´kei: GL TEXTURE 1D. mintha t´nylegesen l´tre akarn´nk hozni az adott text´r´t. hogy pontosan lek´rdezhet˝ legyen a u ıt˝ o ıt e o az OpenGL-t˝l. GLenum pname. Ez´rt egy speci´lis u o uo o o ıt´ u a e a text´rahelyettes´ o (proxy) haszn´lhat´ annak eld¨nt´s´re. GL TEXTURE ALPHA SIZE.0 verzi´val val´ kompatibilit´s ´rdek´ben a pname param´ternek a o o a e e e e e o ou GL TEXTURE COMPONENTS ´rt´k is adhat´. nemcsak az inform´ci´szerz´s ´rdek´ben l´trehozott text´rahelyettes´ ok´. GLint level. a o e u e e magass´g a hat´rok n´lk¨l) 2D-s text´r´k haszn´lhat´k. hogy az adott implement´ci´ban legfeljebb mekkora m´ret˝ (sz´less´g. e o a o e e e e u ıt˝ e void glGetTexLevelParameter{if}v (GLenum target. a magasabb verzi´j´ OpenGL implement´ci´kn´l azonban a GL TEXTURE INTERNAL FORMAT a javasolt szimbolikus a o a konstans. GL PROXY TEXTURE 2D. e e e e GL TEXTURE 3D. hogy egy text´ra adott form´tum szerint t´rolhat´-e a haszn´lt impleo u a a o a ment´ci´ban. Text´ rahelyettes´ o u ıt˝ A text´r´t haszn´l´ OpenGL programok mem´riaig´nye tekint´lyes. Ehhez a text´r´k l´trehoz´s´t seg´ o glTexImage2D() f¨ggv´nyt kell a o ua e aa ıt˝ u e megh´ ıvni ugy. width. GL TEXTURE GREEN SIZE. A 3D-s text´r´k eset´n ugyaa a e u ua a o ua e nezt a GL MAX 3D TEXTURE SIZE param´ter haszn´lat´val ´rj¨k el. hogy vajon az adott OpenGL u ıt˝ a o o ee implement´ci´ tudna-e kezelni egy adott text´r´t a k´ ant felbont´s(ok)ban. internalFormat. A pname param´ter lehets´ges ´rt´kei: e e e e GL GL GL GL GL TEXTURE TEXTURE TEXTURE TEXTURE TEXTURE WIDTH. Egy speci´lis text´rahelyettes´ o funkci´ seg´ abban. hogy a target param´ternek GL PROXY TEXTURE 2D ´rt´ket adjuk.3. GL TEXTURE 2D.

GLint xoffset. xoffset. GLint level. Ha a a ıgy e o u a ır´ e o sz´less´g vagy magass´g ´rt´ke 0. e oe ua a e a ır´ a Ez k¨l¨n¨sen hasznos lehet olyan esetekben. GLint y. mint a glCopyPixels() parancs eset´n azzal a e ´ e k¨l¨nbs´ggel. A glPixeluo e e a u o a Transfer*() ´s a t¨bbi pixel´tviteli m˝velet be´ll´ asait haszn´lja. GLsizei height). 64. GLint level.glTexImage2D(GL PROXY TEXTURE 2D. Text´ r´k m´dos´ asa u a o ıt´ Egy uj text´ra l´trehoz´sa t¨bb sz´m´ asi kapacit´st k¨t le. GLint yoffset. GLsizei width. tov´bb´ o a a az egy´b pixel´tviteli m˝veletek is hat´ssal vannak. GLenum format. amikor a text´r´k alapj´t val´s id˝ben uo o ua a o o l´trehozott videok´pek alkotj´k. hogy m´ e e a u o ıt´ o ıg a text´ra sz´less´g´nek ´s magass´g´nak 2 hatv´ny´nak kell lenni. GL TEXTURE HEIGHT. height a aa u o a e e e e a magass´ga. &height). GLint yoffset. GLenum type. width a t´glalap sz´less´ge. e o a u a ıt´ a 99 . u A k´pr´szre a glPixelStore*(). e void glCopyTexSubImage2D (GLenum target. addig egy text´ra u e e e e a a a a u tetsz˝leges m´ret˝ t´glalap alak´ ter¨lete ´t´ o e u e u u a ırhat´. GLint xoffset. a void glTexSubImage2D (GLenum target. GLsizei width. hogy seg´ eg´vel csak u ıt˝ o a a ıts´ e azt tudjuk meg. akkor a parancsnak nem lesz hat´sa a kurrens text´r´ra. 64. A target param´ternek a GL TEXTURE 2D ´rt´ket kell o o u e e e adni. A kurrens k´tdimenzi´s text´ra egy t´glalap alak´ ter¨let´t ´t´ e o u e u u e a ırja a texels c´ ımen kezd˝d˝ text´raadatokkal. 0. GLsizei height. A k´ppufferb˝l kim´solt k´ppel helyettes´ a kurrens k´tdimenzi´s text´ra megadott e o a e ıti e o u t´glalap alak´ ter¨let´t. format ´s type param´terek ´rtelmez´se a glTexImage2D() parancsn´l e e e e a haszn´ltakkal megegyezik.4. a a 13. ´ u e a o a ıt´ a o e o o ıt´ Ez´rt az OpenGL-ben lehet˝s´g van a text´r´k tartalm´nak r´szbeni vagy teljes ´t´ as´ra. glGetTexLevelPrarameteriv(GL PROXY TEXTURE 2D. A level. glPixelTransfer*() ´ltal be´ll´ e e a a ıtott m´dok. ´s pontosan ugy dolgozza fel. const GLvoid *texels). vagyis u o a e e azt nem tudjuk meg. 0. Az ´ elhelyezett t´glalap nem l´ghat ki a text´r´t le´ o t´glalapb´l. hogy pillanatnyilag van-e elegend˝ kapacit´s az adott text´ra o a u haszn´lat´ra. GL RGBA8. hogy nem a k´ppufferbe m´solja hanem a text´ramem´ri´ba. A kurrens GL READ BUFFER pufferb˝l kiolvassa a megadott e u u e o pixeleket. ´s a videok´pek m´retei ´ltal´ban o e e e a a nem 2 hatv´nyai. GL RGBA. e e a e e a ua de nem kapunk hiba¨zenetet. yoffset az ´t´ a a ırand´ t´glalap alak´ ter¨let bal als´ o e u u o sark´nak koordin´t´i a text´ra bal als´ sark´hoz k´pest. mint egy megl´v˝ m´dos´ asa. GL UNSIGNED BYTE. e a u a A text´r´k l´trehoz´s´hoz hasonl´an a text´r´k m´dos´ as´hoz is haszn´lhatjuk a ua e aa o ua o ıt´ a a k´ppuffert. 0. NULL). GLint x. hogy a rendszer k´pes lenne-e bet¨lteni az adott text´r´t. Nem veszi e o ua figyelembe. A text´rahelyettes´ o mechanizmusnak jelent˝s hi´nyoss´ga. hogy pillanatnyilag a text´ra er˝forr´sok milyen m´rt´kben foglaltak. A text´ra m´dos´ asa mellet sz´l az is.

GLint x. GLint border ) Egydimenzi´s text´r´t hoz l´tre a k´ppuffer felhaszn´l´s´val. yoffset. GLsizei width. o e e ee void glTexSubImage1D (GLenum target. A text´ra ´t´ o e e ee u a ırand´ ter¨let´t az xoffset. mely bal als´ sark´nak e u e e u o a koordin´t´i x. A a e e e t¨bbi param´ter jelent´se megegyezik a glTexSubImage2D() parancs megfelel˝ pao e e o ram´ter´nek jelent´s´vel. GLint level. A target param´ternek a GL TEXTURE 1D ´rt´ket kell adni. k´tdimenzi´s text´r´kat l´trehoz´. hogy a mint´zat csak egy dimenzi´ban v´ltozik. Az egydimenzi´s text´ra olyan speci´lis e o ua a o u a k´tdimenzi´s text´r´nak tekinthet˝. Egydimenzi´s text´rat¨mb¨t hoz l´tre. A t¨bbi param´ter jelent´se megegyezik a e e o e e glTexImage2D() parancs megfelel˝ param´ter´nek jelent´s´vel. Erre a ter¨letre a k´ppuffernek az a t´glalapja ker¨l. e o o void glTexImage1D (GLenum target. o u o e e u ırja e o A target param´ternek a GL TEXTURE 1D ´rt´ket kell adni. GLenum format. GLint y.5. A kurrens egydimenzi´s text´ra kijel¨lt r´sz´t fel¨l´ a k´ppufferb˝l vett adatokkal. magass´ga height. Az eddig megismert. mellyel fel¨l´ a kurrens egydimenzi´s text´ra o u o o e u ırja o u megadott szakasz´t. A target param´ternek a GL TEXTURE 1D vagy o ua e e GL TEXTURE PROXY 1D ´rt´ket kell adni. GLint internalFormat. GLenum type. const GLvoid *texels). const GLvoid *texels). A t¨bbi param´ter jelent´se e e e o e e megegyezik a glCopyTexSubImage2D() parancs megfelel˝ param´ter´nek jelent´s´vel. GLenum type. o e e ee void glCopyTexSubImage1D (GLenum target. height param´terek hat´rozz´k meg ugyan´gy. GLint internalFormat. GLint x. o e e ee 100 . GLint level. Egydimenzi´s text´ r´k o u a El˝fordulhat. GLsizei width.A target ´s level param´terek ´rtelmez´se megegyezik a glTexSubImage2D() parancs e e e e megfelel˝ param´tereinek ´rtelmez´s´vel. GLint level. GLint level. aa e e a 13. GLsizei width). o u e width. Ilyen esetben elegend˝ o a o a o (takar´kosabb) egydimenzi´s text´r´t haszn´lni. GLint border. e e ee void glCopyTexImage1D (GLenum target. mint glTexSubImage2D() parancs e a a u eset´n. GLint y. GLenum format. y sz´less´ge width. melynek alul ´s fel¨l nincs hat´ra ´s a magass´ga 1 e o ua o e u a e a (height = 1). A target param´ternek o ua e e aa a e e e o e e a GL TEXTURE 1D ´rt´ket kell adni. Egydimenzi´s text´r´t hoz l´tre. GLint xoffset. GLint xoffset. m´dos´ o parancsok e o ua e o o ıt´ mindegyik´nek van egydimenzi´s megfelel˝je. GLsizei width. A t¨bbi param´ter jelent´se megegyezik a glCopyTexImage2D() parancs megfelel˝ param´ter´nek jelent´s´vel.

GLint internalFormat. type ´s texels param´terekre ugyanaz vonatkozik. mint a glTexImage2D() e e parancsn´l. A kurrens GL READ BUFFER pufferb˝l kiolu ırja e o vasott pixeleket ugyan´gy dolgozza fel. GLsizei height. A width. GLint level.13. width. GLint zoffset. GLsizei height). A h´romdimenzi´s text´r´k az OpenGL 1. mint a width ´s height param´terekre. melynek sz´less´ge width. y bem´solja a kurrens h´romdimenzi´s text´ra zoffset e o aa a a o u 101 . GLint format. illetve maa e e e e e gass´g´t jel¨lik. const GLvoid *texels). hogy a pixeleket nem a k´ppufferbe. ahol a text´ra r´tegei CT (coma u a e o u e puter tomograph) vagy MRI (magnetic resonance image) k´peket. a a u e e height. GLint x. GLint zoffset. GLenum type. bore e der. illetve height param´terek rendre a r´tegek sz´less´g´t. GLsizei depth. a o o a o A h´romdimenzi´s text´r´k leggyakoribb a o ua alkalmaz´si ter¨lete az orvostudom´ny ´s a geol´gia. format. H´romdimenzi´s text´r´t hoz l´tre. A level ´s type param´terek ´rtelmez´se a glTexImage3D() parancsn´l haszn´lt ugyanilyen nev˝ param´terek´vel megegyezik. A depth paa a o e e a a u e e e ram´terre ugyanazok a megszor´ asok ´rv´nyesek. Hat´sa: a megfelel˝ k´ppuffer azon a o e t´glalapj´nak pixeleit. GLint yoffset. magass´ga height. A kurrens h´romdimenzi´s text´ra megadott r´teg´nek el˝´ t´glalap alak´ ter¨let´t a o u e e oırt e u u e o fel¨l´ a k´ppufferb˝l kivett adatokkal. GLint xoffset. mint a glCopyPixels() parancs. A level param´ter jee e e e lent´se megegyezik az el˝z˝ parancsokn´l le´ e o o a ırtakkal. A kurrens h´romdimenzi´s text´ra kijel¨lt r´sz´t ´ fel¨l. bal als´ sark´nak e a e e a o a k´pmez˝beli koordin´t´i x. A width. uo e e u o a a A target param´ternek a GL TEXTURE 3D ´rt´ket kell adni. GLsizei height. GLenum type. magass´g´t ´s o e e e e a a e m´lys´g´t jel¨lik. const GLvoid *texels). GLint y.2 verzi´ban v´ltak a rendszer e a o ua o a magj´nak r´sz´v´. GLint yoffset. GLint level. H´romdimenzi´s text´ r´k a o u a A h´romdimenzi´s text´r´k egym´s m¨g´ helyezett k´tdimenzi´s text´r´k a o ua a o e e o ua (text´rar´tegek) ¨sszess´g´nek tekinthet˝k. a e e e a e ıt´ Minden k´tdimenzi´s text´r´t l´trehoz´ ´s manipul´l´ parancsnak megvan a e o ua e o e ao h´romdimenzi´s megfelel˝je. GLsizei depth. illetve k˝zetr´teget e o e k´pviselnek. GLsizei width. GLenum format. kor´bban csak elterjedt kieg´sz´ esek voltak. GLint xoffset. A level. A m´dos´ aa o ıtand´ text´rar´sz o u e nem l´ghat ki a text´r´b´l. e ıt´ e e e e void glTexSubImage3D (GLenum target. hanem a text´ramem´ri´ba m´solja. GLsizei width. internalFormat. GLint border. az egyetlen u k¨l¨nbs´g az. u e o e e o Az ilyen text´r´k adatai teh´t ua a h´romdimenzi´s t¨mbben t´rolhat´k. a depth param´ter a r´tegek sz´m´t. zoffset h´rmas pedig ezen t´glatest bal als´ sark´nak e e e o a e o a a text´ra bal als´ cs´cspontj´hoz viszony´ u o u a ıtott koordin´t´it. A target param´ternek a GL TEXTURE 3D vagy a o ua e e GL TEXTURE PROXY 3D ´rt´ket kell adni. GLint level. yoffset. a text´ra m´lys´g´t. GLsizei width.6. height. Az uj text´raadatok a texels c´ o ua o ´ u ımen kezd˝dnek. A target param´ternek a a o u o e e ırja u e e e e e e e GL TEXTURE 3D ´rt´ket kell adni. o void glCopyTexSubImage3D (GLenum target. a o o void glTexImage3D (GLenum target. depth param´terek rendre a m´dos´ e o ıtand´ t´glatest sz´less´g´t. az xoffset.

A target. csillog´-villog´ pixelek j¨nnek el˝. int gluBuild2DMipmaps (GLenum target. ´s a felbont´s cs¨kken´s´vel a level ´rt´ke n˝. mely bal als´ sark´nak a e e e e u a u e a o a r´tegen bel¨li koordin´t´i xoffset. mint a megfelel˝ glTexImage*D() e e o f¨ggv´nyn´l. Ezen probl´ma uo e o o o o e kik¨sz¨b¨l´se ´rdek´ben a text´r´b´l egyre cs¨kken˝ felbont´s´ csal´dot hoznak l´tre. yoffset. e a o ee e e o 13. egy 64 × 16 -os text´r´r´l: 32 × 8. GLint internalFormat. A text´ r´k r´szletess´g´nek szintje (mipmapu a e e e ping) A text´r´kat az objektumkoordin´ta-rendszerben kapcsoljuk hozz´ az ´br´zoland´ alakua a a a a o zatokhoz.1. hogy a k¨rnyezet´t˝l o o eo nagyon el¨t˝ lesz az eredm´ny. Ilyen esetekben gyakran el˝fordul. internalFormat. e e e u Arra is lehet˝s´g van. hogy ne az ¨sszes lehets´ges. GLint height. GLint width. ahol a mip a multum in parvo (sok dolog kis aa u helyen) latin kifejez´s r¨vid´ ese. ha minden felbont´st sikeresen u e e u e e e a a l´trehoztak. melyek azt´n sz´mos transzform´ci´n mennek kereszt¨l. 2 × 1. void *texels). Ennek megfelel˝en a poligonra fesz´ e o ıtett text´ra is egyetlen pontt´ zsugorodik. aa a o o type ´s texels param´terekre ugyanaz vonatkozik. 1 × 1. height. 8 × 2. 16 × 4. GLenum type. pl. L´trehozza a text´ra ¨sszes sz¨ks´ges alacsonyabb felbont´s´ v´ltozat´t ´s a glTexIe u o u e au a a e mage*D() felhaszn´l´s´val bet¨lti ˝ket. int gluBuild3DMipmaps (GLenum target.7. GLint depth. pl. u e a a o o e e o a a Ezt az elj´r´st nevezz¨k mipmapping-nek. GLint internalFormat. uao 4 × 1. amit a rendszernek az eredeti m´ret˝. akkor az al´bbi GLU a a e a f¨ggv´nyekkel automatikusan l´trehozhatjuk az ¨sszes t¨bbit. A f¨ggv´nyek a 0 ´rt´ket adj´k vissza. hanem csak a megadott szint˝ oe o e u felbont´sokat hozzuk automatikusan l´tre. GLenum format. Az egyes kicsiny´ ıtett text´r´k mindig az eggyel nagyobb felbont´sb´l ua a o k´sz¨lnek. Ennek haszn´lat´hoz a text´r´r´l minden lehets´ges e o ıt´ a a uao e kicsiny´ est el kell k´sz´ ıt´ e ıteni.egym´s f¨l´ heu ua o o au ua e a oe lyezz¨k) ´s az ´br´zolt poligon cs¨kken˝ m´ret´nek megfelel˝ tagj´t haszn´lja a rendszer. hogy a a a o u o egy-egy poligon k´pe csak egyetlen pixel lesz.t´glalapokat . ´ az ugr´sszer˝ v´ltoz´s kik¨sz¨b¨lhet˝. width. e u aa 13. void *texels). Ezeket a kicsiny´ e u ıgy a u a a u o o o ıtett text´r´kat is ua a glTexImage2D() f¨ggv´nnyel lehet megadni. egy´bk´nt pedig egy GLU hiba¨zenetet. a e 102 . GLenum format. GLenum type. void *texels). format.r´teg´nek azon width sz´less´g˝. u e e o o int gluBuild1DMipmaps (GLenum target. GLint width. El˝fordulhat. height magass´g´ t´glalapj´ra. az alapfelbont´s (a legnagyobb) szintje u e a (level ) legyen 0. Automatikus l´trehoz´s e a Ha a 0-s szintet (a legnagyobb felbont´st) m´r l´trehoztuk. GLint internalFormat. 128 × 128 u a e u -as text´r´b´l kell kisz´m´ ua o a ıtania. GLenum type. GLenum format. vagyis pl.7. GLint width. u o oe e e ua o o o au a e egy text´ra g´l´t (ha a cs¨kken˝ felbont´s´ text´r´kat . GLint height.

A t¨bbi param´ter ´rtelmez´se ugyanaz. GLint internalFormat. A f¨ggv´nyek a 0 ´rt´ket adj´k vissza. GLint level. Ez gyakran a k¨rnyezet´t˝l o e a o a o eo 103 . sz˝r˝t biztos´ melyekb˝l a felhaszn´l´ a e o uo ıt. egy´bk´nt pedig egy GLU hiba¨zenetet. int gluBuild2DMipmapLevels (GLenum target.int gluBuild1DMipmapLevels (GLenum target. Ilyen esetekben aa a a o a az OpenGL d¨nti el. hogy az egyik tengelyir´nyba kicsiny´ o a ıteni. hogy egy pixelen e a o e e a o pontosan egy texel l´tszik. GLenum format. void *texels). A level szint˝ texels text´r´b´l a base ´s max k¨z¨tti texeleket hozza l´tre. u e o o e e e mint a megfelel˝ glTexImage*D() f¨ggv´nyn´l. A target param´ternek a GL TEXTURE 1D. GLint height. Erre a c´lra az OpenGL t¨bb. azaz sk´l´z´snak (affin transzform´ci´nak) kellene al´vetni az adott texeleket. o ıt-e ıt. Ezen transzform´ci´k eredm´nyek´nt ritk´n fordul el˝. GLint width. A v´laszt´s az egym´snak ellentmond´ min˝s´g ´s sebess´g k¨z¨tti koma a a a o oe e e o o promisszum megk¨t´s´t jelenti. ´s a poligonnal egy¨tt transzform´lja a rendszer a k´perny˝ koordin´tae e u a e o a rendszer´be. GLint height. param u o a ıt´ a e lehets´ges ´rt´keit a 13. e e e a a Ha a param = GL NEAREST.2. GLenum type. GLint level. ue A texelek kicsiny´ es´re. GLint base. TYPE param). GLint base. GLint level. hogy egy pixelen t¨bb texel l´tszik vagy a o a megford´ ıtva. Ez egy ´ltal´nosabb c´l´ f¨ggv´ny. GL TEXTURE 2D vagy e GL TEXTURE 3D ´rt´ket adjuk att´l f¨gg˝en. void *texels). void glTexParameter{if}v (GLenum target. GLint width. a aa Legjobb azonban az ilyen helyzetek elker¨l´se. Sz˝ r˝k u o A text´r´k t´glalap alak´ak. hogy o o e e u mely texeleket haszn´lja a rendszer. GLenum pname. hiszen pl. GLenum format. Az ut´bbi k´t esetben nem egy´rtelm˝. GLint internalFormat. hogy kicsiny´ vagy nagy´ miut´n sk´l´zni nem tudja a texeleket. Sok esetben nem kicsiny´ esr˝l vagy nagy´ asr´l van sz´. GLenum type. un.1. melyeket tetsz˝leges alak´ poligonokra helyez¨nk r´ a ua e u o u u a modellt´rben. sokkal gyakoribb. t´bl´zat tartalmazza. akkor mind nagy´ as. GLint depth. e e o u o a o uao o ıt´ a o A pname param´ternek a GL TEXTURE MAG FILTER a nagy´ ashoz haszn´land´ e e e ıt´ sz˝r˝ be´ll´ as´hoz ´s a GL TEXTURE MIN FILTER ´rt´ket a kicsiny´ eshez. ´s a u ua o e o o e e glTexImage*D() f¨ggv´nnyel bet¨lti azokat.8. GLenum type. GLint max. illetve nagy´ as´ra haszn´lt sz˝r˝ket a glTexParameter*() ıt´ e ıt´ a a uo paranccsal v´laszthatjuk ki. a e e e u 13. egy texel t¨bb pixelen. o u e e u e e e a ha minden felbont´st sikeresen l´trehoztak. GLint max. GLenum format. int gluBuild3DMipmapLevels (GLenum target.11. K¨l¨n lehet sz˝r˝t v´lasztani a texelek kicsiny´ es´hez oee uo uo a ıt´ e ´s nagy´ as´hoz. mind kicsiny´ es eset´n a pixel ıt´ ıt´ e k¨z´ppontj´hoz legk¨zelebbi texelt haszn´lja a rendszer. GLint max. a m´sikba nagy´ a ıtani kellene. void *texels). GLint internalFormat. hogy h´ny dimenzi´s text´r´r´l van sz´. ´s hogy a texeleket hogyan ´tlagolja vagy intera e a pol´lja. a o void glTexParameter{if} (GLenum target. o ao v´laszthat. e ıt´ a ıt´ o ıt´ o o el˝fordulhat. pontban tal´lhat´. TYPE *param). GLenum pname. GLint base. GLint width. tov´bbi alkalmaz´sa a a a eu u e a a a 13.

mind nagy´ asn´l.1. mivel egy ua a a m´r l´trehozott text´ra aktiviz´l´sa mindig gyorsabb.1 verzi´j´ban vezett´k be. e o a Ezen sz˝r˝k n´melyik´nek m´s elnevez´se is van. a GL LINEAR-t biline´ris mintav´telez´snek. akkor a k´t legk¨zelebbi fele o bont´sban veszi a pixel k¨z´ppontj´hoz legk¨zelebbi texeleket ´s ezeket line´risan ina o e a o e a terpol´lja. vagy a e a au legmegfelel˝bb egy vagy k´t felbont´st haszn´lja a rendszer (a t¨bbi opci´).9. u u 13. GL LINEAR GL NEAREST MIPMAP NEAREST GL NEAREST MIPMAP LINEAR GL LINEAR MIPMAP NEAREST GL LINEAR MIPMAP LINEAR GL TEXTURE MIN FILTER nagyon elt´r˝ pixelt eredm´nyez. 2 × 2 vagy 2 × 2 × 2 pixelt line´risan interpol´lja a o e a o a a rendszer mind kicsiny´ esn´l. Text´ raobjektumok u A text´raobjektumok biztos´ ak a text´raadatok t´rol´s´t ´s a t´rolt adatok gyors u ıtj´ u a aa e a el´r´s´t. hogy a text´r´nak van-e hat´ra. A line´ris interpol´ci´ mindig e ´ a a a a o lassabb. Kicsiny´ es ıt´ e au ua a ıt´ eset´n v´laszthatunk. akkor a kicsiny´ es m´rt´k´nek ıt´ e e e megfelel˝. mint egy uj l´trehoz´sa. o e a a o o Ha param = GL NEAREST MIPMAP NEAREST. t´bl´zat. akkor az OpenGL egyszer˝en nem fog text´r´zni. hogy az ´ kiv´lasztott ıt´ e ıt´ a o ıgy a texelek t´lny´lnak a text´ra hat´r´n. Nagy´ as eset´n mindig az alapfelbont´s´ text´r´t haszn´lja a rendszer.. de jobb eredm´nyt ad´ megold´s. GL LINEAR GL NEAREST. GL CLAMP. GL CLAMP TO EDGE l´sd a 13. Ilyen esetekben az eredm´ny k´t t´nyez˝t˝l u u u aa e e e oo f¨gg: egyr´szt att´l. legk¨zelebb ´ll´ felbont´sb´l veszi a rendszer a pixel k¨z´ppontj´hoz legk¨zeo o a o a o o e a o lebbi texelt. GL LINEAR).11. m´ param = GL LINEAR MIPMAP LINEAR eset´n a k´t legk¨zelebbi fela ıg e e o bont´sban k¨l¨n-k¨l¨n line´risan interpol´lja a pixel k¨z´ppontj´hoz legk¨zelebbi pixea uo uo a a o e a o leket. eo e param = GL LINEAR eset´n a text´ra dimenzi´j´nak megfelel˝en a pixel e u oa o k¨z´ppontj´hoz legk¨zelebbi 2. A GL NEAREST opci´t szok´s uo e e a e o a a e e pont-mintav´telez´snek is nevezni. Az implement´ci´k egy u oa e a o 104 . hogy az alapfelbont´s´t (GL NEAREST. Haszn´latuk nagym´rt´kben felgyors´ eee a e e ıtja a text´r´k haszn´lat´t. pona ıt´ a o tot). majd az eredm´nyeket ujra line´risan interpol´lja. El˝fordulhat. de nem k¨ld hiba¨zenetet.ism´tl´s´nek” u e o ua a a e u e ee a be´ll´ as´t´l (GL REPEAT.2. m´sr´szt a text´ra .13. a e e GL LINEAR MIPMAP LINEAR-t pedig triline´ris mintav´telez´snek. param = GL LINEAR MIPMAP NEAREST eset´n pedig a legk¨zelebbi e o felbont´sban line´ris interpol´ci´val sz´m´ ki. a e e Ha a mipmapre t´maszkod´ sz˝r˝t akarunk alkalmazni. A a e u aa ´ e a text´raobjektumokat az OpenGL 1. a a a o a ıtja Ha param = GL NEAREST MIPMAP LINEAR. A text´r´k kicsiny´ es´hez ´s nagy´ as´hoz megadhat´ sz˝r˝k a a ua ıt´ e e ıt´ a o uo target GL TEXTURE MAG FILTER param GL NEAREST. de nem hoztuk l´tre a o uo e az ¨sszes lehets´ges felbont´s´t a text´r´nak (a GL TEXTURE BASE LEVEL-t˝l a o e aa ua o u ua GL TEXTURE MAX LEVEL-ig).

GLboolean glIsTexture (GLuint textureName). GL TEXTURE 2D vagy e e e GL TEXTURE 3D lehet. 13. A GL TRUE ´rt´ket adja vissza.9. Text´ raobjektumok l´trehoz´sa. hogy text´raobjektumokb´l un. Ha nincs. glTexParameter*() ´s e 105 . glCopyTexSubImage*(). e u o oe eu a c´lszer˝ a leggyakrabban haszn´lt text´raobjektumainkat a munkacsoportba tenni.9. A 0 a o e u a o o ıv e rendszer ´ltal lefoglalt text´raazonos´ o. GLuint textureName).2.r´sze lehet˝v´ teszi. akkor l´trehoz egy text´raobjektumot ´s ezt hozz´kapcsolja a n´vhez. hogy a megjelen´ es sz´m´ra o u u ıvv´ ıt´ a a el´rhet˝k legyenek. Ha ez a lehet˝s´g rendelkez´s¨nkre ´ll. ha nincs ilyen nev˝ text´raobjektum vagy textureName ıt´ e = 0. u u • A megfelel˝ text´raobjektumot tegy¨k akt´ a. ezeket k´s˝bb a glTexImage*(). A text´ raobjektumok elnevez´se u e A text´r´khoz pozit´ eg´sz nevek (azonos´ ok) rendelhet˝k. e o e u o e mely tagjai a leghat´konyabban m˝k¨dnek. ´s be kell ´ll´ u e a ıtani a tulajdons´gait. haszn´lata u e a a void glBindTexture (GLenum target. A v´letlen n´v¨tk¨z´sek ua ıv e ıt´ o e e u o e elker¨l´se ´rdek´ben c´lszer˝ a glGenTextures() f¨ggv´nyt haszn´lni. munkacsoportot hozzunk l´tre. meg kell n´zni. jelenleg haszn´laton k´ uli text´raobjektum nevet ad vissza a textureNames a ıv¨ u t¨mbben. u e e u e a • L´tre kell hozni a text´raobjektomokat. e o 13. A e u a u text´raobjektomok haszn´lat´hoz a k¨vetkez˝ l´p´seket kell tenni: u a a o o e e • Text´raobjektum neveket kell l´trehozni. a • Ha az implement´ci´nk t´mogatja a munkacsoportot. ´s GL FALSE ´rt´ket. glTexSube a ıt´ eo Image*(). A visszaadott nevek nem felt´tlen¨l egym´st k¨vet˝ pozit´ eg´szek. hogy a leggyakrabban haszn´lt ua a a text´raobjektumok ker¨ljenek a munkacsoportba. A target param´ter ´rt´ke GL TEXTURE 1D. GLuint *textureNames). akkor o o u a aa az egyes text´r´khoz priorit´st kell rendelni. ue e e e u u e a void glGenTextures (GLsizei n. Amikor el˝sz¨r h´ o o ıvjuk meg egy pozit´ textureName ıv azonos´ oval. ıt´ e u e a e Az ´ l´trehozott text´raobjektum a text´raadatokra ´s text´ratulajdons´gokra az ıgy e u u e u a alap´rtelmezett be´ll´ asokat tartalmazza. n darab. ha a textureName egy l´tez˝ text´raobjektum azoe e e o u e e u u nos´ oja. azaz a n´vhez hozz´ kell rendelni a text´raadatokat. glCopyTexImage*(). ezt a glGenTextures() f¨ggv´ny soha sem adja a u ıt´ u e vissza.1. hogy a o a e van-e elegend˝ hely az ¨sszes text´raobjektum t´rol´s´ra.

glPrioritizeTextures() f¨ggv´nyek megh´ as´val t¨lthetj¨k fel a haszn´land´ text´ra u e ıv´ a o u a o u jellemz˝ivel. ´s egy korl´tozott kapacit´s´ cache ´ll rendelkez´sre a u u e a au a e a text´r´k t´rol´s´hoz. u a a e e e u e ua e 13. 106 . Rezidens text´ r´k munkacsoportja u a N´h´ny OpenGL implement´ci´ lehet˝v´ teszi. param´terek sz´m´ra lefoglalt helyet a mem´ri´ban ´s az azoe a a o a e nos´ ok haszn´laton k´ uli st´tuszt nyernek. u e GLboolean glAreTexturesResident (GLsizei GLboolean *residences). u a u o a hogy helyet szabad´ ıtsunk fel. tegy¨k az objektumot kurrenss´ ´s a glGetTexParameter*v() parancsot u e e e e u a a o a GL TEXTURE RESIDENT param´terrel kiadva lek´rdezhetj¨k a st´tusz´t. Ha meg akarjuk tudni. Ha a megae u a a o e e e dott n darab objektum mindegyike rezidens a f¨ggv´ny a GL TRUE ´rt´ket adja vissza ´s u e a residences t¨mb elemeit nem v´ltoztatja meg. akkor haszn´ljuk a glAreTexturesResident() a a ıv´ a f¨ggv´nyt. Ha t¨bb objektum st´tusz´ra vagyunk k´ ancsiak. oo void glDeleteTextures (GLsizei n. egyszer˝en figyelmen k´ ul hagyja a rendszer. A munkacsoporthoz taru o a o e toz´ objektumokat rezidensnek nevezz¨k. akkor nem a o ua u e aa lehet minden text´r´nk rezidens. Nem l´tez˝ text´raobjektumok t¨rl´se nem ıt´ a ıv¨ a e o u o e eredm´nyez hib´t.4. hogy nagy hat´konys´ggal m˝k¨d˝ e a a o o e e a u o o text´raobjektumokb´l ´ll´ munkacsoportot hozzunk l´tre. Ahhoz. o ou u o u Ha textureName = 0 ´rt´kkel h´ e e ıvjuk meg. u e 13. akkor a f¨ggv´ny a GL FALSE ´rt´ket adja vissza ´s a residences t¨mbu e nek a nem rezidens objektumokhoz tartoz´ elemeit a GL FALSE ´rt´kre ´ll´ o e e a ıtja. akkor a textureName azoıt´ nos´ oj´ text´raobjektumot teszi kurrenss´ (a text´ralek´pez´s sz´m´ra el´rhet˝v´) a ıt´ u u e u e e a a e o e target-nek megfelel˝ dimenzi´j´ text´raobjektumok k¨z¨l. Az objektumok st´tusz´t a residences t¨mbben adja vissza. const GLuint *textureNames. hogy egy text´raobjektumunk ua u rezidens-e. a 0 azonos´ oj´ objektum e a u ıv¨ ıt´ u t¨rl´se a default text´r´t teszi kurrenss´.9. Ha az adott objektumok k¨z¨l legal´bb o a o u a e e e o egy nem rezidens. Ilyen speci´lis cache l´tez´se eset´n mindenk´ppen c´lszer˝ ua a aa a e e e e e u text´raobjektumokat haszn´lni. o Ha nem el˝sz¨r h´ o o ıvjuk meg a textureName azonos´ oval. A textureNames t¨mbben t´rolt azonos´ oj´ text´raobjektumokat t¨rli. n. ´s a n´vn´lk¨li alap´rtelmezett text´r´t teszi kurrenss´. Text´ raobjektumok t¨rl´se u o e A nem kurrens text´raobjektumok is foglalj´k a helyet a text´ramem´ri´ban.9. akkor az OpenGL kikapcsolja a text´raobjektumok haszn´lat´t. t¨r¨lni kell az objektumot. A textureNames t¨mbben megadott azonos´ oj´ n darab text´raobjektum st´tusz´t o ıt´ u u a a k´rdezhetj¨k le. u a Ha a haszn´land´ text´r´khoz sz¨ks´ges hely meghaladja a cache kapacit´s´t. o u Ezekn´l ´ltal´ban speci´lis hardver e a a a t´mogatja a text´ram˝veleteket.3. azaz felso a ıt´ u u o zabad´ ıtja az adatok. mint a textureName = 0 param´terrel megh´ o e ua e e ıvott glBindTexture() f¨ggv´ny. const GLuint *textureNames).

A 0 ´rt´k a legalacsonyabb priorit´st rendeli. o 13. (Ez ua a a u o a a ut´bbi mindig hat´konyabb. hogy a rendszer a text´r´t hogyan kombin´lja a feldolgozand´ fragmentum sz´ evel. e e e e ırj´ o GL REPLACE. hogy a text´ra sz´ ua a o u ıneit r´fess¨k az ´br´zolt alakzaa u a a tra. Ha nincs ua a a u a elegend˝ text´ramem´ria az ¨sszes text´ra befogad´s´ra. A priorit´s hozz´kapcsol´s´hoz nem sz¨ks´ges. mint azokhoz amelyeket u e u a val´sz´ uleg ritk´bban haszn´lunk. GL MODULATE vagy GL BLEND lehet. hogy rezidens maradjon az er˝forr´sok cs¨kken´se eset´n. az ilyen objektumnak a a e e a legkisebb az es´lye arra.5. mely ´rt´kek azt ´ ak el˝. A target param´ternek a GL TEXTURE ENV ´rt´ket kell adni. TYPE *param). vagy a glTexSubImage*() f¨ggv´nnyel a e e a a a u e text´r´k tartalm´t folytonosan v´ltoztatva ugyanazt a text´ramem´ri´t haszn´ljuk. A glTexParae a e o a meter*() is haszn´lhat´ a kurrens objektum priorit´s´nak be´ll´ as´ra.10. hogy a rendszer o hogyan haszn´lja a text´r´t. ahol a text´r´kat menetk¨zben hozz´k l´tre. GLenum pname. A textureNames t¨mbben megadott azonos´ oj´ n darab text´raobjektumhoz a prioo ıt´ u u rities t¨mbben adott priorit´sokat rendeli. akkor a param ´rt´ke GL DECAL. ua a o ın´ 107 . u e e e 13. a ua void glTexEnv{if} (GLenum target. pl. elker¨lhetetlen a a ua o a e u a nem rezidens text´raobjektumok haszn´lata is. o ın˝ a a void glPrioritizeTextures (GLsizei n. de a priorit´snak csak l´tez˝ objektumokra van hat´sa. void glTexEnv{if}v (GLenum target. A glTexEnv*() f¨ggv´nnyel ´ ın´ u e ırhatjuk el˝. a felbont´sok (mipmap) sz´m´t. majd uj l´trehoz´sa. az 1 e o a o e e priorit´s´´ a legnagyobb. A priorit´sokat a rendszer a [0. j´t´kprogramok eset´n. a default text´ra a o aa a ıt´ a u priorit´sa csak ezzel ´ll´ a a ıthat´ be. Ilyen esetben a gyakrabban haszn´lt u a a text´raobjektumokhoz c´lszer˝ magasabb priorit´st rendelni. Text´ raobjektumok priorit´sa u a Ha azt akarjuk. GLenum pname. TYPE param). mint text´r´k t¨rl´se. const GLclampf *priorities). 1. akkor cs¨kkenthetj¨k a text´r´k o u o o u aa o u ua m´ret´t.. e e e Ha pname = GL TEXTURE ENV MODE.] intervalo a a lumra lev´gja. akkor csak rezidens text´raobjektumot haszn´ljunk ae e u a text´r´z´sra (ha a rendszer t´mogatja a text´raobjektumok munkacsoportj´t). hanem haszn´lhat´k az ´br´zolt alakzat sz´ enek m´dos´ as´ra. Ha az implement´ci´ nem t´mogatja a text´raobjektumok a a o a u munkacsoportj´t. akkor a rendszer minden objektumot rezidensnek tekint ´s a glArea e TexturesResident() f¨ggv´ny mindig a GL TRUE ´rt´ket adja vissza. hogy az objeka ue a a aa u e tum l´tezzen.Ez a f¨ggv´ny a text´raobjektumok pillanatnyi ´llapot´t adja vissza.9.) o e ua o e ´ e a Az olyan alkalmaz´sokn´l. hogy programunk a lehet˝ legnagyobb hat´konys´ggal m˝k¨dj¨n mino e a u o o denkor. const GLuint *textureNames. ami ´ltal´ban u e u a a a a nagyon gyorsan v´ltozik. vagy kombin´lhat´k a o a a ın´ o ıt´ a a o az alakzat eredeti sz´ evel. Text´ raf¨ ggv´nyek u u e A text´r´k nemcsak arra haszn´lhat´k.

A t¨kr¨z˝d˝ f´nyes foltok hat´s´t cs¨kkenti. t´bl´zat. hogy az ut´bbi csak RGB ´s o a ıt o o uo e o e RGBA bels˝ form´tum eset´n m˝k¨dik ´s az alfa komponenst m´sk´nt dolgozza fel. A text´rakoordin´t´k azt adj´k meg. a k¨l¨nbs´g az.2. o a e u o e a e RGBA bels˝ form´tum eset´n a text´ra alfa komponens´nek megfelel˝en keveri a frago a e u e o mentum sz´ et a text´ra sz´ evel. Az f als´ index˝ elemek a fragmentumra.3.11. a c pedig a GL TEXTURE ENV COLOR seg´ eg´vel megadott sz´ ua ıts´ e ınre vonatkoznak. e aa o u a t a text´r´ra. hogy a text´ra egyes komponenseit u e a o a u hogyan haszn´lja a rendszer.Ha pname = GL TEXTURE ENV COLOR. hogy u u aa u aa a 108 . Text´ rakoordin´t´k megad´sa u a a a Text´r´zott fel¨letek megad´sakor a cs´cspontok geometriai koordin´t´i mellett meg kell ua u a u aa adni a cs´cspontok text´rakoordin´t´it is. ha azt text´r´val keverj¨k. Ezeket az ´rt´keket csak akkor haszn´lja a rendszer. u u e a A text´raf¨ggv´ny ´s a text´ra bels˝ form´tum´nak (ezt a glTexImage*() u u e e u o a a f¨ggv´nnyel adjuk meg) kombin´ci´ja hat´rozza meg. Az index n´lk¨li mennyis´gek az eredm´ny¨l kapott sz´ jelentik. akkor param az R. E pedig e u e e u ınt a csupa 1 komponens˝ vektort. A komponenseket tartalmaz´ t¨mb c´ o o ıme. B. hogy a t¨kr¨z¨tt f´nykomponens hat´s´t a text´r´z´s ut´n vegye oe u o o e aa ua a a figyelembe a rendszer. u e u e 13. A GL DECAL e ın´ u ırja u ın´ opci´ hat´sa nagyon hasonl´ az el˝z˝re. A text´raf¨ggv´ny csak a text´ra kiv´lasztott komponenseit a u u e u a ´s az ´br´zoland´ alakzat text´r´z´s n´lk¨li sz´ et veszi figyelembe. t´bl´zat a GL REPLACE ´s GL MODULATE . a 13. e a a o ua a e u ın´ A 13. ´s a fragmentum alfa komponens´t v´ltozatlanul hagyja. A GL REPLACE ´s GL MODULATE f¨ggv´nyei a a bels˝ form´tum o a GL ALPHA GL LUMINANCE GL LUMINANCE ALPHA GL INTENSITY GL RGB GL RGBA GL REPLACE C = Cf A = At C = Lt A = Af C = Lt A = At C = It A = At C = Ct A = Af C = Ct A = At GL MODULATE C = Cf A = Af At C = Cf ∗ Lt A = Af C = Cf ∗ Lt A = Af At C = Cf ∗ It A = Af It C = Cf ∗ Ct A = Af C = Cf ∗ Ct A = Af At GL REPLACE eset´n a fragmentum sz´ et fel¨l´ a text´ra sz´ evel. a e u o o o e aa o ua u Lehet˝s´g van arra.2. G. ha a e e a GL BLEND text´raf¨ggv´ny is defini´lt. t´bl´zat pedig a a a e a a GL DECAL ´s GL BLEND hat´s´t mutatja. Ez az elj´r´s sokkal hangs´lyosabb´ teszi a text´r´zott fel¨letek aa u a ua u megvil´g´ as´t. a ıt´ a 13. ın´ u ın´ e e a Alap´rtelmez´s szerint a text´ram˝veleteket a rendszer a megvil´g´ asi sz´m´ asok e e u u a ıt´ a ıt´ ut´n hajtja v´gre.

´s a rendszer a cs´cspontokhoz tartoz´ texeleket inu e u o terpol´lja. 2. de megadhatunk ezen k´ ul es˝ aa a a a ıv¨ o ´rt´keket is. meg akkor azokat a rendszer 0-nak tekinti. A q koordin´ta ´rt´ke ´ltal´ban 1. Ha a t vagy r koordin´t´t u u aa aa nem adjuk. v jel¨l´sekt˝l.11.1. q) text´rakoordin´t´kat ´ll´ u aa a ıtja be. r. 1. void glTexCoord{1234}{sifd}v (TYPE *coords). z ´s w. ua aa e o u megk¨l¨nb¨ztet´s¨l a geometriai koordin´t´khoz haszn´lt x.] intervallumon v´ltoznak. A kurrens (s. ao 13. Ezeket s. u aa Ez a hozz´rendel´s t¨rt´nhet ugy. hogy a poligonokra a e o e ´ (s´ ıkdarabokra) r´tessz¨k a szint´n s´ a u e ıkdarabot reprezent´l´ text´r´t.13. u e u a a e o u ıt´ u minden m´s esetben azonban torz´ as l´p fel.2. Az ezt k¨vet˝en l´trehozott o o e cs´cspon(ok)hoz a rendszer ezt a text´rakoordin´t´t rendeli. ´s e ee a oe o a e e a a e ez homog´n text´rakoordin´t´k l´trehoz´s´t teszi lehet˝v´. S´ ao ua ıkbater´ ıthet˝ o fel¨letek eset´n (k´p. A mea o gadott text´rakoordin´t´kat a rendszer megszorozza a 4×4 -es text´ram´trixszal. A text´rakoordin´t´kat is e u aa e aa o e u aa a glBegin(). Ezek a u e a o o u koordin´t´k ´ltal´ban a [0. glEnd() f¨ggv´nyp´r k¨z¨tt kell megadni. mint a cs´cspontokat. henger ´ltal´nos ´rint˝fel¨let) ezt torz´ asmentesen megtehetj¨k. a void glTexCoord{1234}{sifd} (TYPE coords). a hi´nyz´ q-t pedig 1-nek.3. melyek ´rtelmez´s´t el˝´ e e e e e oırhatjuk (l´sd a 13. t´bl´zat. A megfelel˝ text´ rakoordin´t´k kisz´mol´sa o u a a a a Az ´br´zoland´ poligonok.. a A text´r´nak lehet 1. P´ld´ul g¨mb eset´n a text´ralek´pez´s a ıt´ e e a o e u e e t¨rt´nhet a g¨mb o e o 109 . t. y. t. r ´s q –val jel¨lj¨k. valamint a fel¨leuo o eu aa a e u tek param´terez´s´hez haszn´lt u. miel˝tt u aa u a o feldolgozn´ ˝ket. pontot). A GL DECAL ´s GL BLEND f¨ggv´nyei a a e u e bels˝ form´tum o a GL ALPHA GL LUMINANCE GL LUMINANCE ALPHA GL INTENSITY GL RGB GL RGBA GL DECAL defini´latlan a defini´latlan a defini´latlan a defini´latlan a C = Ct A = Af C = Cf (1 − At ) + Ct At A = Af GL BLEND C = Cf A = Af At C = Cf ∗ (E − Lt ) + Cc ∗ Lt A = Af C = Cf ∗ (E − Lt ) + Cc ∗ Lt A = Af At C = Cf ∗ (E − It ) + Cc ∗ It A = Af (1 − It ) + Ac It C = Cf ∗ (E − Ct ) + Cc ∗ Ct A = Af C = Cf ∗ (E − Ct ) + Cc ∗ Ct A = Af At mely texel tartozik a cs´csponthoz.11. a a o poligonh´l´k cs´cspontjaihoz hozz´rendelj¨k a ao u a u text´rakoordin´t´kat. 3 vagy 4 koordin´t´ja.

0. a rendszer u e e u e a e egym´s mell´ teszi. A GL NEAREST u aa sz˝r˝ eset´n a rendszer a legk¨zelebbi texelt haszn´lja. z(φ. −r) ) fel´ haladva. NURBS fel¨let eset´n a fel¨let u. melyek azt befoly´solj´k. u e u e a o u e e azonban a poligonh´l´val k¨zel´ ao o ıtett g¨rb¨lt fel¨letek eszt´tikus text´r´z´s´nak jelent˝s o u u e ua aa o m˝v´szi ¨sszetev˝i is vannak. illetve a fragmentumou o a a kra val´ alkalmaz´s sor´n. Text´ r´k ism´tl´se u a e e A [0. ez a megold´s jelent˝s torz´ ast eredm´nyez e e e u u e a a o ıt´ e a g¨mb ´szaki ´s d´li p´lusa (a (0. 0. hogy a rendszer hoa a gyan kezeli a texeleket a text´raobjektumokba val´ t´rol´s. y(φ.2. ha van. A target param´tert a text´ra dimenzi´j´nak megfelel˝en o a a e u oa o e e a ıtani.. Ezen hat´sok el´r´se ´rdek´ben az OpenGL u u o o o a ee e e automatikusan l´trehozza a text´rakoordin´t´kat.x(φ.. A u o ua e a aa text´ra ism´tl´se azt jelenti.. ϕ ∈ [0. A megfelel˝ hat´s el´r´se ´rdek´ben olyan text´r´t c´lszer˝ mea e o a ee e e ua e u gadni.. A text´rakoordin´t´k lev´g´sa azt jelenti. u e o o 13. mely j´l illeszthet˝.4. 110 . 2π] . 1... Szabad form´j´. a hozz´juk kapcsolhat´ e e e e a a a o ´rt´kekkel egy¨tt. void glTexParameter{if}v (GLenum target. ϕ) = r cos ϕ cos φ. void glTexParameter{if} (GLenum target.. t´bl´zat tartalmazza. ´s rendelkezıv¨ o u aa e het¨nk arr´l. minden 0-n´l kisebbet 0-nak tekint a rendszer.3.11. Text´ rakoordin´t´k automatikus l´trehoz´sa u a a e a A text´r´z´ssal fel¨letek szintvonalainak ´br´zol´sa. hogy az ´rtelmez´si tartom´ny [0. vagyis nem kell azokat cs´cspontonk´nt e u aa u e megadni. GLenum pname. φ ∈ [0. GL TEXTURE 2D vagy GL TEXTURE 3D ´rt´kre kell ´ll´ pname param´ter lehets´ges ´rt´keit a 13. ϕ) = r sin φ. ϕ) = r sin ϕ cos φ. GLenum pname.11. e e u 13. o e e e o e e au pl. r) ´s (0. ´s a hat´rt mindig figyelmen k´ ul uo e o a e a ıv¨ hagyja. hogy a rendszer a text´r´kat ism´telje vagy lev´gja a koordin´t´kat.. TYPE param).. Ezeku aa a ben az esetekben k¨l¨n gondot kell ford´ uo ıtani a text´ra hat´r´ra. 2π] e a o ´ e e a n´gyzet´t k´pezz¨k le a text´ra t´glalapj´ra. valamint olyan hat´s is el´rhet˝. A GL TEXTURE 1D. hogy a text´ra t´glalapj´t. TYPE *param). Azokat a param´tereket ´ll´ e a ıtja be. ua a u a a a a e o mintha a fel¨letben t¨kr¨z˝dne a k¨rnyezete. hogy minden 1-n´l o o u aa a a e nagyobb text´rakoordin´t´t 1-nek. mit egy csemp´t. 2π] × [0.] intervallumon k´ ul es˝ text´rakoordin´t´kat is megadhatunk. 2π] param´teres alakj´b´l kiindulva ugy. v param´terei haszn´lhat´k a text´ralek´pez´shez.

1. hogy e e e o u o az s. t. GL CLAMP TO EDGE. GLenum pname. a 111 . r vagy q koordin´ta l´trehoz´s´r´l van sz´. GL LINEAR GL NEAREST. ha a text´r´zott k´p r¨gz´ jektumhoz k´pest. GLenum pname. void glTexGen{ifd}v (GLenum coord. a e aao o A pname ´rt´ke GL TEXTURE GEN MODE. GL LINEAR MIPMAP NEAREST. melyekkel a text´r´t lek´pez˝ f¨ggv´nyt adhatjuk meg. TYPE *param). GL R vagy GL Q lehet att´l f¨gg˝en. t´bl´zat. pname = GL TEXTURE GEN MODE eset´n param ´rt´ke GL OBJECT LINEAR. GL REPEAT GL CLAMP.4. GL NEAREST MIPMAP NEAREST. TYPE param). GL EYE LINEAR vagy GL SPHERE MAP lehet. pname m´sik k´t lehets´ges ´rt´k´n´l a ua e o u e a e e e e e e lek´pez˝ f¨ggv´nyhez adhatunk meg param´tereket. e o u e e A referencias´ ıkot akkor c´lszer˝ e u objektumkoordin´t´kban aa megadni ua e o ıtett marad egy mozg´ obo (GL OBJECT LINEAR). Text´rakoordin´t´k automatikus l´trehoz´s´hoz lehet vele f¨ggv´nyeket megadni. GL NEAREST MIPMAP LINEAR..13. u aa e aa u e A coord param´ter ´rt´kei GL S. GL T. A n´z˝pontkoordin´ta-rendszerben (GL EYE LINEAR) megadni a referencias´ e o a e e o o u o o ee a o GL SPHERE MAP lek´pez´st els˝sorban a k¨rnyezet t¨kr¨z˝d´s´nek szimul´ci´jakor haszn´ljuk.. GL CLAMP TO EDGE. GL LINEAR. GL REPEAT GL CLAMP. e Mozg´ objektumok szintvonalainak ´br´zol´s´hoz c´lszer˝ a o a a aa e u ıkot.] -b˝l o a e o egy [0. Text´r´k ism´tl´se a a ua e e pname GL TEXTURE WRAP S GL TEXTURE WRAP T GL TEXTURE WRAP R GL TEXTURE MAG FILTER pname GL CLAMP. GL CLAMP TO EDGE. GL LINEAR MIPMAP LINEAR tetsz˝leges sz´mn´gyes [0. GL REPEAT GL NEAREST.] intervallumbeli ´rt´k e e tetsz˝leges lebeg˝pontos sz´m o o a tetsz˝leges lebeg˝pontos sz´m o o a tetsz˝leges nemnegat´ eg´sz o ıv e tetsz˝leges nemnegat´ eg´sz o ıv e GL TEXTURE MIN FILTER GL GL GL GL GL GL TEXTURE TEXTURE TEXTURE TEXTURE TEXTURE TEXTURE BORDER COLOR PRIORITY MIN LOD MAX LOD BASE LEVEL MAX LEVEL void glTexGen{ifd} (GLenum coord. GL OBJECT PLANE vagy e e e e e GL EYE PLANE lehet. 1.

tetsz˝leges projekt´ trano o a a o ıv szform´ci´ ´ a o ırhat´ le vele. ´s ez ut´n a aa o e a m´trixm˝veletek ´s a veremm˝veletek a text´ram´trixra hatnak.12. zsugor´ u o ıthat´. Miut´n a m´trix 4 × 4 -es. A text´r´zott objektum ujrarajzol´sa el˝tt a e a a ua ´ a o text´ram´trixot megv´ltoztatva speci´lis hat´sok ´rhet˝k el. forgathat´. azaz nincs semmilyen hat´sa. A text´ram´trix megad´sa. a text´ra elmozd´ u a a a a e o u ıthat´. o ny´jthat´. a verem mania aa a u u a a pul´l´sa el˝tt a glMatrixMode(GL TEXTURE) parancsot kell kiadni. miel˝tt u aa u a o b´rmilyen m´s feldolgoz´snak al´vetn´. mely verem legal´bb 2 szint˝. Text´ ram´trix-verem u a A rendszer a text´rakoordin´t´kat a 4 × 4 -es text´ram´trixszal megszorozza.13. Alap´rtelmez´s szerint a text´ram´trix az a a a a e e e u a egys´gm´trix. pl. A rendszer egy veremszerkezetet tart karban a text´ram´trixok o u a t´rol´s´ra. a u e u u a 112 .

hogy a kontrollpontok mit reprezent´lnak. j´l ismert g¨rbe ´s fel¨let is egzaktul le´ e a o o e u ırhat´. u2 ] . a k´pen nem l´that´k az oldalak o ıt˝ o o e o e a o (lapok) t¨r´sei. B´zier-g¨rbe megjelen´ ese e o ıt´ n Az n-edfok´ B´zier-g¨rbe u e o b (u) = i=0 Bin (u) bi . pl. a a a e Az OpenGL-ben a k¨vetkez˝k´ppen tudunk B´zier-g¨rb´t megjelen´ o o e e o e ıteni: • Defini´lunk egy ugynevezett egydimenzi´s ki´rt´kel´st a glMap1*() paranccsal. a fel¨letet pedig k¨zel´ o (a fel¨leten valamilyen s˝r˝s´ggel kisz´m´ oo u o ıt˝ u uue a ıtott pontokkal meghat´rozott) poligonokkal (poligonh´l´val) szok´s megjelen´ a ao a ıteni. Altal´ban u1 = 0. e o e e a a valamint azt. A bi pontokat kontroll. n i ui (1 − u)n−i = n! ui (1 − u)n−i i! (n − i)! (14. A (14. 113 . A grafikus rende e o e e o u u ıt´ e szerekben a g¨rb´ket k¨zel´ o (a g¨rb´n valamilyen s˝r˝s´ggel felvett pontokat ¨sszek¨t˝) o e o ıt˝ o e uue o oo t¨r¨ttvonallal. ´ pl. e u o e e ee • Enged´lyezz¨k a megfelel˝ objektum ki´rt´kel´s´t glEnable(). illetve poligon oldalai el´g r¨videk.2) Bin (u) = alakban ´ ırhat´ fel. fejezet G¨rb´k ´s fel¨ letek rajzol´sa o e e u a A geometriai alapelemekkel csak pont. Bin (u) pedig o e u az i-edik n-edfok´ Bernstein-polinomot jel¨li. a ´ o e e e azaz megadjuk a B´zier-g¨rbe rendj´t. v´gpontja bn ´s a t¨bbi megadott ponton o e ır o e e o ´ltal´ban nem megy ´t (kiv´ve. param´tertartom´ny´t. illetve fel¨let benyom´s´t keltik vizu´lisan. azonban oo e o term´szetesen ig´ny van g¨rb´k ´s g¨rb¨lt fel¨letek megjelen´ es´re is. vagy B´zier pontoknak nevezz¨k. kontrollpontjait. a modellt´rbeli pontot a e vagy sz´ ınt. illetve fel¨letek ilyen t´ u megjelen´ es´t param´teres form´ban le´ alakzao e u ıpus´ ıt´ e e a ırt tokon c´lszer˝ alkalmazni.1) (14. ha a pontok egy egyenesre illeszkednek). e u Az OpenGL a B´zier-g¨rb´k ´s fel¨letek megjelen´ es´t t´mogatja k¨zvetlen¨l.14. melynek a kezd˝pontja b0 .1) kifejez´s u o ´ a e olyan g¨rb´t ´ le. u ∈ [u1 . ıv. Ha a k¨zel´ o t¨r¨ttvonal . o ıgy az Hermite-´ Ferguson-spline. azone o e e u ıt´ e a o u ban a B´zier-alakzatokkal sok m´s. B-spline. k¨vetkez´sk´ppen sima g¨rbe. 14. t¨r¨ttvonal ´s poligon rajzolhat´.1. oe o e e o u aa a A g¨rb´k. u2 = 1.

hogy a point t¨mbben h´ny adatot kell ´tadni. t. r. a stride param´terrel e e o e a a a o e pedig azt adjuk meg. y. y. T¨bb ki´rt´kel˝t is defini´lhatunk. B´zier-g¨rb´t le´ o. hogy a pontok mit reprezent´lnak. w koordin´t´i u aa sz´ ınindex R. Az order param´ter a g¨rbe rendje (foksz´m + 1). A glBegin() ´s glEnd() p´r k¨z¨tt aktiviz´lva a megfelel˝ OpenGL e a o o a o parancs(ok) kiad´s´nak hat´s´t is el´rj¨k. amib˝l az is k¨vetkee a o o zik. teh´t ha GL MAP1 VERTEX 3 vagy aa aa e u a e u e GL MAP1 VERTEX 4 enged´lyezett. TYPE u1. Ha a u ınu e e e e u ugyanabb´l a t´ o ıpusb´l t¨bb is enged´lyezett. Az enged´lyezett egydimenzi´s lek´pez´sek u helyen vett helyettes´ esi ´rt´k´t e o e e ıt´ e e e sz´m´ a ıtja ki. azaz kisz´m´ e e e e u ıv´ e e e e a ıtjuk a helyettes´ esi ´rt´ket glEvalCoord1*(). o 14. A points param´ter az els˝ pont els˝ koordin´t´j´nak a c´ a a e o o aaa ıme. A pontok reprezent´lhatnak. A target pae o e ır´ ´ o e e o a ram´terrel kell megadnunk. t. norm´lvektorokat. t´bl´zat. z koordin´t´i u aa cs´cspontok x. A sz´m´ ast v´gz˝ parancs a u aa a ıt´ e o kiad´sa el˝tt ugyanezzel a param´terrel kell enged´lyezni (glEnable())a ki´rt´kel´st. de adatt´ o e e o a ıpusonk´nt csak egyet enged´lyezz¨nk. GLint stride. Az glMap1*() parancs target param´ter´nek ´rt´kei ´s jelent´s¨k a a e e e e e eu target GL MAP1 GL MAP1 GL MAP1 GL MAP1 GL MAP1 GL MAP1 GL MAP1 GL MAP1 GL MAP1 jelent´se e cs´cspontok x. GLint order. t text´rakoordin´t´k u aa s. void glEvalCoord1{fd}v (const TYPE *u).• A megadott lek´pez´st ki´rt´kelj¨k a k´ ant param´ter´rt´kekn´l. ugynevezett egydimenzi´s ki´rt´kel˝t defini´l. RGBA vagy sz´ a a a u ınindex adatokat. A sz´ ınkomponensek norm´lis koordin´t´i a aa s text´rakoordin´t´k u aa s. ıt´ e e void glMap1{fd} (GLenum target. a rendszer a legt¨bb komponenssel megado o e o hat´t veszi figyelembe. cs´cspontokat. vagy text´rakoordin´t´kat. B. o a a oe aa t´bl´zat tartalmazza. hogy k´t egym´st k¨vet˝ pont k¨z¨tt h´ny float vagy double t´ u e a o o o o a ıpus´ v´ltoz´ van. akkor egy cs´cspontot hoz l´tre (mintha a 114 . q text´rakoordin´t´k u aa VERTEX 3 VERTEX 4 INDEX COLOR 4 NORMAL TEXTURE COORD TEXTURE COORD TEXTURE COORD TEXTURE COORD 1 2 3 4 void glEvalCoord1{fd} (TYPE u). A lehet˝s´gek teljes list´j´t a 14.1. e e u teh´t csak egyfajta cs´cspont-. const TYPE *points).1. sz´ vagy text´ra-ki´rt´kel´st enged´lyezz¨nk. G. z. aminek meg kell egyeznie a o e o a a pontok sz´m´val. a o e e e e e u1 ´s u2 a B´zier-g¨rbe param´tertartom´ny´nak hat´rait jel¨li. TYPE u2. r text´rakoordin´t´k u aa s.

A g¨rb¨let v´ltoz´s´hoz alkalmaze o o u a aa kod´ feloszt´si algoritmust nem k¨nny˝ tal´lni tetsz˝leges g¨rb´hez. ha pedig a GL MAP1 NORMAL. for(i = p1. u2 ] ´rtelmez´si tartom´nyt n egyenl˝ r´szre osztva o e e e a o e a param´tertartom´nyban r´cspontokat hozzunk l´tre. akkor a glNormal*() parancsot. GLint p1. Az ´ l´trehozott cs´cspontokhoz a kisz´m´ ıgy e u a ıtott sz´ ınt. hogy ha az oldalak nagyon o e a u r¨videk (pl. GL MAP1 TEXTURE COORD 3.u2). i <= p2. a kerek´ esi hib´b´l ad´d´ elt´r´st˝l eltekintve. melyek ”majdnem” egyenes szao o ıt´ e o e e kaszt ´s ”nagyon g¨rb¨lt” r´szeket is tartalmaznak. ugyanis igaz. norm´list ´s a e text´rakoordin´t´t rendeli a rendszer. GL MAP1 TEXTURE COORD 4. u2] intervallumot n egyenl˝ r´szre osztva egy n + 1 darab r´cspontot hoz l´tre o e a e az ´rtelmez´si tartom´nyban.glVertex*() parancsot adtuk volna ki). e e ırja u e e A glEvalCoord1*() paranccsal egyetlen g¨rbepontot sz´m´ o a ıthatunk ki.u1. glEnd(). ha GL MAP1 INDEX enged´lyezett. vagyis az a gyakran haszn´lt durva megold´s. ahol n a glMapGrid1*() o a oe e paranccsal megadott oszt´sok sz´ma). 1 pixel hossz´ak).u1) / n). Minden enged´lyezett ki´rt´kel˝vel kisz´molja a kurrens r´cspontok p1 -t˝l p2 -ig tere e e o a a o jed˝ intervallum´hoz tartoz´ ´rt´keket ( 0 ≤ p1 ≤ p2 ≤ n . akkor a glTexCoord*() parancsot. az oldalhosszakat addig kell cs¨kkene o u e o teni. A feladat megold´s´n´l teh´t figyelembe kell venni a e aa a a g¨rbe g¨rb¨let´nek v´ltoz´s´t is. e e a void glEvalMesh1 (GLenum mode.p1. Olyan g¨rb´k eset´n. Ilyen o u u o e e e a a g¨rbe a s´ o ıkon. Az [u1. ake kor a glIndex*() parancsot szimul´lja. mint tudjuk. A rendszer lehet˝v´ teszi azt is. ´s az ezekhez tartoz´ g¨rbepontokat e a o e e o o k¨ss¨k ¨ssze egyenes szakaszokkal. A mode param´ter a GL POINT vagy GL LINE a a e ´rt´keket veheti fel. glEvalMesh1(mode. parancsok hat´sa. i++) glEvalCoord1f(u1 + i* (u2 .p2). A o oo o o glMapGrid1f(n. akkor a gla Color*(). melynek megfelel˝en a g¨rb´n kisz´m´ e e o o e a ıtott pontokat pont alapelemmel jel¨li meg. TYPE u1. majd egyetlen f¨ggv´nyh´ assal e a a e u e ıv´ kisz´m´ a ıtsuk a r´cspontokhoz tartoz´ g¨rbepontokat. de ez m´r biztosan t´l sok r´szre ıg o u e o e a u e bontja a majdnem egyenes r´szt. Az esetek o u o a a eu t¨bbs´g´ben azonban az ¨sszes oldal hossz´nak cs¨kkent´se pazarl´ (t´l sok szakaszt taro e e o a o e o u talmaz´) k¨zel´ est eredm´nyez. m´ a nagyon g¨rb¨l r´sz is megfelel˝ lesz a k´pen. megegyezik a k¨vetkez˝ a ıt´ a o o o ee o o o programr´szlet´vel: e e glBegin(mode). a o o void glMapGrid1{fd} (GLint n. ha GL MAP1 COLOR 4. amennyiben azok enged´lyezettek. Az ´ kisz´m´ e a a e e ıgy a ıtott ´rt´kekkel azonban nem ´ fel¨l a kurrens ´rt´keket. ´ n n¨vel´s´vel el˝bb-ut´bb eszt´tikus k´pet kao u o ıgy o ee o o e e punk”. G¨rb´k megrajzol´sa nem egyszer˝ feladat. TYPE u2 ). ha GL MAP1 TEXTURE COORD 1. csak az egyenes ´s a k¨r. csak konstans g¨rb¨let˝ g¨rb´k eset´n eredm´nyezhet optim´lis megold´st. a nem enu aa e ged´lyezettekhez pedig a rendszer ´ltal t´rolt kurrens ´rt´ket. hogy az [u1 . vagy t¨r¨ttvonallal k¨ti ¨ssze. de a B´zier-g¨rb´k o a o u a o o e e o e 115 . miszerint: o o u e a aa a a ”osszuk fel a param´tertartom´nyt n egyenl˝ r´szre. GL MAP1 TEXTURE COORD 2. sz´ ınindexet. akkor biztosan j´ vizu´lis hat´st ´r¨nk el. GLint p2 ).

v2 ] . A target pae u ır´ ´ e o e e o a ram´ter a 14. A points param´ter az els˝ pont els˝ koordin´t´j´nak a c´ e o o aaa ıme. A fenti szempontokat mindenk´ppen e c´lszer˝ figyelembe venni. A fel¨letek poligonh´l´val val´ k¨zel´ ese m´g ¨sszetettebb feladat. vorder a e ık e u pedig a v ir´ny´ rendj´t (foksz´m + 1) jel¨li. i=0 j=0 A B´zier-fel¨let param´teres alakja e u e s (u. akkor a megfelel˝ k´tdimenzi´s e u a e aa o e o 116 . Az enged´lyezett k´tdimenzi´s lek´pez´seknek a param´ters´ (u. GLint vstride. TYPE v1. B´zier-fel¨letet le´ o. u ∈ [u1 .2. TYPE u1. ´s a cs´csponthoz kapcsolja. ıt´ e o o e e void glMap2{fd} (GLenum target. GLint vorder. Ha az enged´lyezett lek´pez´s cs´cspontra e e e u vonatkozik . TYPE u2. ha a norm´lisok automatikus l´trehoz´s´t a e u a e aa aa a e u glEnable(GL AUTO NORMAL) parancs kiad´s´val kor´bban enged´lyezt¨k.a glMap2*() parancs target param´tere GL MAP2 VERTEX 3 e vagy GL MAP2 VERTEX 4 . v) = m ahol Bin (u) ´s Bj (v) ´rtelmez´se (14. GLint uorder. bele´rtve a parancsok nev´t is. const TYPE *points). kiv´ve. A fel¨let ´rtelmez´si tare e e e e u e e tom´nya az (u. hogy a pontok hol adottak. A fel¨let ´tmegy a b00 . B´zier-fel¨ let megjelen´ ese e u ıt´ n m m Bin (u) Bj (v) bij .2) szerinti. A sz´m´ ast v´gz˝ parancs kiad´sa el˝tt ugyanezzel ırja o a ıt´ e o a o a param´terrel kell enged´lyezni (glEnable())a ki´rt´kel´st. double) m´rt t´vols´g´t adja a o o a a ıpus´ e a a a meg. b0m . a t¨bbi ponton azonban ´ltal´ban nem. GLint ustride.2. haszn´ljuk a GLU. TYPE v2. ugynevezett k´tdimenzi´s ki´rt´kel˝t defini´l. ´s az els˝ kontrollpont els˝ koordin´t´ja a ctrlpoints[10][10][0]. Ha nem enged´lyezt¨k a norm´lisok automatikus l´trehoz´s´t. ha a kontrollpontok egy o a a e s´ ıkra illeszkednek. v) param´ters´ [u1. vagy a GLUJ f¨ggv´nyk¨nyvt´rak a a u e o a NURBS objektumok megjelen´ es´re felk´ alt lehet˝s´geit. t´bl´zat szerinti ´rt´keket veheti fel. akkor ustride = 30·3. hogy ha csak lehet. v) koordin´t´j´ e e o e e e ık aau pontj´ban vett ´rt´k´t sz´m´ a e e e a ıtja ki. v ∈ [v1 . A B´zier fel¨let megjelen´ esekor k¨vetend˝ elj´r´s anal´g a B´zier-g¨rbe megjee u ıt´ o o aa o e o len´ es´hez k¨vetend˝vel. ha a kontrollpontok t¨mbje e a o GLdouble ctrlpoints[50][30][3]. uorder a fel¨let u. u2 ] . u2] × [v1. vagyis a g¨rb´hez hasonl´an azt e a a e e o e o ´ el˝. v2] t´glalapja.a rendszer automatikusan l´trehozza a norm´lisokat e a is. void glEvalCoord2{fd}v (const TYPE *u.eset´n a de Casteljau-algoritmus biztos´ e ıtja ezt. const TYPE *v ). e o o aa vstride = 3 ´s points = &(ctrlpoints[10][10][0]). Ez´rt azt aa u ao o o ıt´ e o e tan´csoljuk. ha saj´t felbont´si algoritmust akarunk kital´lni g¨rb´k raje u a a a o e zol´s´ra. bn0 . e void glEvalCoord2{fd} (TYPE u. bnm e e e u a kontrollpontokon. TYPE v ). ıt´ e ın´ oe 14. Az ustride ´s vstride param´terek k´t a u e a o e e e egym´st k¨vet˝ pontnak a koordin´t´k t´ aban (float. P´ld´ul.

14.2. t´bl´zat. Az glMap2*() parancs target param´ter´nek ´rt´kei a a e e e e target GL MAP2 GL MAP2 GL MAP2 GL MAP2 GL MAP2 GL MAP2 GL MAP2 GL MAP2 GL MAP2 jelent´se e cs´cspontok x, y, z koordin´t´i u aa cs´cspontok x, y, z, w koordin´t´i u aa sz´ ınindex R, G, B, A sz´ ınkomponensek norm´lis koordin´t´i a aa s text´rakoordin´t´k u aa s, t text´rakoordin´t´k u aa s, t, r text´rakoordin´t´k u aa s, t, r, q text´rakoordin´t´k u aa

VERTEX 3 VERTEX 4 INDEX COLOR 4 NORMAL TEXTURE COORD TEXTURE COORD TEXTURE COORD TEXTURE COORD

1 2 3 4

norm´lis-lek´pez´s defini´l´s´val ´s enged´lyez´s´vel hozhatjuk l´tre a norm´lisokat. Ha a e e aa a e e ee e a az el˝z˝k egyik´t sem enged´lyezt¨k, akkor a rendszer a kurrens norm´list rendeli a o o e e u a cs´csponthoz. u void glMapGrid2{fd} (GLint nu, TYPE u1, TYPE u2, GLint nv, TYPE v1, TYPE v2 ); Az [u1, u2] param´tertartom´nyt nu , a [v1, v2] param´tertartom´nyt nv egyenl˝ r´szre e a e a o e osztva egy (nu + 1) × (nv + 1) pontb´l ´ll´ r´csot hoz l´tre az ´rtelmez´si tartom´nyban. o a o a e e e a void glEvalMesh2 (GLenum mode, GLint p1, GLint p2, GLint q1, GLint q2 ); A glMapGrid2*() paranccsal l´trehozott r´cspontokban minden enged´lyezett e a e ki´rt´kel˝vel kisz´m´ e e o a ıtja a fel¨let pontjait az (nu + 1) × (nv + 1) r´cspontokban, ´s a u a e mode param´ter GL POINT ´rt´ke eset´n ponth´l´val, GL LINE eset´n poligonh´l´val, e e e e ao e ao GL FILL eset´n pedig kit¨lt¨tt poligonh´l´val jelen´ meg. A e o o ao ıti glMapGrid2f(nu,u1,u2,nv,v1,v2); glEvalMesh1(mode,p1,p2,q1,q2); parancsok hat´sa gyakorlatilag a k¨vetkez˝ programr´szletek valamelyik´vel egyezik meg, a o o e e elt´r´s csak a kerek´ esi hib´b´l ad´dhat. ee ıt´ a o o 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.

Racion´lis B-spline (NURBS) g¨rb´k ´s fel¨ lea o e e u tek megjelen´ ese ıt´

Napjaink sz´m´ og´pes rendszereinek legelterjedtebb g¨rbe- ´s fel¨letle´ asi m´dszere a a ıt´ e o e u ır´ o racion´lis B-spline. Szinonimak´nt haszn´latos a NURBS (Non-Uniform Rational Ba e a Spline) elnevez´s is. Nagy n´pszer˝s´g¨ket az is indokolja, hogy sokf´le alak ´ e e ue u e ırhat´ le o vel¨k egzaktul, ´ pl. a B´zier-g¨rbe vagy a hagyom´nyosan haszn´lt k´pszeletek is. u ıgy e o a a u Jelen anyagban csak a vonatkoz´ OpenGL f¨ggv´nyek meg´rt´s´hez elengedhetetlen¨l o u e e ee u sz¨ks´ges defin´ okat adjuk meg. u e ıci´ Az OpenGL-ben az al´bbi elj´r´st k¨vetve tudunk NURBS g¨rb´t vagy fel¨letet mega aa o o e u jelen´ ıteni: • L´trehozunk egy uj NURBS objektumstrukt´r´t a gluNewNurbsRenderer() pae ´ ua ranccsal. Az itt visszakapott c´ ımmel tudunk hivatkozni az objektumra a tulajdons´gok be´ll´ asakor ´s a megjelen´ eskor. a a ıt´ e ıt´ • A gluNurbsProperty() paranccsal be´ll´ a ıthatjuk az objektum megjelen´s´t beee foly´sol´ param´tereket, tov´bb´ ezzel enged´lyezhetj¨k a k¨zel´ o t¨r¨ttvonal, ila o e a a e u o ıt˝ o o letve poligonh´l´ adatainak visszanyer´s´t. ao ee • A gluNurbsCallback() paranccsal megadhatjuk azt a f¨ggv´nyt, amit a rendszer u e megh´ ha a NURBS objektum megjelen´ ese sor´n hiba fordul el˝, valamint meıv, ıt´ a o gadhatjuk azt a f¨ggv´nyt, amivel a k¨zel´ o t¨r¨ttvonal, illetve poligonh´l´ adatait u e o ıt˝ o o ao visszakapjuk. o u a e a • A g¨rbe-, illetve fel¨letmegad´st ´s rajzol´st a gluBeginCurve(), illetve gluBeginSurface() parancsokkal kezdj¨k. u • A g¨rb´k, illetve fel¨letek megad´s´ra a gluNurbsCurve(), illetve gluNurbsSuro e u aa face() parancsok szolg´lnak. Ezeket legal´bb egyszer ki kell adni a k¨zel´ o t¨r¨tta a o ıt˝ o o vonal, illetve poligonh´l´ l´trehoz´sa ´rdek´ben, de megh´ ao e a e e ıvhat´k a fel¨leti norm´lis o u a ´s a text´rakoordin´t´k l´trehoz´s´hoz is. e u aa e aa

118

• A gluEndCurve(), illetve gluEndSurface() parancsokkal z´rjuk a NURBS oba jektum megjelen´ es´t. ıt´ e

GLUnurbsObj *gluNewNurbsRenderer (void); Egy uj NURBS objektumstrukt´r´t hoz l´tre ´s ad vissza. Az objektumra a tulajd´ ua e e ons´gok be´ll´ as´n´l ´s a megrajzol´sn´l ezzel az azonos´ oval kell hivatkozni. Ha nincs a a ıt´ a a e a a ıt´ el´g mem´ria az objektum allok´l´s´hoz, akkor a visszaadott c´ NULL. e o aa a ım void gluDeleteNurbsRenderer (GLUnurbsObj *nobj ); T¨rli az nobj c´ o ımen t´rolt NURBS objektumot, felszabad´ a lefoglalt mem´ri´t. a ıtja o a void gluNurbsProperty (GLUnurbsObj *nobj, GLenum property, GLfloat value); Az nobj azonos´ oj´ NURBS objektum megjelen´s´nek tulajdons´gai ´ll´ ıt´ u ee a a ıthat´k be o seg´ eg´vel. A property param´ter a tulajdons´g azonos´ oja, value pedig az ´rt´ke. A ıts´ e e a ıt´ e e property param´ter lehets´ges ´rt´kei ´s jelent´s¨k: e e e e e eu • GLU DISPLAY MODE eset´n a megjelen´ es m´dja ´ e ıt´ o ırhat´ el˝, ekkor o o a value param´ter ´rt´ke GLU FILL, GLU OUTLINE POLYGON vagy e e e GLU OUTLINE PATCH lehet. GLU FILL eset´n kit¨lt¨tt poligonoke o o kal, GLU OUTLINE POLYGON eset´n a k¨zel´ o poligonok oldalaival, e o ıt˝ GLU OUTLINE PATCH eset´n pedig a fel¨letfolt hat´rol´ g¨rb´ivel (bele´rtve a e u a o o e e trimmel˝ g¨rb´ket is) ´br´zolja a NURBS fel¨letet a rendszer. Alap´rtelmez´s: o o e a a u e e GLU FILL. e ırhatjuk el˝, hogy a k¨zel´ o t¨r¨ttvonal, ilo o ıt˝ o o • GLU NURBS MODE eset´n azt ´ letve poligonh´l´t meg kell jelen´ ao ıteni, vagy a visszah´ asi mechanizmust kell ıv´ aktiviz´lni, hogy a k¨zel´ o t¨r¨ttvonal, illetve poligonh´l´ adatai el´rhet˝k a o ıt˝ o o ao e o legyenek. Az els˝ esetben a value param´tert GLU NURBS RENDERER o e ´rt´kre kell ´ll´ e e a ıtani, ami egyben az alap´rtelmez´s is, a m´sodik esetben pedig e e a GLU NURBS TESSELLATOR-ra. • GLU CULLING eset´n a GL TRUE ´rt´k megad´s´val a megjelen´ esi folyamat fele e e aa ıt´ gyors´ ıthat´, ugyanis ekkor a rendszer nem v´gzi el a t¨r¨ttvonallal, illetve poligonoko e oo kal val´ k¨zel´ est, ha az objektum az ´br´zoland´ t´rr´szt le´ o csonka g´l´n (vagy o o ıt´ a a o e e ır´ ua e e has´bon) k´ ul esik. Ha ez a param´ter GL FALSE - ami egyben az alap´rtelmez´s a ıv¨ e is -, akkor ilyen esetben is elv´gzi. e • GLU SAMPLING METHOD eset´n a mintav´telez´si m´dszert adhatjuk meg, e e e o m´sk´nt n´zve azt, hogy a k¨zel´ es pontoss´g´t milyen m´don akarjuk el˝´ a e e o ıt´ a a o oırni. Ha value ´rt´ke: e e o ıt˝ o o – GLU PARAMETRIC ERROR, a k¨zel´ o t¨r¨ttvonalnak, illetve poligonoknak a g¨rb´t˝l, illetve a fel¨lett˝l pixelekben m´rt t´vols´ga nem lehet nagyobb a o eo u o e a a e gluNurbsProperty() type = GLU SAMPLING TOLERANCE param´terrel val´ megh´ as´n´l megadott value ´rt´kn´l. o ıv´ a a e e e 119

o – GLU DOMAIN DISTANCE. hogy a mintav´telez´si a a o e u e e e e e m´dszer GLU DOMAIN DISTANCE. e o ıt˝ o o illetve poligonok oldalainak pixelekben m´rt maxim´lis hossz´t ´ e a a ırjuk el˝. o ıt˝ o o illetve poligonh´l´ cs´cspontjait a param´tertartom´nyon m´rve milyen s˝r˝n ao u e a e uu sz´m´ a ıtsa ki a rendszer. Ha a o mintav´telez´si m´dszer: e e o – GLU PATH LENGTH. o 120 . Ezt a s˝r˝s´get u ir´nyban a gluNurbsProperty() uue a ıv´ a a type = GLU U STEP megh´ as´val. Alap´rtelmez´s: o a e e e 0.5. illetve a fel¨leten. hanem az objektum ter´nek egys´g´ben ´ e e e ırjuk el˝. hogy az v ir´ny´ param´ter 1 egys´g´re e a u e e e h´ny oszt´spont jusson a g¨rb´n. illetve poligonoknak o ıt˝ o o a g¨rb´t˝l. o Alap´rtelmez´s: 50.5. akkor a value param´terrel a k¨zel´ o t¨r¨ttvonal. illetve a fel¨lett˝l m´rt elt´r´s´nek pixelekben m´rt maximum´t o eo u o e eee e a ´ ırhatjuk el˝ a value param´terrel.– GLU PATH LENGTH. e o ıt´ a a Ha a mintav´telez´si m´dszer: e e o – GLU PARAMETRIC ERROR. illetve poligonok oldalainak az objektumkoordin´ta-rendszerben m´rt a e maxim´lis hossz´t ´ a a ırjuk el˝. a k¨zel´ o t¨r¨ttvonalnak. o e e • GLU V STEP eset´n azt adhatjuk meg. e e – GLU OBJECT PATH LENGTH. akkor azt adjuk meg. egyetlen elt´r´s. e a u e e e • GLU U STEP eset´n azt adhatjuk meg. v ir´nyban a type = GLU V STEP megh´ as´val ´ ıv´ a ırhatjuk el˝. Alap´rtelmez´s: 100. hogy a t´vols´got nem ee a a GLU PATH LENGTH-n´l le´ pixelben. illetve poo ıt˝ o o ligonoknak a g¨rb´t˝l. hogy egys´gnyi param´tertartom´nyon h´ny oszt´spont legyen. a k¨zel´ o t¨r¨ttvonal. o e e e – GLU OBJECT PARAMETRIC ERROR. hogy a ee t´vols´got nem pixelben. felt´ve. a k¨zel´ o t¨r¨ttvonalnak. hanem az objektum ter´nek egys´g´ben ´ a a e e e ırjuk el˝. illetve poligonok oldalainak pio ıt˝ o o xelekben m´rt hossza nem lehet nagyobb a gluNurbsProperty() type = e GLU SAMPLING TOLERANCE param´terrel val´ megh´ as´n´l megadott e o ıv´ a a value ´rt´kn´l. Ezekn´l a h´ asokn´l a value param´terrel azt ado e ıv´ a e hatjuk meg. Alap´rtelmez´s: 100. e e e – GLU OBJECT PATH LENGTH hat´sa csaknem teljesen megegyezik a a e ırtakkal. illetve a fel¨lett˝l m´rt elt´r´s´nek maximum´t ´ o eo u o e eee a ırhatjuk el˝ az objektumkoordin´ta-rendszerben a value param´terrel. Alap´rtelmez´s: 50. hogy az u ir´ny´ param´ter 1 egys´g´re h´ny oszt´spont jusson a g¨rb´n. illetve a fel¨leten. o e e • GLU PARAMETRIC TOLERANCE eset´n a k¨zel´ es pontoss´g´t adhatjuk meg. akkor a value param´terrel a k¨zel´ o t¨r¨tte o ıt˝ o o vonal. e e a a a • GLU SAMPLING TOLERANCE eset´n a k¨zel´ es pontoss´g´t ´ e o ıt´ a a ırhatjuk el˝. o – GLU OBJECT PARAMETRIC ERROR hat´sa majdnem megegyezik a a GLU PARAMETRIC ERROR-n´l le´ a ırtakkal. Alap´rtelmez´s: 0. hogy a mintav´telez´si a a o e u e e e m´dszer GLU DOMAIN DISTANCE. felt´ve. hogy a k¨zel´ o t¨r¨ttvonal. egyetlen elt´r´s.

u1 . Nlk (u) az l–edik k − 1–edfok´ normaliz´lt B–spline a u u u a alapf¨ggv´nyt jel¨li. A gluBeginCurve() parancs az nobj azonos´ oj´ NURBS g¨rbe megad´s´nak kezıt´ u o aa det´t jelzi. . a gluEndCurve() parancs pedig a v´g´t. Az u e 1. u e u a oe e Meg´llapod´s szerint 0/0=0. . Ha az els˝ k darab csom´´rt´k o e oe e aa e o o oe e megegyezik (u0 = u1 = · · · = uk−1 ).3.4) ıt´ u o e o 121 . egy´bk´nt e e u − uj uj+k − u Njk (u) = Njk−1 (u) + N k−1 (u) uj+k−1 − uj uj+k − uj+1 j+1 Nj1 (u) = (14. void gluNurbsCurve (GLUnurbsObj *nobj. A kett˝ k¨z¨tt a gluNurbsCurve() e e e o o o parancs egy vagy t¨bb megh´ as´val lehet a g¨rb´t le´ o ıv´ a o e ırni. Az nobj azonos´ oj´ NURBS g¨rb´t rajzolja meg. A gluNurbsCurve() parancsot pontosan egyszer kell a GL MAP1 VERTEX 3 vagy GL MAP1 VERTEX 4 param´terrel e megh´ ıvni. o e o oe e akkor a g¨rbe ´tmegy a dn kontrollponton. Ha ıt´ e e o a o a a ıt´ ennek a param´ternek a GL FALSE ´rt´ket adjuk. NURBS g¨rb´k rajzol´sa o e a Mindenekel˝tt defini´ljuk a NURBS g¨rb´ket ´s az ezekhez sz¨ks´ges normaliz´lt B-spline o a o e e u e a alapf¨ggv´nyt.• GLU AUTO LOAD MATRIX eset´n a GL TRUE ´rt´k. a dl pontokat kontrollpontoknak vagy de Boor–pontoknak. ha az utols´ k darab csom´´rt´k megegyezik (un+1 = un+2 = · · · = un+k ). . melyek ´rtelmez´s´hez az u0 . ha uj ≤ u < uj+1 0. hao a sonl´k´ppen. uorder a g¨rbe rendje (a (14. a a 14. GLfloat *uknot. void gluEndCurve (GLUnurbsObj *nobj ). . a wl ≥ 0 u skal´rokat pedig s´lyoknak nevezz¨k. un+1 ] (14. hogy az OpenGL szerverr˝l kell let¨lteni a n´z˝pontaa u o o e o modell. azonban egyıgy a o a a a bees˝ szomsz´dos csom´´rt´kek megad´s´val ez el´rhet˝.1. ami az alap´rtelmez´s is. GLenum type). un+k csom´´rt´kek sz¨ks´gesek. A k¨zb¨ls˝ csom´´rt´kek eset´ben legfeljebb o a o u o oe e e k − 1 egym´st k¨vet˝ eshet egybe.4) n l=0 Njk (u) wj j=0 kifejez´ssel adott g¨rb´t k −1–edfok´ (k–adrend˝) NURBS (racion´lis B–spline) g¨rb´nek e o e u u a o e nevezz¨k. e e e e e megad´s´val azt jelezz¨k. GLint uknot count. a o o void gluBeginCurve (GLUnurbsObj *nobj ).3) rekurzi´val defini´lt f¨ggv´nyt k − 1–edfok´ ( k–adrend˝) normaliz´lt B–spline o a u e u u a alapf¨ggv´nynek nevezz¨k. akkor a felhaszn´l´i programnak e e e ao kell szolg´ltatnia ezeket a m´trixokat a gluSamplingMatricies() paranccsal. GLint u stride. u ∈ [uk−1 . az uj ≤ uj+1 ∈ R sz´mokat pedig csom´´rt´keknek. a vet´ esi ´s a k´pmez˝-transzform´ci´ m´trix´t a megjelen´ eshez. u e o e ee oe e u e Az ´ defini´lt g¨rbe ´ltal´ban egyik kontrollponton sem megy ´t. akkor a g¨rbe ´tmegy a d0 kontrollponton. GLfloat *ctrlarray. a a ˙ Az n Nlk (u) wl dl r (u) = . GLint uorder.

GLint vknot count.kifejez´sbeli k). Ni (u) az i–edik k − 1–edfok´ normaliz´lt B–spline alapf¨ggv´nyt jel¨li (l´sd u u a u e o a a (14. e e o void gluNurbsSurface (GLUnurbsObj *nobj. vm+1 ] (14. . A kett˝ k¨z¨tt a gluNurbsSure e e o o o face() parancs egy vagy t¨bb megh´ as´val lehet a g¨rb´t le´ o ıv´ a o e ırni. GLint v stride. un+1 ] . u u void gluBeginSurface (GLUnurbsObj *nobj ). u e a u 14. Az nobj azonos´ oj´ NURBS fel¨letet rajzolja meg. type ´rt´ke GL MAP1 VERTEX 3 nem racion´lis B-spline eset´n.2. uknot count az u param´ter csom´´rt´keinek a a u 122 . gluEndTrim() parancsok k¨z¨tt kiadott u e o o gluPwlCurve() ´s gluNurbsCurve() parancsokkal ´rhet˝ el. . Racion´lis g¨rb´kn´l a kontrollpontokat homog´n koordin´t´kban kell megadni. u ∈ [uk−1 . teh´t a o e e e aa a w i di a (14. u knot count a csom´´rt´kek sz´ma (a kontrollpontok sz´ma + a rend. dn0 . . ctrlarray az els˝ kontrollo pont els˝ koordin´t´j´nak c´ o aaa ıme. v1 . akkor a fel¨let illeszkedik a d00 .3. GLint u stride. GLenum type). koordin´ta maga a s´ly lesz.5) (v) wij kifejez´ssel adott fel¨letet NURBS (racion´lis B–spline) fel¨letnek nevezz¨k. azaz a wi a kontrollpontokat meg kell szorozni a s´llyal ´s a 4. . GLfloat *vknot. Az NURBS fel¨ letek megjelen´ ese u ıt´ n m n i=0 j=0 p=0 q=0 s (u. vm+l csom´´rt´kek. u1 . . a gluEndSurface() parancs pedig a v´g´t. a wij ≥ 0 skal´rokat pedig s´lyoknak a u k nevezz¨k. A gluBeginSurface() parancs az nobj azonos´ oj´ NURBS fel¨let megad´s´nak kezıt´ u u aa det´t jelzi.3) kifejez´st). ha u0 = e oe e aa e o o e o o u1 = · · · = uk−1 .4) jel¨l´s´vel n + k + 1).4) kifejez´s wi s´lyait ´s di kontrollpontjait pi = e u e alakban kell ´tadni. uknot az els˝ csom´´rt´k c´ oe e o oe e ıme. e e ee oe e u e Njl (v)-hez pedig a v0 . v0 = v1 = · · · = vl−1 ´s vm+1 = vm+2 = · · · = e vm+l teljes¨l. GLint uknot count. e oe e a a a (14. A fel¨let trimmel´se a gluBeginTrim(). v ∈ [vl−1 . e a a e e a e a e GL MAP1 VERTEX 4 racion´lis B-spline eset´n. GLint uorder. GLfloat *uknot. d0m . oe e Az ´ defini´lt fel¨let ´ltal´ban egyik kontrollponton sem megy ´t. a dij pone u a u u tokat kontrollpontoknak vagy de Boor–pontoknak. vorder pedig a v ir´ny´. . un+k csom´´rt´kek sz¨ks´gesek. ustride k´t egym´st k¨vet˝ kontrollpontnak GLfloate a o o ban m´rt t´vols´ga. un+1 = un+2 = · · · = un+k . void gluEndSurface (GLUnurbsObj *nobj ). A gluNurbsSurface() parancsot pontosan egyszer kell a GL MAP2 VERTEX 3 vagy GL MAP2 VERTEX 4 param´terrel megh´ e ıvni. GLfloat *ctrlarray. uorder a fel¨let u ir´ny´ rendje ıt´ u u u a u e oe e (foksz´m + 1). . ´m egybees˝ ıgy a u a a a a o szomsz´dos csom´´rt´kek megad´s´val ez el´rhet˝. melyek ´rtelmez´s´hez az u0 . GLint vorder. A g¨rb´kkel anal´g m´don. v) = Nik (u) Njl (v) m k Np l (u) Nq wij dij . dnm kontrollpontokra. .

A type param´ter leggyakrabban GLU MAP1 TRIM 2. de nem metszhetik egym´st. Az nobj azonos´ oj´ NURBS fel¨lethez. ami azt jelenti. illetve v e ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga h´ny GLfloat v´ltoz´. GLint stride. T¨bb ilyen oo o e o e o a o a o e o z´rt hat´rt is megadhatunk.3. hogy egy z´rt . melyek egym´sba ´gyazhat´k (a trimmelt ter¨letben is lehet a a a a o u lyuk). un+1 ]×[vl−1 . Egy fel¨lethez t¨bb trimmel˝ g¨rbe is megadhat´. hogy u. akkor a o o aaa e u a lyuk hat´r´t az ´ramutat´ j´r´s´val megegyez˝ ir´ny´ as´ g¨rb´vel kell le´ aa o o aaa o a ıt´ u o e ırni.az egyik v´gpontja essen egybe a k¨vetkez˝ ¨ u a e o o kezd˝pontj´val. annak defini´l´sa sor´n a gluBeginTrim() ıt´ u u aa a ´s gluEndTrim() z´r´jelp´r k¨z¨tt adhatunk meg z´rt trimmel˝ g¨rb´ket.5) ´ u e e a kifejez´s jel¨l´seit haszn´lva eredetileg az [uk−1 . Ezt ugy tehetj¨k meg. hogy az ´rtelmez´si tartom´nyt. Ha ebbe a fel¨letbe egy lyukat akarunk v´gni. GL MAP2 TEXTURE COORD * a u e a e aa text´rakoordin´t´k. k¨z¨tt kell megadni. o A rendszer ´ltal megjelen´ a ıtett fel¨let mindig az ir´ny´ u a ıtott trimmel˝ g¨rb´t˝l balra van o o eo (a param´ters´ e ıkon n´zve). u aa Az u stride. azonban o e o e oo o a ugyeln¨nk kell arra.3. valamint az utols´ v´gpontja az els˝ kezd˝pontj´val . void gluEndTrim (GLUnurbsObj *nobj ). ¨nmag´t nem o a o e o o a o a metsz˝ hurkot alkossanak. Az ilyen fel¨letfoltokat trimmelt NURBS e o e aa a u ıtj¨ u foltnak nevezz¨k. 1] × [0. e ¨ u a ıt´ a aa void gluPwlCurve (GLUnurbsObj *nobj. Trimmelt fel¨ letek u El˝fordulhat. GLfloat *array. hogy a rendszer a g¨rb´t˝l balra l´v˝ pontokat tekinti az ´rtelmez´si tartom´ny o eo e o e e a pontjainak. A trimıt´ u u o oo mel˝ t¨r¨ttvonal cs´csainak sz´ma count. ctrlarray a kontrollh´l´ els˝ pontj´nak c´ e e ao o a ıme.sz´ma (uknot count = uorder + az u ir´ny´ kontrollpontok sz´ma). az els˝dleges ´rtelmez´si tartom´ny hat´r´nak ir´ny´ asa teh´t e o e e a aa a ıt´ a ´ramutat´ j´r´s´val ellent´tes. GLenum type). 1]) u e aa e ık e e e t¨r¨ttvonalakb´l ´s NURBS g¨rb´kb˝l ´ll´ z´rt g¨rb´kkel adhatjuk meg. vm+1 ] t´glalap. hogy a NURBS fel¨letfoltnak csak valamely darabj´t (darabjait) akarjuk o u a megjelen´ ıteni. A hat´rol´ g¨rb´k ir´ny´ a a o o e a ıtottak. Egy-egy trimmel˝ g¨rbe t¨bb NURBS e o o o o o g¨rb´b˝l (gluNurbsCurve())´s t¨r¨ttvonalb´l (gluPwlCurve()) is ´llhat. GL MAP2 NORMAL norm´lisok l´trehoz´s´hoz. e e e e a u e GL MAP2 VERTEX 4 racion´lis B-spline fel¨letn´l. a e a a a a o 14. A trimmel´s hat´r´t a param´ters´ egys´gn´gyzet´ben ([0. Az nobj azonos´ oj´ NURBS fel¨lethez egy trimmel˝ t¨r¨ttvonalat ad meg. A type param´ter lehets´ges ´rt´kei: GL MAP2 VERTEX 3 nem racion´lis B-spline fel¨let eset´n. o e o o u aa ´s gluEndSurface(nobj). mely a NURBS fel¨let hat´r´t ´ a u a a ırja le. de ezek nem metszhetik egym´st. vknot count pea a u a dig a v param´ter´. vagyis a gluBeginSurface(nobj). t¨r¨ttvonalak e oe a e oo ´s NURBS g¨rb´k felhaszn´l´s´val lesz˝k´ uk. void gluBeginTrim (GLUnurbsObj *nobj ). hogy o e 123 . ´s ugy kell ˝ket e ´ o megadni.. illetve v stride param´terekkel azt kell megadnunk. A trimmel˝ o g¨rb´ket (t¨bb is megadhat´) a fel¨let defini´l´sakor. ´s a cs´cspontok koordin´t´i az array c´ o oo u a e u aa ımen kezd˝dnek. A trimmel˝ e ao a o o a o o e o g¨rbe egy ir´ny´ o a ıtott z´rt hurok. u o o o o a ´s ugyeln¨nk kell az ir´ny´ asok helyes megv´laszt´s´ra. GLint count. mely a (14.

hanem o o e o ıt˝ ıtse azokat visszaadja a felhaszn´l´i programnak tov´bbi feldolgoz´sra.3. e ezeket jelen´ meg a be´ll´ ıti a ıtott tulajdons´goknak megfelel˝en. GLU ERROR.3 verzi´ja lehet˝v´ teszi. 2. exit(0). fprintf(stderr. w) homog´n koordin´t´kkal. Az errorCode a u e GLU NURBS ERRORi (i = 1. } 14. A k¨vetkez˝ l´p´sek ao a a o o e e sz¨ks´gesek ennek el´r´se ´rdek´ben: u e ee e e ıvjuk meg a gluNurbsProperty() f¨ggv´nyt a property = GLU NURBS MODE. t´bl´zatot). 37) ´rt´kek valamelyike lehet. Ha regisztr´ljuk hibaf¨ggv´ny¨nket.hiba). A stride e aa param´terrel az egym´st k¨vet˝ cs´cspontoknak GLfloatokban m´rt t´vols´g´t kell mee a o o u e a a a gadni. hogy a k¨zel´ o adatokat ne jelen´ meg a rendszer. A NURBS objektumokat k¨zel´ o adatok visszanyer´se o ıt˝ e A rendszer a NURBS objektumokat t¨r¨ttvonalakkal. A GLU f¨ggv´nyk¨nyvt´r a o u e o a 1. hibafigyel´s eset´n ´rt´ke GLU ERROR (ez a f¨ggv´ny e e e e u e m´s c´lra is haszn´lhat´. u e • H´ value = GLU NURBS TESSELLATOR param´terekkel. Amikor az nobj NURBS objektummal kapcsolatos f¨ggv´nyek a a u e v´grehajt´sa sor´n a rendszer hib´t ´szlel. mely jelent´s´t a e e ee gluErrorString() f¨ggv´nnyel k´rdezhetj¨k le.3. v) koordin´t´kkal adjuk meg. . a which param´ter lehets´ges ´rt´keinek teljes list´j´t a 14. void (*fn)(GLenum errorCode)).a param´ters´ e ıkra illeszked˝ cs´cspontokat az (u. //a hibaf¨ggv´ny u e { const GLubyte *hiba. Hibakezel´s e A GLU f¨ggv´nyk¨nyvt´r a NURBS objektumokkal kapcsolatban 37 k¨l¨nb¨z˝ hibaleu e o a uo o o het˝s´get figyel. Ezt a regisztr´ci´t a gluNurbsCallback() paranccsal v´gezhetj¨k o a o a o e u el. .3. v. hiba = gluErrorString(errorCode). . GLenum which. u e e u gluNurbsCallback(nurbs. 14. megh´ e a a a e ıvja az fn f¨ggv´nyt. illetve poligonokkal k¨zel´ ´s oo o ıti. void gluNurbsCallback (GLUnurbsObj *nobj.3.5.4. .’’NURBS hiba: %s\n’’. akkor ´rtes¨lhet¨nk az ´ltalunk oe a u e u e u u a elk¨vetett hib´kr´l. o u e a a a 124 . which a visszah´ as t´ ıv´ ıpusa. // a hibaf¨ggv´ny u e regisztr´l´sa a a void CALLBACK nurbshiba(GLenum errorCode). e • A gluNurbsCallback() f¨ggv´ny megh´ asaival regisztr´ljuk a rendszer ´ltal u e ıv´ a a megh´ ıvand´ f¨ggv´nyeket (l´sd a 14. a e a o e e e e aa t´bl´zat tartalmazza). de lehet o u aa GLU MAP1 TRIM 3 is. nurbshiba). mely esetben az (u.

void *uData). a A visszah´ ıvand´ f¨ggv´nyek k¨z¨l hat lehet˝v´ teszi. which a regisztr´land´ f¨ggv´nyt le´ o. void colorDat(GLfloat *color. G¨mb. void *uData). void endDat(void *uData). void *uData). void vertex(GLfloat *vertex ). Az adatokhoz az ´ltalunk regisztr´lt f¨ggv´nyeken kereszt¨l juthaa a u e u tunk hozz´. t´bl´zat szerint. void normalDat(GLfloat *norm.4. void texCoord(GLfloat *tCoord ). 14. void texCoordDat(GLfloat *tCoord. t´bl´zatot). 14. forg´si csonkak´p. ha a f¨ggv´ny nevek´nt a NULL ´ ıv´ a oo u a o u e e pointert adjuk meg. nobj a NURBS objektum azonos´ oja. a rendıt´ a o u e ır´ szer ´ltal defini´lt konstans a 14.3. a void gluNurbsCallbackData (GLUnurbsObj *nobj void *userData). hogy a felhaszn´l´ adatokat adjon o u e o u o e ao ´t neki. void beginDat(GLenum type. void error(GLenum errorCode). Ha a gluNurbsProperty() a a a a f¨ggv´nyt a property = GLU NURBS MODE. userData az ´tadand´ adat c´ ıt´ a o ıme.3. void normal(GLfloat *norm). void (*fn)()). A gluNurbsCallback() parancs param´tereinek ´rt´kei a a e e e a which param´ter ´rt´ke e e e GLU NURBS BEGIN GLU NURBS BEGIN DATA GLU NURBS TEXTURE COORD GLU NURBS TEXTURE COORD DATA GLU NURBS COLOR GLU NURBS COLOR DATA GLU NURBS NORMAL GLU NURBS NORMAL DATA GLU NURBS VERTEX GLU NURBS VERTEX DATA GLU NURBS END GLU NURBS END DATA GLU ERROR protot´ ıpus void begin(GLenum type). void *uData). akkor a GLU ERROR-on k´ ul 12 tov´bbi visso o ıv¨ a zah´ ıvand´ f¨ggv´nyt regisztr´hatunk (l´sd a 14. void color(GLfloat *color ). A k¨nyvt´r k´sz´ oi ezeket az alakzatokat ¨sszefoglal´an o uu ıt´ e o a e ıt˝ o o 125 . o u e a a a a A regisztr´lt f¨ggv´nyt b´rmikor kicser´lhetj¨k egy m´sikra a gluNurbsCallback() a u e a e u a ujabb megh´ as´val. GLenum which. t´bl´zat. nobj a NURBS objektum azonos´ oja. illetve t¨r¨lhetj¨k a regisztr´ci´t. k¨rgy˝r˝ ´s u e o a oe ıt o a u o uu e k¨rgy˝r˝cikk megjelen´ es´re. void *uData). k´ p ´s k¨rgy˝ r˝ rajzol´sa o u e o u u a A GLU f¨ggv´nyk¨nyvt´r lehet˝s´get biztos´ g¨mb. value = GLU NURBS TESSELLATOR u e param´terekkel h´ e ıvtuk meg el˝z˝leg. void end(void).3. void vertexDat(GLfloat *vertex.void gluNurbsCallback (GLUnurbsObj *nobj.

a a a u e u GLUquadricObj* gluNewQuadric (void). ´leivel vagy kit¨lt¨tt poligonjaival ´br´zolja a rendao u e o o a a szer. gluPartialDisk()). e a o a void gluQuadricCallback (GLUquadricObj *qobj.´s e a u u u o o e a e k´tk¨peny˝ hiperboloid. mivel a k¨rgy˝r˝ nem m´sodrend˝ fel¨let. e aa • Hibaf¨ggv´nyt regisztr´lhatunk a gluQuadricCallback() paranccsal. e ua • Be´ll´ a ıthatjuk az objektum megjelen´s´t befoly´sol´ attrib´tumokat. Az itt megadott fn f¨ggv´nyt h´ u e ıvja meg a rendszer. hogy a norm´lisokat a a minden cs´cspontban kisz´molja a rendszer. ıv´ e ım void gluDeleteQuadric (GLUquadricObj *qobj ). e A NURBS fel¨letekhez hasonl´an ezeket az alakzatokat is poligonh´l´val k¨zel´ a u o ao o ıti rendszer ´s a k¨zel´ o poligonh´l´t ´br´zolja. vagy u a e egy´ltal´n ne sz´moljon norm´list. o u o o e – A gluQuadricDrawStyle() paranccsal azt ´ ırhatjuk el˝. GLenum which. ´s ennek a c´ et adja ´ ıpus´ u a o e e ım´ vissza. vagyis azt a u e a f¨ggv´nyt. elliptikus ´s hiperbolikus paraboloid. a e e a ´br´zol´sa sor´n. amennyiben a oo u tov´bbiakban m´r nincs r´ sz¨ks´g¨nk. a u u o uu a u u a forg´sk´p csak speci´lis esete a m´sodrend˝ k´pnak (r´ad´sul a rendszer ezt hengera u a a u u a a nek nevezi) ´s a m´sodrend˝ fel¨letek t´lnyom´ t¨bbs´ge hi´nyzik (ellipszoid. ha a qobj megjelen´ ese sor´n ıt´ a hib´t ´szlel. amit a rendszer megh´ ha hib´t ´szlel az objektum l´trehoz´sa vagy u e ıv. ´ltal´nos m´sodrend˝ k´p e o u e a a a u u ´s henger). hogy mi tekintend˝ k¨ls˝. Sikertelen h´ as eset´n a visszaadott c´ NULL. e e ıt o e e u ıt´ e • L´tre kell hoznunk egy objektumstrukt´r´t a gluNewQuadric() paranccsal. a a a a – A gluQuadricTexture() paranccsal ´ ırhatjuk el˝ a text´rakoordin´t´k o u aa l´trehoz´s´t. vagy laponk´nt csak egyet. azaz felszabad´ a ıpus´ a o ıtja a l´trehoz´sakor lefoglalt mem´ri´t. a a a a • Meg kell h´ az objektumot megjelen´ o parancsot (gluSphere(). illetve bels˝ r´sznek. • T¨r¨lhetj¨k az objektumot a gluDeleteQuadric() paranccsal. Ha a megh´ a e a oe e ıvand´ f¨ggv´ny o u e 126 . ´ ee a o u ıgy: – A gluQuadricOrientation() paranccsal az ir´ny´ ast adhatjuk meg. gluCylinder(). ıvni ıt˝ gluDisk(). vagyis a ıt´ azt. void(*fn)()). A which v´ltoz´ ´rt´ke csak GLU ERROR lehet. Egy uj GLUquadricObj t´ u strukt´rav´ltoz´t hoz l´tre. T¨rli a qobj c´ o ımen t´rolt GLUquadricObj t´ u v´ltoz´t.m´sodrend˝ fel¨letnek nevezik. hogy a k¨zel´ o polio o ıt˝ gonh´l´t a cs´cspontjaival. – A gluQuadricNormal() paranccsal kiv´laszthatjuk. ami helytelen. egy. Az objektumok ´br´zol´s´nak a menete is e o ıt˝ ao a a a a aa nagym´rt´kben hasonl´ a NURBS g¨rb´k ´s fel¨letek megjelen´ es´hez.

Ez csak akkor aj´nlott. az objektumot a k¨zel´ o poligonh´l´ kit¨lt¨tt poligonjaival ´br´zolja. e e 127 . Ezek ´rtelmez´se g¨mb ´s forg´sk´p e o a e e e o e a u eset´n ´rtelemszer˝. az objektumot a k¨zel´ o poligonh´l´ cs´cspontjaival ´br´zolja. fejezetet) aj´nlott. de a o ıt˝ ao e a a komplan´ris. illetve GLU INSIDE. ami konstans e a e ´rnyal´shoz (l´sd a 4. a k´pok ´s hengerek alkot´inak megrajzol´sakor van jeo u e o a lent˝s´ge). GLenum drawStyle). ha a e a a megvil´g´ as nem enged´lyezett. A qobj objektum ´br´zol´s´nak m´dj´t ´ll´ be. GLenum normals). pontot). • GLU LINE. a rendszer nem hoz l´tre norm´lisokat. akkor a rendszer ezen objektummal kapcsolatos hiba a eset´n nem fog semmit megh´ e ıvni. melyek kifel´. k¨rgy˝r˝ eset´n a kifel´ ir´ny a lap z tengely´nek pozit´ fele. ami folytonos ´rnyal´s (l´sd a 4.4. GLenum orientation). u e a e void gluQuadricDrawStyle (GLUquadricObj *qobj. a a a e a Alap´rtelmez´s: GLU NONE. k¨z¨s oldallal b´ o poligonoknak a k¨z¨s oldalait nem rajzolja meg a o o ır´ o o (ennek az opci´nak pl. a a a a u uo a e • GLU SMOOTH. oe • GLU FILL. e e void gluQuadricNormals (GLUquadricObj *qobj. melynek sz¨veges le´ as´t ezen k´ddal megh´ o a o ır´ a o ıvott gluErrorString() f¨ggv´nnyel kapjuk meg (l´sd m´g a 14. A qobj objektum norm´lisainak kisz´m´ asi m´dj´t hat´rozza meg. o ıt˝ aoe a a • GLU SILHOUETTE. A felhaszn´l´i program az fn f¨ggv´ny param´ter´ben ao u e e e kapja vissza a hiba k´dj´t. laponk´nt csak egy norm´list hoz l´tre a rendszer. a ıt´ e • GLU FLAT. drawStyle lehets´ges ´rt´kei: a a aa o a a ıtja e e e o ıt˝ ao u a a • GLU POINT. o ıt˝ ao o o a a A poligonokat a norm´lisukhoz k´pest pozit´ (az ´ramutat´ j´r´s´val ellent´tes) a e ıv o o aaa e ir´ny´ as´nak tekinti. ile e e e e letve befel´ mutat´ norm´lisokat eredm´nyeznek.3. a ıt´ u void gluQuadricOrientation (GLUquadricObj *qobj. Az orientation paa a ıt´ a a ram´ter lehets´ges ´rt´kei GLU OUTSIDE. az objektumot a k¨zel´ o poligonh´l´ ´leivel ´br´zolja. e e u o uu e e a e ıv Alap´rtelmez´s: GLU OUTSIDE. fejezetet) eset´n aj´nlott. A normals paa a ıt´ o a a ram´ter lehets´ges ´rt´kei: e e e e • GLU NONE.c´ ımek´nt a NULL c´ e ımet adjuk ´t. minden cs´csponthoz k¨l¨n norm´list hoz l´tre. az objektumot a k¨zel´ o poligonh´l´ ´leivel ´br´zolja. A qobj objektum norm´lisainak ir´ny´ as´t hat´rozza meg.

A qobj azonos´ oj´ k¨rgy˝r˝t ´br´zolja a z = 0 s´ ıt´ u o u u a a ıkon. fed˝k¨re a z = height magass´gban van. A k¨rgy˝r˝ k¨ls˝ sugara o uu u o outerRadius. (s = 0. aaa a e o ´ e t = 1 → z = height legyen. GLdouble baseRadius. bels˝ sugara pedig innerRadius. vagy nem hoz l´tre (GLU FALSE). A qobj azonos´ oj´ k¨rgy˝r˝cikket ´br´zolja. GLint slices. void gluDisk (GLUquadricObj *qobj. z). GLdouble sweepAngle). tov´bb´ stacks darab z tengelyre illeszked˝ s´ e e oo a a o ıkkal (hossz´s´gi k¨r¨k).25 → (0. t = 1) → (0. 0. A norm´lisok ir´ny´ asakor a z tengely pozit´ fel´t teo uu a a ıt´ ıv e kinti kifel´ ir´nynak. 0). k¨ls˝ sugara outerRadius. A k¨zel´ eshez a rendszer slices darab o o a o ıt´ z tengelyre mer˝leges k¨rt ´s stacks darab alkot´t vesz fel. A e a a o text´ra lek´pez´s´t line´risan v´gzi el a k¨vetkez˝ megfeleltet´s szerint: (s = 1. (s = 0. GLboolean textureCoords). a cikk kezd˝sz¨ge az y tengely e u o o o o 128 . 0.5) → (−R. innerRadius = 0 eset´n teljes k¨rlap o e o j¨n l´tre.5. GLdouble height. GLdouble radius. A ua oo text´ra lek´pez´se a k¨vetkez˝: a text´ra t koordin´t´j´t line´risan k´pezi le a hossz´s´gi u e e o o u aaa a e ua k¨r¨kre az al´bbiak szerint t = 0 → z = −radius. GLint stacks). s = 0. t = 0. z). GLdouble innerRadius. GLint slices. radius sugar´ g¨mb¨t. GLdouble innerRadius.void gluQuadricTexture (GLUquadricObj *qobj. 0. Az s koordin´t´k lek´pez´se megegyezik a g¨mbn´l le´ aa e e o e ırtakkal. a e o e e o void gluCylinder (GLUquadricObj *qobj. R. 0. aa e e oo o o e s = 0. ami a gluQuadricOrientation() paranccsal megv´ltoztathat´. t = 1 → z = radius. az s kooroo a din´t´kat pedig a sz´less´gi k¨r¨kre a k¨vetkez˝ megfeleltet´s szerint s = 0 → (R. Megjelen´ a qobj azonos´ oj´. A qobj objektumhoz a textureCoords param´ter ´rt´k´nek megfelel˝en e e e e o text´rakoordin´t´kat is l´trehoz (GL TRUE). A text´ra lek´pez´se a k¨vetkez˝: a text´ra a a a a e o o u e e o o u t koordin´t´j´t line´risan k´pezi le az alkot´kra ugy.75 → (0.5 → (−R.5. 0. GLint rings). GLdouble outerRadius. Az alapk¨r sugara baseRao o e o o dius. ahol R = outerRadius. ıti ıt´ u o o e u u o o A k¨zel´ eshez a rendszer a z tengelyre mer˝legesen slices darab s´ o ıt´ o ıkkal metszi a g¨mb¨t o o (sz´less´gi k¨r¨k). Azt a qobj azonos´ oj´ z tengely˝ forg´si csonkak´pot ´br´zolja. GLdouble outerRadius. GLdouble topRadius. melynek alapk¨re a ıt´ u u a u a a o z = 0. orig´ k¨z´ppont´. A k¨zel´ eshez a rendszer slices darab k¨rcikkre ´s rings darab koncentrikus o e o ıt´ o e k¨rgy˝r˝re osztja az alakzatot. t = 0. GLint stacks). u aa e e Alap´rtelmez´s: GLU FALSE. A k¨rgy˝r˝cikk a z = 0 s´ ıt´ u o u u a a o uu ıkon j¨n o l´tre. z). GLint slices. 0) ´s (s = 0. hogy a megfeleltet´s t = 0 → z = 0. s = 0. z). R. az alap ´s fed˝k¨rt nem. GLint slices. t = 0) → e (0 − R. ahol R a z magass´gban l´v˝ sz´less´gi k¨r sugara. z). GLint rings. a fed˝k¨r sugara pedig topRadius. e e u e e o ıpus´ o u void gluSphere (GLUquadricObj *qobj. s = 1 → (R. topRadius = baseRadius eset´n pedig forg´shengert. 0). A rendszer csak a csonkak´p e a u pal´stj´t ´br´zolja. bels˝ sugara innerRadius. void gluPartialDisk (GLUquadricObj *qobj. A text´ralek´pez´s m´dja az objektum t´ at´l f¨gg. baseRadius = 0 eset´n forg´sk´p fel¨letet kao o e a u u punk. 0). GLdouble startAngle. −R.5) → u e ee a e o o e (R.

pozit´ fel´t˝l m´rt startAngle. k¨z´pponti sz¨ge sweepAngle. A norm´lisok ir´ny´ asa ´s a text´ra e o a a ıt´ e u lek´pez´se megegyezik a k¨rgy˝r˝n´l le´ e e o u u e ırtakkal. 129 . A sz¨geket fokban kell ıv e o e o e o o megadni. innerRadius = 0 eset´n k¨rcikket kapunk.

G¨rb´ket ´s fel¨ leteket megjelen´ o f¨ ggv´nyek o e e u ıt˝ u e Haszn´latuk gyakorlatilag megegyezik a GLU f¨ggv´nyk¨nyvt´r NURBS g¨rb´t. teh´t a gluNewNurbsRenderer() u ıt˝ u e a a a f¨ggv´nnyel l´tre kell hozni egy NURBS objektum strukt´r´t. GLfloat *ctrlarray.0 o a e a rendszerhez k´sz´ uk.h f´jlt. majd g¨rb´k eset´n a gluBeginCurve(). gluNurbsSurface() f¨ggv´nyek k¨z¨tt megh´ u e o o ıvhatjuk a megfelel˝ g¨rbe-.GLU SAMPLING TOLERANCE .1. Haszn´lat´hoz inklud´lni kell a gluj. illetve a u e o a o e fel¨letet megjelen´ o f¨ggv´nyeinek haszn´lat´val. fejezet A gluj f¨ ggv´nyk¨nyvt´r u e o a A GLUJ f¨ggv´nyk¨nyvt´r az OpenGL g¨rbe.1. fel¨letekn´l peu e o e e u e dig a gluBeginSurface(). GLint cp count. a stride az egym´st k¨vet˝ kontrollpontok GLfloatban m´rt t´vols´ga. A mell´kelt v´ltozat a Visual C/C++ 6. G¨rb´k rajzol´sa o e a void glujBezierCurve (GLUnurbsObj *nobj. Az nobj azonos´ oj´ B´zier-g¨rb´t rajzolja meg. illetve fel¨letrajzol´ gluj f¨ggv´nyt. valamint a programe ıt´ e e u a a a a hoz kell szerkeszteni a gluj32. vagyis Descartes-f´le koordin´t´val adottak). type param´ter lehets´ges ´rt´kei: GL MAP1 VERTEX 3 nem racion´lis B´ziere e e e a e g¨rbe eset´n (a pontok h´rom. mely ut´n ennek a tuu e e ua a lajdons´gai a gluNurbsProperty() f¨ggv´nnyel be´ll´ a u e a ıthat´k (a tulajdons´gok k¨z¨l o a o u a k¨zel´ es pontoss´g´t .´s fel¨letmegjelen´ o k´pess´g´nek u e o a o e u ıt˝ e e e kieg´sz´ es´re k´sz¨lt. GLenum type). gluEndCurve(). o e a e aa a e o e e e GL MAP1 VERTEX 4 racion´lis B´zier-g¨rbe eset´n (a pontok n´gy. aa 130 . a o o e a a *ctrlarray az els˝ kontrollpont c´ o ıme.lib k¨nyvt´rat. o o u o u e 15. ıt´ u e o e cp count a kontrollpontok sz´ma.15. azaz homog´n koordin´t´val adottak). GLint stride.1. e ıtett¨ 15.veszik figyelembe a GLUJ o ıt´ a a f¨ggv´nyek).

oe e a a *knot az els˝ csom´´rt´k c´ o oe e ıme. azaz homog´n koordin´t´val adottak). knot[knot count − order]] intervallumok mete szet´t veszi ´s az nobj azonos´ oj´ NURBS g¨rb´nek ezen intervallum f¨l¨tti darabj´t e e ıt´ u o e oo a jelen´ meg. GLint knot count. radius a k¨r sugara. GLfloat *tg). vagyis Descartes-f´le koordin´t´val adottak). o type param´ter lehets´ges ´rt´kei: GL MAP1 VERTEX 3 nem racion´lis Be e e e a spline g¨rbe eset´n (a pontok h´rom. A hs azonos´ oj´ Hermite-spline g¨rb´t rajzolja meg. GLenum type. azaz hoe aa e mog´n koordin´t´val adottak. GLint tg stride. GLfloat *points. GLenum type. aa void glujParamCurve (void (*fn)(float. u max] ´s [knot[order − 1]. GLfloat *knot. GLfloat *u fixed. GLfloat radius. vagyis e e e e a Descartes-f´le koordin´t´val adottak. Az nobj azonos´ oj´ k¨rt rajzolja meg.void glujHermiteSpline (GLUnurbsObj *hs. GLint stride. GLint cp count. ıti knot count a csom´´rt´kek sz´ma (knot count = order + a kontrollpontok sz´ma). GLfloat u max ). azaz hoe aa e mog´n koordin´t´val adottak. GLfloat *ctrlarray. Az fn f¨ggv´nnyel le´ param´teres g¨rb´nek az [u min. order a g¨rbe rendje. GLenum mode. e a a e *ctrlarray a kontrollpoligon els˝ pontj´nak a c´ o a ıme. GLfloat *cp. o type param´ter lehets´ges ´rt´kei: GL MAP1 VERTEX 3 ha a pontok h´rom. GLint order. a o o e a a *points a k¨r k¨z´ppontj´t ´s s´ anak norm´lis´t tartalmaz´ vektor c´ o o e a e ıkj´ a a o ıme. GLint cp stride. GLint stride. GL MAP1 VERTEX 4 ha a pontok n´gy. float *). Az [u min. vagyis e e e e a Descartes-f´le koordin´t´val adottak. GLenum type). e e a a oo fn a g¨rbe egy pontj´t kisz´m´ o f¨ggv´ny. a o o e a a *cp az els˝ pont c´ o ıme. e aa tg stride az egym´st k¨vet˝ ´rint˝vektorok GLfloatban m´rt t´vols´ga. A f¨ggv´ny protot´ o a a ıt´ u e u e ıpusa: 131 . e aa void glujTrimmedNurbsCurve (GLUnurbsObj *nobj. GL MAP1 VERTEX 4 ha a pontok n´gy. u max] intervallum f¨l¨tti u e ırt e o e oo r´sz´t ´br´zolja t¨r¨ttvonallal vagy pontjaival. stride a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban m´rve. a o oe o e a a *tg az els˝ ´rint˝vektor c´ oe o ıme. GLint ufixed count. ıt´ u o stride az egym´st k¨vet˝ pontok GLfloatban m´rt t´vols´ga. o e a e aa a o e e e GL MAP1 VERTEX 4 racion´lis B-spline g¨rbe eset´n (a pontok n´gy. GLfloat u max ). void glujCircle (GLUnurbsObj *nobj. GLfloat u min. GLfloat u min. type param´ter lehets´ges ´rt´kei: GL MAP1 VERTEX 3 ha a pontok h´rom. ıt´ u o e cp stride az egym´st k¨vet˝ pontok GLfloatban m´rt t´vols´ga.

mely a g¨rbe u param´ter˝ pontj´t kisz´m´ ´s a p vektorban visszaadja. e e P´ld´ul az x (u) = 1/ cosh (u) .void fn(float u. o ıt u e e o o oo oo a a GLUJ POINT MESH a g¨rb´t az adott u ´rt´kekhez tartoz´ pontokkal o e e e o ´br´zolja.100.1. h´ as´ pedig a 15. y (u) = u − tanh (u) koordin´taf¨ggv´nyekkel adott e a a u e traktrixot a void traktrix(float u.4.1. ´bra.NULL. lehets´ges ´rt´kei: ıt´ o a ırja o e e e GLUJ LINES a g¨rb´t ufixed count ≥ 0 sz´m´ r¨gz´ o e a u o ıtett u ´rt´khez tare e toz´ g¨rbepontot ¨sszek¨t˝ t¨r¨ttvonallal jelen´ meg.tanh(u). Ha ufixed count > 1 ´s ∗u f ixed = N U LL. akkor a param´tertartom´nyban egym´st´l egyenl˝ t´vols´gra l´v˝ ufixed count darab u ´rt´ket e a a o o a a e o e e r¨gz´ a f¨ggv´ny.).4.0.1.20. A ufixed count.-4./cosh(u). ´s az ezekhez tartoz´ pontokat ¨sszek¨t˝ t¨r¨ttvonalat ´br´zolja.-4. float p[3] ).. *u fixed param´terekre a GLUJ LINES -n´l le´ a a e a ırtak ´rv´nyesek.float p[3]) { p[0] = 1. A glujParamCurve( ) f¨ggv´nnyel ´br´zolt g¨rb´k a u e a a o e 132 .0. a u e ıv´ e a glujParamCurve(traktrix. A glujParamCurve(traktrix./a ´bra.GLUJ LINES. *u fixed a r¨gz´ o o o oo oo ıti o ıtett u ´rt´keket e e e tartalmaz´ vektor c´ o ıme.GLUJ POINT MESH.). ıv´ e a 15. o e u a a ıtja e mode a megjelen´ es m´dj´t ´ el˝.NULL. f¨ggv´nyh´ as eredm´nye a 15. } f¨ggv´nnyel ´ u e ırjuk le. p[2] = 0./b ´bra. p[1] = u .

GLint vfixed count. akkor a param´tertartom´nyban egym´st´l e e a a o e e o ıt u e e egyenl˝ t´vols´gra l´v˝ ufixed count darab u ´rt´ket r¨gz´ a f¨ggv´ny ´s az ezekhez o a a e o tartoz´ v ir´ny´ param´tervonalakat jelen´ meg. GLfloat *v fixed. az ezekhez tartoz´ fel¨leti pontokat a pontbeli norm´lis ment´n fl m´rt´kben elo u a e e e 133 .2. GLint u stride. Az ufixed count. u stride u ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. GLfloat *u fixed. m´gpedig az u e a a e a u o ıtett u ´rt´khez tartoz´ v ir´ny´. u a u vorder a fel¨let v ir´ny´ rendje. int ud. vagyis Descartes-f´le koordin´t´val adottak). GLint vorder. a u a *vknot az els˝ v ir´ny´ csom´´rt´k c´ o a u oe e ıme. GLenum type. vagy norm´lisait jelen´ meg. e *ctrlarray a kontrollh´l´ els˝ pontj´nak a c´ ao o a ıme. GLfloat *uknot. v max] ∩ [vknt[vorder − 1].1. e e o e ´rt´keket tartalmaz´ vektor c´ e e o ıme. GLint uorder. e a ıti uknot count az u param´ter csom´´rt´keinek sz´ma (uknot count = uorder + az u e oe e a ir´ny´ kontrollpontok sz´ma). e v stride v ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. kontrollpoligonj´t.15. A vfixed count ´s *v fixed param´terek o a u e ıti e e haszn´lata ezzel anal´g. vknot count az v param´ter csom´´rt´keinek sz´ma (vknot count = vorder + az v e oe e a ir´ny´ kontrollpontok sz´ma). a u a *uknot az els˝ u ir´ny´ csom´´rt´k c´ o a u oe e ıme. lehets´ges ´rt´kei: ıt´ o a ırja o e e e GLUJ CONTROL POLYGON MESH a kontrollh´l´t rajzolja meg. pontjait. GLfloat *ctrlarray. GLint ufixed count. uorder a fel¨let u ir´ny´ rendje. GLint uknot count. GLfloat u min. Az nobj azonos´ oj´ NURBS fel¨let kontrollpontjait. *v fixed a r¨gz´ Ha ufixed count > 1 ´s ∗u f ixed = N U LL. uknt[uknot count − uorder]]) × ([v min. GLint vknot count. int vd ). u e a e aa GL MAP2 VERTEX 4 racion´lis B-spline fel¨let eset´n (a pontok n´gy. ao GLUJ CONTROL POINT MESH a kontrollpontokat jelen´ meg. ıt´ u u a vagy a ([u min. u ir´ny´ param´tervonalak eset´n az ´rtelmez´si tartom´nyt ud egyenl˝ r´szre a u e e e e a o e osztja. Fel¨ letek szeml´ltet´se u e e void glujNurbsSurface (GLUnurbsObj *nobj. GLfloat u max. vknt[vknot count − vorder]]) tartom´ny f¨l¨tti a oo param´tervonalait. aa mode a megjelen´ es m´dj´t ´ el˝. a o a a e o o e a a e e e o a *u fixed ´s *v fixed param´terek jelent´se megegyezik a GLUJ ISO LINES m´dn´l le´ ırtakkal. ´s a vfixed count ≥ 0 e e o a u e ufixed count ≥ 0 sz´m´ r¨gz´ sz´m´ r¨gz´ a u o ıtett v ´rt´khez tartoz´ u ir´ny´ param´tervonallal. ıti GLUJ ISO LINES a fel¨letet param´tervonalaival ´br´zolja. *u fixed a r¨gz´ e e o a u e o ıtett u o ıtett v ´rt´keket tartalmaz´ vektor´. GLfloat v min. vfixed count. GLenum mode. GLfloat v max. u a u type param´ter lehets´ges ´rt´kei: GL MAP2 VERTEX 3 nem racion´lis Be e e e a spline fel¨let eset´n (a pontok h´rom. azaz homog´n a u e e e koordin´t´val adottak). u max] ∩ [uknt[uorder − 1]. a o GLUJ ISO LINES WITH OFFSET a fel¨letet param´tervonalaival ekviu e diszt´ns (att´l adott t´vols´gra l´v˝) g¨rb´kkel ´br´zolja. GLint v stride. GLfloat fl. GLfloat *vknot.

5. A 15.5. *u fixed. illetve o u e e o ıv´ a e a GLUJ NORMAL MESH param´terekkel val´ megh´ as´val hoztuk l´tre. e e a a 15. ´bra param´tervonalaival szeml´lteti a fel¨letet (GLUJ ISO LINES opci´).6. ´s a 15. A norm´lvektorok hossz´t ´s ir´ny´ as´t az fl e e a a e a ıt´ a param´ter befoly´solja: f l = 0 eset´n a norm´lvektorok hossza ´s ir´ny´ asa a kisz´m´ e a e a e a ıt´ a ıtott lesz. ´br´n a fel¨let kone o e a e e o a a a a a u trollh´l´j´t ´s a kontrollpontjait l´thatjuk. u e e ua u a Az ut´bbiakat a glujNurbsSurface() f¨ggv´nynek a GLUJ POINT MESH. hogy mi´rt van sz¨ks´g a param´tervonallal ekvidiszt´ns g¨rb´kre a a e u e e a o e o a a u a e e a (GLUJ ISO LINES WITH OFFSET opci´). Az ufixed count.2. hol a param´tervonal l´tszik a mege u u e a felel˝ pixeleken. *v fixed param´terekre a a a e a ırtak ´rv´nyesek. A 15. ´br´n a fel¨let ´rnyalt k´p´t l´tjuk.4.2.2. e e GLUJ ISO LINES -n´l le´ GLUJ NORMAL MESH a fel¨letnek a megadott u ´s v ´rt´kekhez tartoz´ u e e e o norm´lisait ´br´zolja. egyszer a e a a o o GLUJ CONTROL POINT MESH param´terrel. a param´tervonalak helyett a vel¨k ekvio e a e u 134 .tolja ´s ezeket a pontokat k¨ti ¨ssze egyenes szakaszokkal. *v fixed param´terekre a a a a e GLUJ ISO LINES -n´l le´ a ırtak ´rv´nyesek.15. Ez´rt csal´shoz folyamodunk. ´bra. Az ufixed count. A 15. szinte v´letlenszer˝en hol a fel¨let. A k´pen a param´tervonalak a e e e nem folytonosak. e e u o e ´bra azt demonstr´lja. amire folytonos vonallal r´rajzoltuk a param´tervonalakat. A 15. A v ir´ny´ param´tervonalak e o o a u e l´trehoz´sa ezzel anal´g. vfixed count.6. A 15. Ehhez a glujNurbsSurface() f¨ggv´nyt aoa e a u e k´tszer kell megh´ e ıvni: egyszer a GLUJ CONTROL POLYGON MESH.3. A fel¨let kontrollh´l´ja ´s kontrollpontjai a u ao e A 15. e a o GLUJ POINT MESH a fel¨letet a megadott u ´s v ´rt´kekhez tartoz´ u e e e o pontokkal ´br´zolja. . *u fixed. ´br´k ugyanannak a fel¨letnek a glujNurbsSurface() f¨ggv´nnyel a a u u e el´rhet˝ n´h´ny szeml´ltet´si m´dj´t demonstr´lj´k. vfixed count. ´br´n a kit¨lt¨tt poligonokkal ´br´zolt megvil´g´ a a a ıtott fel¨letet l´thatjuk (ezt a gluNurbsSurface() f¨ggv´nnyel rajzolu a u e tuk). egy´bk´nt a normaliz´lt norm´lvektor fl -szerese. valamint fel¨leti pontokat ´s ezekben az egys´gnyi hossz´s´g´ norm´lvektorokat.

´br´nkon a o e a a a a e a a a ez 0.diszt´ns g¨rb´ket rajzoljuk meg.016 egys´g . ´br´t. M´r nagyon csek´ly eltol´s . l´sd a 15.6. e o ıv´ a ee e e 135 .is elegend˝ a k´ ant hat´s el´r´se ´rdek´ben.

A fel¨let n´h´ny param´tervonala a u e a e 136 . n´h´ny fel¨leti pont ´s azokban a fel¨leti norm´lis u e a u e u a 15.4. ´bra. ´bra.3.15. A megvil´g´ a a ıtott fel¨let.

´bra.15.6. ´bra. A fel¨let ´s a param´tervonalaival ekvidiszt´ns g¨rb´k a u e e a o e 137 . A fel¨let param´tervonalakkal a u e 15.5.

type param´ter lehets´ges ´rt´kei: GL MAP2 VERTEX 3 nem racion´lis Be e e e a spline fel¨let eset´n (a pontok h´rom. *u fixed a r¨gz´ e e o a u e o ıtett u ´rt´keket tartalmaz´ vektor c´ e e o ıme. a u e e a o GLUJ POINT MESH a fel¨letet a megadott u ´s v ´rt´kekhez tartoz´ u e e e o pontokkal ´br´zolja. *v fixed a r¨gz´ o ıtett v ´rt´keket tartalmaz´ vektor´. vagy a ([u min. aa mode a megjelen´ es m´dj´t ´ el˝. e v stride v ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. Az ufixed count. uknt[uknot count − uorder]]) × ıti a oo ([v min. ıti GLUJ ISO LINES a fel¨letet param´tervonalaival ´br´zolja. a e e e e o o A v ir´ny´ param´tervonalak l´trehoz´sa ezzel anal´g. pontjait. m´gpedig ugy. *v fixed param´terekre a a a a GLUJ ISO LINES -n´l le´ a ırtak ´rv´nyesek. GLfloat *v fixed. GLfloat v min. vagyis Descartes-f´le koordin´t´val adottak). GLenum mode. vfixed count.void glujBezierSurface (GLUnurbsObj *nobj. A norm´lvektorok hossz´t ´s ir´ny´ as´t az fl e e a a e a ıt´ a param´ter befoly´solja: f l = 0 eset´n a norm´lvektorok hossza ´s ir´ny´ asa a kisz´m´ e a e a e a ıt´ a ıtott 138 . u max] ∩ [uknt[uorder − 1]. ao GLUJ CONTROL POINT MESH a kontrollpontokat jelen´ meg. vagy a ıt´ u e u a fel¨letet k¨zel´ o kit¨lt¨tt poligonokat. Az ufixed count. vfixed count. GLint v stride. e *ctrlarray a kontrollh´l´ els˝ pontj´nak a c´ ao o a ıme. a o GLUJ ISO LINES WITH OFFSET a fel¨letet u param´tervonalaival e ´br´zolja. vfixed count. GLfloat *ctrlarray. v max] ∩ [vknt[vorder − 1]. Az nobj azonos´ oj´ B´zier-fel¨let kontrollpontjait. *u fixed. GLfloat *u fixed. GLfloat v max. int vd ). kontrollpoligonj´t. lehets´ges ´rt´kei: ıt´ o a ırja o e e e GLUJ CONTROL POLYGON MESH a kontrollh´l´t rajzolja meg. vknt[vknot count − vorder]]) tartom´ny f¨l¨tti param´tervonalait. a u a u stride u ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. GLfloat u max. az ezekhez tartoz´ fel¨leti pontokat a pontbeli a o e o u norm´lis ment´n fl m´rt´kben eltolja ´s ezeket a pontokat k¨ti ¨ssze egyenes szakaszokkal. *v fixed param´terekre a a a e a ırtak ´rv´nyesek. akkor a param´tertartom´nyban egym´st´l e e a a o egyenl˝ t´vols´gra l´v˝ ufixed count darab u ´rt´ket r¨gz´ a f¨ggv´ny ´s az ezekhez o a a e o e e o ıt u e e e e tartoz´ v ir´ny´ param´tervonalakat jelen´ meg. u ir´ny´ param´tervonalak eset´n az ´rtelmez´si a u e e e e tartom´nyt ud egyenl˝ r´szre osztja. *u fixed ´s *v fixed param´terek jelent´se megegyezik a e e e GLUJ ISO LINES m´dn´l le´ o a ırtakkal. GLint vcp count. m´gpedig az u e a a e ufixed count ≥ 0 sz´m´ r¨gz´ a u o ıtett u ´rt´khez tartoz´ v ir´ny´. hogy a param´tervonalat a fel¨letre mer˝legesen eltolja. a u a vcp count a v ir´ny´ kontrollpontok sz´ma. e e GLUJ ISO LINES -n´l le´ GLUJ NORMAL MESH a fel¨letnek a megadott u ´s v ´rt´kekhez tartoz´ u e e e o e norm´lisait ´br´zolja. GLenum type. GLint vfixed count. GLint ucp count. ´s a vfixed count ≥ 0 e e o a u e sz´m´ r¨gz´ a u o ıtett v ´rt´khez tartoz´ u ir´ny´ param´tervonallal. e a a a ucp count az u ir´ny´ kontrollpontok sz´ma. e e o e Ha ufixed count > 1 ´s ∗u f ixed = N U LL. A vfixed count ´s *v fixed param´terek o a u e ıti haszn´lata ezzel anal´g. GLfloat u min. a a e ´ e u o Az ufixed count. azaz homog´n a u e e e koordin´t´val adottak). GLint ufixed count. *u fixed. vagy norm´lisait ´br´zolja. GLfloat fl. a fel¨let hat´rol´ g¨rb´it jeu o ıt˝ o o aa u a o o e len´ meg. azok hat´r´t. GLint u stride. u e a e aa GL MAP2 VERTEX 4 racion´lis B-spline fel¨let eset´n (a pontok n´gy. int ud.

e e o e Ha ufixed count > 1 ´s ∗u f ixed = N U LL. *v fixed. norm´lvektorok e o a Az itt ismertetend˝ f¨ggv´nyek nem rajzolnak. o GLUJ POINT MESH a fel¨letet a megadott u ´s v ´rt´kekhez tartoz´ ponu e e e o e tokkal ´br´zolja. float. *u fixed a r¨gz´ e e o a u e o ıtett u ´rt´keket tartalmaz´ vektor c´ e e o ıme. GLfloat v max. float *). GLfloat u min. e e a a GLU FILL a fel¨letet k¨zel´ o kit¨lt¨tt poligonokat jelen´ meg (mint a u o ıt˝ o o ıti NURBS fel¨letek eset´n). GLint vfixed count. u e void glujParamSurface (void (*fn)(float. e e GLUJ TESS POLYGON a fel¨letet k¨zel´ o h´romsz¨gh´l´val ´br´zolja. Ezek a f¨ggv´nyek o e e oe u a a a ıtj´ u e 139 . GLfloat v min. ´s a vfixed count ≥ 0. u e GLU OUTLINE POLYGON a fel¨letet k¨zel´ o poligonok ´leit jelen´ meg u o ıt˝ e ıti (mint a NURBS fel¨letek eset´n). A megjelen´ eshez a param´tervonal o a u e ıti ıt´ e ´rtelmez´si tartom´ny´t vd-1 egyenl˝ r´szre osztja. GLfloat *v fixed. o o a o fn a fel¨let egy pontj´t kisz´m´ o f¨ggv´ny. v) param´ter˝ pontj´t kisz´m´ ´s a p vektorban visszaadja. vd param´terekre a a a GLUJ ISO LINES -n´l le´ a ırtak ´rv´nyesek. u e u a a ıtja e mode a megjelen´ es m´dj´t ´ el˝. int vd ). lehets´ges ´rt´kei: ıt´ o a ırja o e e e GLUJ ISO LINES a fel¨letet param´tervonalaival ´br´zolja. e GLUJ FILL POLYGON a fel¨letet k¨zel´ o kit¨lt¨tt h´romsz¨gh´l´val u o ıt˝ o o a o ao ´br´zolja. akkor a param´tertartom´nyban egym´st´l e e a a o egyenl˝ t´vols´gra l´v˝ ufixed count darab u ´rt´ket r¨gz´ a f¨ggv´ny ´s az ezekhez o a a e o e e o ıt u e e tartoz´ v ir´ny´ param´tervonalakat jelen´ meg. *v fixed ´s ud param´ter haszn´lata ezzel o o e e a anal´g. u max] × [v min.lesz. A ufixed count. A vfixed count. Pontok. a oo e e a a e a o ao vagy kit¨lt¨tt h´romsz¨gekkel. float p[3] ). GLenum mode. mely a fel¨let (u. hogy a param´tertartom´nyt u ir´nyban ud. ´rint˝k. h´romsz¨gh´l´val. Az fn f¨ggv´nnyel le´ param´teres fel¨letnek az [u min. e e o a u e sz´m´ r¨gz´ a u o ıtett v ´rt´khez tartoz´ u ir´ny´ param´tervonallal. GLfloat u max. float v. ud. u o ıt˝ a o ao a a melyet ugy ´ll´ el˝. csak g¨rb´kre ´s fel¨letekre illeszked˝ pono u e o e e u o tokat. *u fixed. egy´bk´nt a normaliz´lt norm´lvektor fl -szerese. g¨rb´k ´rint˝j´t. o e 15. v max] u e ırt e u tartom´ny f¨l¨tti r´sz´t ´br´zolja param´tervonalaival. u e GLU OUTLINE PATCH a fel¨let hat´rol´ g¨rb´it jelen´ meg (mint a u a o o e ıti NURBS fel¨letek eset´n). vfixed count. A h´romsz¨gh´l´ el˝´ll´ asa a GLUJ TESS POLYGON opci´n´l le´ m´don a a a o a o oa ıt´ o a ırt o t¨rt´nik. GLfloat *u fixed. int ud. *v fixed a r¨gz´ o ıtett v ´rt´keket tartalmaz´ vektor´. m´gpedig az u e a a e ufixed count ≥ 0 sz´m´ r¨gz´ a u o ıtett u ´rt´khez tartoz´ v ir´ny´. valamint fel¨letek norm´lvektor´t sz´m´ ak ki. pontjaival.2. ´s az ezekhez tartoz´ g¨rbepontokat e e a a o e e o o egyenes szakaszokkal k¨ti ¨ssze. A f¨ggv´ny protot´ u a a ıt´ u e u e ıpusa: void fn(float u. GLint ufixed count. v ir´nyban vd egyenl˝ ´ a ıt o e a a a o r´szre osztja.

e e ıv. oe e a a *uknot az els˝ csom´´rt´k c´ o oe e ıme. B-spline g¨rbe deriv´ltj´t (´rint˝vektor´t) sz´m´ ki az adott pontban. aa ncoord a kontrollpontok koordin´t´inak sz´ma: 3. o o e e e *pt ebben a vektorban adja vissza a kisz´m´ a ıtott pont koordin´t´it. uorder a g¨rbe rendje. GLfloat u. a u stride a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban m´rve. B´zier-g¨rbe adott param´ter´rt´khez tartoz´ pontj´nak koordin´t´it sz´m´ ki. GLfloat *pt. a ıt´ u e e int glujDerBsplineCurve (GLint uknot count. GLfloat u. GLfloat *pt. GLfloat u. aa e aa A visszaadott ´rt´k negat´ ha a pont kisz´m´ asa meghi´sult. ha a pontok Descartes-f´le kooraa a e din´t´val adottak. 4. GLfloat *uknot. tapasztalatunk szerint azonban sok a a e esetben sz¨ks´g van r´juk az ig´nyesebb szeml´ltet´s sor´n is. e e ıv. NURBS g¨rbe adott param´ter´rt´khez tartoz´ pontj´nak koordin´t´it sz´m´ ki. oe e a a *uknot az els˝ csom´´rt´k c´ o oe e ıme. e a a e *ctrlarray a kontrollpoligon els˝ pontj´nak a c´ o a ıme. u stride a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban m´rve. ahol a deriv´ltat ki kell sz´m´ e e e a a ıtani. GLfloat *ctrlarray. u a kisz´m´ a ıtand´ ponthoz tartoz´ param´ter´rt´k. egy´bk´nt 0. int ncoord ). GLint uorder.GLfloat *p. GLfloat *ctrlarray. u stride a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban m´rve. aa e aa A visszaadott ´rt´k negat´ ha a pont kisz´m´ asa meghi´sult. ha a pontok Descartes-f´le kooraa a e din´t´val adottak. o u a kisz´m´ a ıtand´ ponthoz tartoz´ param´ter´rt´k. 4. GLint uorder. o a a e o a a ıtja uknot count a csom´´rt´kek sz´ma (uknot count = uorder + a kontrollpontok sz´ma). e a a e *ctrlarray a kontrollpoligon els˝ pontj´nak a c´ o a ıme. aa ncoord a kontrollpontok koordin´t´inak sz´ma: 3.teh´t ink´bb a geometriai modellez´shez tartoznak. u e a e e e a int glujPointOnNurbsCurve (GLint uknot count. e a a e *ctrlarray a kontrollpoligon els˝ pontj´nak a c´ o a ıme. ha homog´n koordin´t´val. aa a A visszaadott ´rt´k negat´ ha a pont kisz´m´ asa meghi´sult. egy´bk´nt 0. GLint u stride. e o e e e o a aa a ıtja cp count a kontrollpontok sz´ma. a aa ncoord a kontrollpontok koordin´t´inak sz´ma: 2 vagy 3. e e ıv. o o e e e *pt ebben a vektorban adja vissza a kisz´m´ a ıtott pont koordin´t´it. GLint u stride. int ncoord ). int ncoord ). GLint u stride. ha homog´n koordin´t´val. GLfloat *uknot. uorder a g¨rbe rendje. o e e e o a aa a ıtja uknot count a csom´´rt´kek sz´ma (uknot count = uorder + a kontrollpontok sz´ma). a ıt´ u e e int glujPointOnBezierCurve (GLint cp count. a ıt´ u e e 140 . GLfloat *ctrlarray. *p ebben a vektorban adja vissza a kisz´m´ a ıtott deriv´lt koordin´t´it. o u az a param´ter´rt´k. egy´bk´nt 0.

o a a e o a a ıtja uknot count a csom´´rt´kek sz´ma (uknot count = uorder + a kontrollpontok sz´ma). NURBS fel¨let (u. NURBS g¨rbe deriv´ltj´t (´rint˝vektor´t) sz´m´ ki az adott pontban. o e *pt ebben a vektorban adja vissza a kisz´m´ a ıtott pont koordin´t´it. u a u vorder a fel¨let v ir´ny´ rendje. uorder a g¨rbe rendje. GLfloat *ctrlarray. GLfloat *vknot. o a A visszaadott ´rt´k negat´ ha a pont kisz´m´ asa meghi´sult. int ncoord ). GLfloat *uknot. GLint vorder. a u a *vknot az els˝ v ir´ny´ csom´´rt´k c´ o a u oe e ıme. aa e aa A visszaadott ´rt´k negat´ ha a pont kisz´m´ asa meghi´sult. ahol a deriv´ltat ki kell sz´m´ e e e a a ıtani. 4. oe e a a *uknot az els˝ csom´´rt´k c´ o oe e ıme. ha a pontok Descartes-f´le kooraa a e din´t´kkal adottak. u stride a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban m´rve. a ıt´ u e e int glujPointOnNurbsSurface (GLint uknot count. GLfloat *pv ). GLfloat *uknot. aa ncoord a kontrollpontok koordin´t´inak sz´ma: 3. GLint v stride. e v stride v ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. vknot count az v param´ter csom´´rt´keinek sz´ma (vknot count = vorder + az v e oe e a ir´ny´ kontrollpontok sz´ma). u a u e a a ıtja 141 . ha homog´n koordin´t´kkal. GLint uorder. GLfloat v. a u a *uknot az els˝ u ir´ny´ csom´´rt´k c´ o a u oe e ıme. u a u u. int ncoord. e e ıv. e a a e *ctrlarray a kontrollpoligon els˝ pontj´nak a c´ o a ıme. GLint uorder. GLint uorder. GLint u stride. 4. uorder a fel¨let u ir´ny´ rendje. GLint vknot count. GLfloat *ctrlarray. a aa ncoord a kontrollpontok koordin´t´inak sz´ma: 3. int ncoord ). GLfloat u. egy´bk´nt 0. ha a pontok Descartes-f´le kooraa a e din´t´kkal adottak (vagyis B-spline g¨rb´r˝l van sz´). v ) param´ter˝ pontj´nak koordin´t´it sz´m´ ki. GLint u stride. o u az a param´ter´rt´k. GLfloat u. GLint vorder. u stride u ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. u e u a aa a ıtja uknot count a fel¨let u ir´ny´ csom´´rt´keinek sz´ma (uknot count = uorder + az u u a u oe e a ir´ny´ kontrollpontok sz´ma). GLfloat *ctrlarray. GLint vknot count.int glujDerNurbsCurve (GLint uknot count. GLint u stride. e e ıv. *p ebben a vektorban adja vissza a kisz´m´ a ıtott deriv´lt koordin´t´it. a ıt´ u e e int glujIsolineOnNurbsSurface (GLint uknot count. float val. ha homog´n koordin´t´kkal aa o eo o e aa (vagyis a g¨rbe racion´lis). NURBS fel¨let u vagy v ir´ny´ param´tervonal´nak kontrollpontjait sz´m´ ki. GLint v stride. GLfloat *uknot. e *ctrlarray a kontrollh´l´ els˝ pontj´nak a c´ ao o a ıme. GLfloat *vknot.GLfloat *p. v a kisz´m´ a ıtand´ pont param´terei. egy´bk´nt 0. GLfloat *pt. int dir.

a u a *uknot az els˝ u ir´ny´ csom´´rt´k c´ o a u oe e ıme. int ncoord ). GLfloat *uknot. GLint uorder. u stride u ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. GLfloat *ctrlarray. GLfloat v. GLint u stride. GLfloat u. egy´bk´nt e e ıv. 4. ha homog´n koordin´t´kkal. a e e e dir param´ternek megfelel˝en. u a u u.uknot count a fel¨let u ir´ny´ csom´´rt´keinek sz´ma (uknot count = uorder + az u u a u oe e a ir´ny´ kontrollpontok sz´ma). GLint v stride. u a u vorder a fel¨let v ir´ny´ rendje. a u a *vknot az els˝ v ir´ny´ csom´´rt´k c´ o a u oe e ıme. NURBS fel¨let (u. uorder a fel¨let u ir´ny´ rendje. e v stride v ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. Ha ´rt´ke 1. u stride u ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. aa A visszaadott ´rt´k negat´ ha a kontrollpontok kisz´m´ asa meghi´sult. o e *norm ebben a vektorban adja vissza a kisz´m´ a ıtott norm´lis koordin´t´it. v a kisz´m´ a ıtand´ pont param´terei. e *ctrlarray a kontrollh´l´ els˝ pontj´nak a c´ ao o a ıme. vknot count az v param´ter csom´´rt´keinek sz´ma (vknot count = vorder + az v e oe e a ir´ny´ kontrollpontok sz´ma). e o *pv ebben a vektorban adja vissza a kisz´m´ a ıtott kontrollpontok koordin´t´it. ha a pontok Descartes-f´le kooraa a e din´t´kkal adottak. e v stride v ir´nyban a szomsz´dos kontrollpontok adatainak t´vols´ga GLfloat-okban a e a a m´rve. GLfloat *vknot. uorder a fel¨let u ir´ny´ rendje. v ) param´ter˝ pontj´ban a fel¨let norm´lis´nak koordin´t´it u e u a u a a aa sz´m´ ki. int glujNormalOfNurbsSurface (GLint uknot count. a u a *vknot az els˝ v ir´ny´ csom´´rt´k c´ o a u oe e ıme. u a u vorder a fel¨let v ir´ny´ rendje. val a kisz´m´ a ıtand´ param´tervonalhoz tartoz´ r¨gz´ o e o o ıtett u vagy v param´ter´rt´k. 4. e *ctrlarray a kontrollh´l´ els˝ pontj´nak a c´ ao o a ıme. GLint vorder. a aa ncoord a kontrollpontok koordin´t´inak sz´ma: 3. aa e aa 142 . akkor v ir´ny´ o e a a o a e e a u param´tervonal kontrollpontjait sz´m´ e a ıtja ki (azaz egy u ´rt´k r¨gz´ e e o ıtett). ha a pontok Descartes-f´le kooraa a e din´t´kkal adottak. ha ´rt´ke 2. GLfloat *norm. a ıtja uknot count a fel¨let u ir´ny´ csom´´rt´keinek sz´ma (uknot count = uorder + az u u a u oe e a ir´ny´ kontrollpontok sz´ma). u a u ncoord a kontrollpontok koordin´t´inak sz´ma: 3. a u a *uknot az els˝ u ir´ny´ csom´´rt´k c´ o a u oe e ıme. ha homog´n koordin´t´kkal. GLint vknot count. e e akkor u ir´ny´ param´tervonal kontrollpontjait sz´m´ ki (azaz egy v ´rt´k r¨gz´ a u e a ıtja e e o ıtett). a ıt´ u e e 0. aa e aa dir a kisz´m´ a ıtand´ param´tervonal ir´ny´t jelz˝ sz´m. vknot count az v param´ter csom´´rt´keinek sz´ma (vknot count = vorder + az v e oe e a ir´ny´ kontrollpontok sz´ma).

e e ıv. a ıt´ u e e 143 . egy´bk´nt 0.A visszaadott ´rt´k negat´ ha a pont kisz´m´ asa meghi´sult.

letilt´sa e e e e a ´s lek´rdez´se e e e Az OpenGL-nek sz´mos olyan k´pess´ge van. a a a e a u • GL AUTO NORMAL Norm´lisok automatikus l´trehoz´sa. illetve letiltott k´pess´get azonos´ o szimbolikus konstans. a • GL COLOR TABLE A pixelek sz´ enek cser´je t´bl´zat alapj´n. a a • GL BLEND A fragmentum ´s a pixel sz´ enek alfa szerinti vegy´ ese (´tl´tsz´s´g e ın´ ıt´ a a oa modellez´se).16. l´sd a 8. szakaszt. a o ık a a • GL COLOR LOGIC OP A fragmentum ´s a pixel sz´ en logikai m˝velet v´gz´se. l´sd az 5. ın´ e a a a • GL CONVOLUTION 1D A pixelek egydimenzi´s konvol´ci´s sz˝r´se. u e e u A cap param´ter lehets´ges ´rt´kei ´s jelent´s¨k: e e e e e eu • GL ALPHA TEST Alfa-vizsg´lat. amiket a a a o a e e a ıt´ glIsEnabled() vagy glGet*() f¨ggv´nyekkel lek´rdezhet¨nk. e e e ıt´ Indul´skor a GL DITHER enged´lyezett.5. a e u a a void glEnable (GLenum cap). cap az enged´lyezett.2. o u o ue • GL CONVOLUTION 2D A pixelek k´tdimenzi´s konvol´ci´s sz˝r´se. void glDisable (GLenum cap).l´sd a 11. e o u o ue 144 .2. a • GL COLOR MATERIAL Az anyagtulajdons´g hozz´kapcsol´sa a rajzol´si sz´ a a a a ınhez. letilthatunk. l´sd a 6. az ¨sszes t¨bbi nem enged´lyezett. szakaszt.3. pontot. e a • GL CLIP PLANEi Az i-edik v´g´s´ haszn´lata. e ın´ u e e l´sd a 11.4. illetve lek´rdezhetj¨k az ´llapot´t. szakaszt. szakaszt. fejezet K´pess´gek enged´lyez´se. l´sd a 14.1. A renda e o o e szer egy-egy ´llapotv´ltoz´ban t´rolja ezen k´pess´gek kurrens be´ll´ asait. amelyet enged´lyezhet¨nk (aktia e e e u viz´lhatunk).2. ha a cs´cspontok l´trehoz´s´hoz a GL MAP2 VERTEX 3 vagy GL MAP2 VERTEX 4 opci´t e aa o haszn´ljuk.szakaszt.

• GL MAP1 TEXTURE COORD 1 Az egydimenzi´s ki´rt´kel˝ a text´ra s ´rt´keit o e e o u e e sz´molja. szakaszt. e a a a • GL LIGHTING A megvil´g´ as haszn´lata.1.1.2. l´sd a 14. l´sd a 14. a a szakaszt. szakaszt. e o e e o ınindexeket sz´moljon. szakaszt.1.1. l´sd a 11.• GL CULL FACE H´ts´ lapok elhagy´sa. o e a • GL HISTOGRAM Egy k´pen a sz´ e ınek eloszl´s´r´l statisztika k´sz´ ese. a ıt´ a a • GL LINE SMOOTH Szakaszok hat´r´nak sim´ asa. z ´s w ´rt´keit sz´molja. l´sd a 3. t.5. szakaszt. a • GL FOG K¨d modellez´se.5.1. l´sd a 8. szakaszt.1. l´sd a 11. l´sd o e e o e e a a a 14. l´sd a 14. l´sd a 14. szakaszt.1. e e a a o e e o u e • GL MAP1 TEXTURE COORD 4 Az egydimenzi´s ki´rt´kel˝ a text´ra s. e e a a • GL MAP1 TEXTURE COORD 3 Az egydimenzi´s ki´rt´kel˝ a text´ra s.4. szakaszt.3.1. 145 .1. l´sd a 14. l´sd a 6. szakaszt.2. l´sd a 14. y. aao e ıt´ • GL INDEX LOGIC OP A fragmentum ´s a pixel sz´ e ınindex´n logikai m˝velet e u v´gz´se. a a • GL MAP2 INDEX A k´tdimenzi´s ki´rt´kel˝ sz´ szakaszt. e e a a o e e o u e e e • GL MAP1 VERTEX 3 Az egydimenzi´s ki´rt´kel˝ a cs´cspont x. l´sd a 14. pontot. l´sd o e e o a a a a 14. l´sd a 14. aa ıt´ a ıpus haszn´lata. szakaszt.3. szakaszt. l´sd a 6. a o a a • GL DEPTH TEST L´that´s´gi vizsg´lat. a a • GL MAP1 TEXTURE COORD 2 Az egydimenzi´s ki´rt´kel˝ a text´ra s ´s t o e e o u e ´rt´keit sz´molja.3. e e a • GL LIGHTi Az i-edik f´nyforr´s haszn´lata. t ´s r o e e o u e ´rt´keit sz´molja. l´sd a 11. szakaszt. l´sd a 3. ´s z ´rt´keit sz´molja. a a o e e o u e e e • GL MAP1 VERTEX 4 Az egydimenzi´s ki´rt´kel˝ a cs´cspont x. a oa a a • GL DITHER Dithering.2. l´sd e o e e o e e a a a 14. a a • GL MAP2 COLOR 4 A k´tdimenzi´s ki´rt´kel˝ RGBA ´rt´keket sz´moljon.4. r ´s q ´rt´keit sz´molja. pontot. szakaszt.1.3. y.2. • GL MAP1 INDEX Az egydimenzi´s ki´rt´kel˝ sz´ o e e o ınindexeket sz´moljon. a a • GL LINE STIPPLE Vonalt´ • GL MAP1 COLOR 4 Az egydimenzi´s ki´rt´kel˝ RGBA ´rt´keket sz´moljon. pontot.5. szakaszt. • GL MAP1 NORMAL Az egydimenzi´s ki´rt´kel˝ norm´lisokat sz´moljon. l´sd a 8.2. pontot. szakaszt.

o e a a ınm´ o • GL POST COLOR MATRIX COLOR TABLE A sz´ atrixszal val´ transzform´l´s ut´n t´bl´zat szerinti sz´ aa a a a ıncsre. y. l´sd e o e e o a a a a 14.5.3.2.1. y. e e a a • GL MAP2 TEXTURE COORD 3 A k´tdimenzi´s ki´rt´kel˝ a text´ra s. pontot ´s a 8. aa ıt´ a • GL POLYGON OFFSET FILL Poligonok kit¨lt¨tt megjelen´ esekor. a maximum´nak a • GL NORMALIZE A norm´lisok automatikus normaliz´l´sa. • GL POLYGON STIPPLE Poligon kit¨lt´se mint´val. l´sd a 14. e a a a e o u o uo e a o • GL SEPARABLE 2D K´t egydimenzi´s konvol´ci´s sz˝r˝re sz´tv´laszthat´ k´tdimenzi´s konvol´ci´s sz˝r˝. aa ıt´ a e szakaszt. l´sd a 14. e e a a • GL POLYGON OFFSET LINE Poligonok hat´r´nak megjelen´ esekor. szakaszt. a a • GL MAP2 VERTEX 4 A k´tdimenzi´s ki´rt´kel˝ a cs´cspont x. l´sd a 3. szakaszt.3. l´sd a 14. a a e o e e o u e • GL MAP2 TEXTURE COORD 2 A k´tdimenzi´s ki´rt´kel˝ a text´ra s ´s t ´rt´keit sz´molja.3.2. t. l´sd a 3. a fragmenaa ıt´ tumokhoz egy offset ´rt´k hozz´ad´sa. a u ıt´ fragmentumokhoz egy offset ´rt´k hozz´ad´sa. z ´s w ´rt´keit e o e e o u e e e sz´molja. szakaszt.• GL MAP2 NORMAL A k´tdimenzi´s ki´rt´kel˝ norm´lisokat sz´moljon.2. e e a a • GL MAP2 TEXTURE COORD 4 A k´tdimenzi´s ki´rt´kel˝ a text´ra s. u o ue a a a • GL POST CONVOLUTION COLOR TABLE A konvol´ci´s sz˝r´s ut´n t´bl´zat szerinti sz´ ıncsre.2. szakaszt.2. r ´s q e o e e o u e ´rt´keit sz´molja. • GL MAP2 TEXTURE COORD 1 A k´tdimenzi´s ki´rt´kel˝ a text´ra s ´rt´keit e o e e o u e e sz´molja. l´sd a 3. szakaszt.2. l´sd a 14. szakaszt. e e a a • GL MAP2 VERTEX 3 A k´tdimenzi´s ki´rt´kel˝ a cs´cspont x.1.2. a a • GL MINMAX sz´m´ asa. szakaszt. pontot. l´sd a 14. a ıt´ Pixelt¨mb¨k o o sz´ ınkomponensei minimum´nak. l´sd a 3. e e a a • GL POLYGON OFFSET POINT Poligonok cs´cspontjainak megjelen´ esekor. l´sd a 3. l´sd a 14. e o u o uo 146 . pontot. a fragmentuo o ıt´ mokhoz egy offset ´rt´k hozz´ad´sa.1. szakaszt. t ´s r e o e e o u e ´rt´keit sz´molja.3. a aa a • GL POINT SMOOTH Pont hat´r´nak sim´ asa. e e a a • GL POLYGON SMOOTH Poligon hat´r´nak sim´ asa. szakaszt.2. • GL RESCALE NORMAL A transzform´ci´k ut´n a glNormal*() f¨ggv´nnyel a o a u e l´trehozott norm´lisokat normaliz´lja. ´s z ´rt´keit e o e e o u e e e sz´molja.

hogy egy k´pess´g enged´lyezett-e. l´sd a 13. COLOR MATERIAL. e a • GL TEXTURE GEN S A text´ra s koordin´t´j´t a glTexGen*() f¨ggv´ny szerint u aaa u e hozza l´tre.1. e o ua a a a o ua a a • GL TEXTURE 3D H´romdimenzi´s text´r´z´s. GL MAP1 TEXTURE COORD 4. MAP1 TEXTURE COORD 1. GL MAP2 TEXTURE COORD 1. pontot.3. l´sd a 13.11. GL TEXTURE GEN T. GL STENCIL TEST. GL MAP2 NORMAL.11. GL LINE STIPPLE.• GL SCISSOR TEST Kiv´g´si vizsg´lat. l´sd a 13. POLYGON STIPPLE. GL MAP1 NORMAL.1. GL TEXTURE 2D.11. GL LIGHTi. GL SCISSOR TEST. GL TEXTURE GEN S. GL MAP1 TEXTURE COORD 2. GL LINE SMOOTH. GL MAP2 TEXTURE COORD 3. MAP1 TEXTURE COORD 3. FOG. GL MAP2 VERTEX 4. MAP2 INDEX. NORMALIZE. GL DEPTH TEST. GL TEXTURE GEN Q.11. l´sd a 13.3. GL BLEND.3. GL MAP2 COLOR 4.3. e a • GL TEXTURE GEN R A text´ra r koordin´t´j´t a glTexGen*() f¨ggv´ny szerint u aaa u e hozza l´tre. szakaszt. GL LIGHTING. LOGIC OP. egy´bk´nt a visszaadott ´rt´k GL FALSE. e a o o u e e e e • A k¨vetkez˝ f¨ggv´nnyel azt tudhatjuk meg. l´sd a 11. TEXTURE 1D. l´sd a 13. szakaszt. e a • GL TEXTURE GEN T A text´ra t koordin´t´j´t a glTexGen*() f¨ggv´ny szerint u aaa u e hozza l´tre.1. GL POLYGON SMOOTH. • GL TEXTURE GEN Q A text´ra q koordin´t´j´t a glTexGen*() f¨ggv´ny szerint u aaa u e hozza l´tre. a a a a • GL STENCIL TEST Stencilvizsg´lat. 147 . GL MAP2 VERTEX 3. pontot. TEXTURE GEN R. GLboolean glIsEnabled (GLenum cap). MAP1 VERTEX 3. A f¨ggv´ny a GL TRUE ´rt´ket adja vissza.3. GL CULL FACE. ha a cap szimbolikus konstanssal azou e e e nos´ ıtott k´pess´g enged´lyezett. GL AUTO NORMAL. A cap param´ter lehets´ges e e e e ´rt´kei: e e GL GL GL GL GL GL GL GL GL GL GL GL GL GL ALPHA TEST. GL DITHER. l´sd a 13. szakaszt. GL POINT SMOOTH. pontot. a a • GL TEXTURE 1D Egydimenzi´s text´r´z´s.1. A k´pess´gek e e e e e e e e e alaphelyzetben nem enged´lyezettek. szakaszt. l´sd a 13. pontot. GL CLIP PLANEi. GL MAP1 INDEX. MAP2 TEXTURE COORD 2. o ua a a • GL TEXTURE 2D K´tdimenzi´s text´r´z´s. l´sd a 11. GL MAP1 COLOR 4. szakaszt. kiv´ve a ditheringet. GL MAP1 VERTEX 4. MAP2 TEXTURE COORD 4.

GLfloat *params). ´llapotv´ltoz´k kurrens ´rt´keit u e a a o a a o e e k´rdezhetj¨k le. A pname param´ter a lek´rdezend˝ v´ltoz´t azonos´ o szimbolikus konstans.4. l´sd a 10. A lek´rdezend˝ ´rt´k t´ anak e e e e o e e ıpus´ megfelel˝ f¨ggv´nyt kell haszn´lni. fejezet ´ Allapotv´ltoz´k ´rt´k´nek a o e e e lek´rdez´se e e Az itt ismertetett f¨ggv´nyekkel a glob´lis v´ltoz´k.4. Ha a lek´rdezend˝ adat ´s a megh´ o u e a e o e ıvott f¨ggv´ny t´ u e ıpusa k¨l¨nb¨zik. void glGetIntegerv (GLenum pname. GLdouble *params). o e void glGetBooleanv (GLenum pname. szakaszt. l´sd a 10. GLboolean *params).17. a pae e o a o ıt´ rams c´ ımen pedig a lek´rdezett ´rt´ket kapjuk vissza. A lek´rdezett ´rt´ket a params c´ e e e ımen kapjuk meg. l´sd a 10.4. szakaszt. szakaszt. valamint o a hat´sukra a params c´ a ımen visszaadott ´rt´ket. pname a lek´rdezend˝ param´tert azonos´ o szimbolikus konste e e e u e o e ıt´ ans. GLint *params). void glGetDoublev (GLenum pname. Ha nem a v´ltoz´nak megfelel˝ a o o f¨ggv´nnyel k´rdezz¨k le az ´rt´ket. a rendszer t´ u e e u e e ıpuskonverzi´t hajt v´gre. a a u o e a a • GL ACCUM BLUE BITS A gy˝jt˝pufferben a k´k komponens sz´m´ra fenntartott bits´ ıkok sz´ma. u o o e ın´ l´sd a 10. a a 148 . e u A glGet*() f¨ggv´nnyel az OpenGL ´llapotv´ltoz´inak. glob´lis param´tereinek az u e a a o a e ´rt´k´t k´rdezhetj¨k le. szakaszt. void glGetFloatv (GLenum pname. a a • GL ACCUM CLEAR VALUE A gy˝jt˝puffer t¨rl´si sz´ enek RGBA komponensei. e e • GL ACCUM ALPHA BITS A gy˝jt˝pufferben az alfa komponensek sz´m´ra fenntu o a a artott bits´ ıkok sz´ma. akkor a rendszer konverzi´t hajt v´gre. a u o o a a • GL ACCUM GREEN BITS A gy˝jt˝pufferben a z¨ld komponens sz´m´ra fenntartott bitek sz´ma.4. uo o o e Az al´bbiakban felsoroljuk pname hely´re ´ a e ırhat´ szimbolikus konstansokat.

ıt´ e a • GL BLEND COLOR Az alfa szerinti sz´ ınvegy´ eshez haszn´lt egy¨tthat´k RGBA ıt´ a u o komponensei. l´sd a 8. szakaszt. szakaszt.2.1. a a e e a szakaszt. a e a • GL ALPHA TEST FUNC Az alfa-vizsg´lathoz haszn´lt f¨ggv´ny szimbolikus neve. a a • GL AUX BUFFERS Az opcion´lis sz´ a ınpufferek sz´ma. szakaszt. szakaszt. szakaszt. szakaszt.2. • GL ATTRIB STACK DEPTH Az attrib´tumverem haszn´latban l´v˝ szintjeinek u a e o sz´ma. l´sd a 8. l´sd a 14. pontot. l´sd a 8. • GL BLEND DST Alfa szerinti sz´ ınvegy´ eskor a c´l kombin´l´ t´nyez˝j´hez haszn´lt ıt´ e ao e oe a f¨ggv´ny azonos´ oja.1. fejezetet. l´sd a 10.3. a a • GL AUTO NORMAL A k´tdimenzi´s ki´rt´kel˝ automatikusan l´trehozza-e a e o e e o e norm´lisokat.1. • GL BLEND SRC Alfa szerinti sz´ ınvegy´ eskor a forr´s kombin´l´ t´nyez˝j´hez ıt´ a ao e oe haszn´lt f¨ggv´ny azonos´ oja. l´sd a 11.1. l´sd a 3. pontot.2. a a • GL ACTIVE TEXTURE ARB Az akt´ t¨bbsz¨r¨s text´raegys´g. l´sd a a a a a 10.2. szakaszt. a a u e l´sd a 11.1. szakaszt. a • GL ALPHA TEST REF Az alfa-vizsg´lathoz haszn´lt referencia´rt´k. szakaszt. a a • GL BLEND Az alfa szerinti sz´ ınvegy´ es enged´lyezett-e. u e ıt´ a a e e ıneinek kombin´l´si m´dj´t azonos´ o aa o a ıt´ • GL BLEND EQUATION A forr´s ´s a c´l sz´ szimbolikus konstans. a • GL ALPHA BITS A sz´ ınpufferek h´ny biten t´rolj´k az alfa komponenst.1. l´sd az 1. l´sd a 10. a 149 . l´sd a 3.2.• GL ACCUM RED BITS A gy˝jt˝pufferben a v¨r¨s komponens sz´m´ra fenntartott u o oo a a bitek sz´ma. aa a • GL ALPHA TEST Az alfa-vizsg´lat enged´lyezett-e. ıv o oo u e • GL ALIASED POINT SIZE RANGE A kisim´ ıtott pont alapelemek m´ret´nek mie e nimuma ´s maximuma. a u e ıt´ a a a e ınkomponensre alkalmazott el• GL BLUE BIAS A pixelmozgat´sok sor´n a k´k sz´ tol´s.3. e a ıtott szakasz alapelemek vonalvas• GL ALIASED LINE WIDTH RANGE A kisim´ tags´g´nak minimuma ´s maximuma. l´sd a 11.4. a a • GL ALPHA SCALE A pixelmozgat´sok sor´n az alfa komponensre alkalmazott sk´l´z´s. a a e a • GL ALPHA BIAS A pixelmozgat´sok sor´n az alfa komponensre alkalmazott ela a tol´s.

ınt¨ e • GL COLOR ARRAY SIZE A sz´ omb h´ny komponensben t´rolja a sz´ ınt¨ a a ınt.7. szakaszt. e a • GL COLOR MATERIAL FACE A poligonok melyik oldal´nak anyagtulajdons´ga a a van hozz´kapcsolva a rajzol´si sz´ a a ınhez. ıv o oo u e • GL CLIENT ATTRIBE STACK DEPTH haszn´latban l´v˝ szintjeinek sz´ma.1. a • GL COLOR MATERIAL PARAMETER Melyik anyagtulajdons´g a hozz´kapcsolva a rajzol´si sz´ a a ınhez. a van ınm´ o e a a • GL COLOR MATRIX A sz´ atrix-verem legfels˝ szintj´n t´rolt m´trix 16 eleme. B. aa a • GL CLIENT ACTIVE TEXTURE ARB A kliens akt´ t¨bbsz¨r¨s text´raegys´ge. 150 . • GL COLOR MATRIX STACK DEPTH A sz´ atrix-verem szintjeinek maxim´lis ınm´ a sz´ma. l´sd a 6. e o u o ue e • GL CONVOLUTION 2D A pixelek k´tdimenzi´s konvol´ci´s sz˝r´se enged´lyezette. szakaszt. a o u o ue e • GL CONVOLUTION 1D A pixelek egydimenzi´s konvol´ci´s sz˝r´se enged´lyezette.4. a a a ıncsere enged´lyezett-e. szaa a o ık e a kaszt. a e o a A kliens attrib´tumverm´ben u e a • GL CLIP PLANEi Az i-edik opcion´lis v´g´s´ enged´lyezett-e. o e ın´ l´sd a 2. l´sd a 6. szakaszt. l´sd az 5. a e • GL COLOR WRITEMASK Az R. l´sd a a 10.1. l´sd a 6. szakaszt. G. A szerinti sz´ l´sd a 10. • GL COLOR ARRAY A sz´ omb enged´lyezett-e.3. e • GL COLOR TABLE A t´bl´zat szerinti sz´ ınmaszkol´s enged´lyezett-e.• GL BLUE BITS A sz´ ınpufferek h´ny biten t´rolj´k a k´k sz´ a a a e ınkomponenst.5. a • GL COLOR LOGIC OP A fragmentumok sz´ en a logikai m˝veletek enın´ u ged´lyezettek-e.4.2. • GL COLOR CLEAR VALUE A sz´ ınpufferek t¨rl´si sz´ enek RGBA komponensei. l´sd a 11. e a • GL COLOR MATERIAL Az anyagtulajdons´gnak a rajzol´si sz´ a a ınhez kapcsol´sa a enged´lyezett-e. szakaszt. a a • GL COLOR ARRAY STRIDE A sz´ ombben az egym´st k¨vet˝ sz´ • GL COLOR ARRAY TYPE A sz´ omb milyen t´ u v´ltoz´kban t´rolja a ınt¨ ıpus´ a o a sz´ ınkomponenseket. pontot. szakaszt. ınt¨ a o o ınek t´vols´ga. • GL BLUE SCALE A pixelmozgat´sok sor´n a k´k sz´ a a e ınkomponensre alkalmazott sk´l´z´s.4.

y. szakaszt. a a e e aa a • GL DEPTH TEST A m´lys´gvizsg´lat enged´lyezett-e. szakaszt. l´sd a 4. ınindex. ıt´ a • GL DEPTH RANGE Az ablakkoordin´t´k intervalluma. a ın a szakaszt.2. • GL CURRENT RASTER POSITION VALID A kurrens raszterpoz´ o ´rv´nyes-e. szakaszt.1. • GL DEPTH FUNC A m´lys´gek ¨sszehasonl´ as´ra haszn´lt f¨ggv´ny szimbolikus e e o ıt´ a a u e azonos´ oja. o a 151 .7. l´sd az 5. l´sd a 9. l´sd a 4. a • GL DEPTH BIAS A pixelmozgat´sok sor´n alkalmazott eltol´s. l´sd a 9. l´sd a 10. a • GL CURRENT INDEX A kurrens sz´ • GL CURRENT NORMAL A kurrens norm´lis x.• GL CULL FACE A h´ts´ lapok elhagy´sa enged´lyezett-e. l´sd a 9.3. szakaszt. ıci´ e e l´sd a 9. e u aa l´sd a 13. t ´s q koordin´t´i.1. a a a • GL DEPTH BITS H´ny bitben t´rolja a rendszer a pixelek m´lys´g´t. r. • GL CURRENT RASTER POSITION A kurrens raszterpoz´ o x. l´sd a 3. e a o l´sd a 3. r. w v´g´ koordin´t´kban. z komponensei.4. szakaszt.1. aa a • GL DEPTH SCALE A pixelmozgat´sok sor´n a m´lys´gre alkalmazott sk´l´z´s.3. szakaszt. pontot. szakaszt.4. l´sd a 10. l´sd a 11. szakaszt.4. a • GL CURRENT COLOR A kurrens rajzol´si sz´ RGBA komponensei. z ´s w komıci´ e ponensei: x. e a a • GL CURRENT RASTER INDEX A kurrens raszterpoz´ o sz´ ıci´ ınindexe. y. e e o e e e a • GL DEPTH CLEAR VALUE A m´lys´gpuffer t¨rl´si ´rt´ke. a o a e a • GL CULL FACE MODE Fel´nk melyik oldal´t mutat´ poligonokat kell elhagyni. a a o aa a szakaszt.2. a • GL CURRENT RASTER DISTANCE A kurrens raszterpoz´ onak a n´z˝pontt´l ıci´ e o o m´rt t´vols´ga.11.5.4. szakaszt.3.4. • GL CURRENT RASTER COLOR A kurrens raszterpoz´ o sz´ enek RGBA komıci´ ın´ ponensei. a • GL CURRENT RASTER TEXTURE COORDS text´r´j´nak s. a a e e e a szakaszt. uaa e aa A kurrens raszterpoz´ o ıci´ • GL CURRENT TEXTURE COORDS A kurrens s. l´sd a 3. pontot. z ablakkoordin´ta-rendszerben. a a szakaszt. t ´s q text´rakoordin´t´k. e e a e a • GL DEPTH WRITEMASK A m´lys´gpuffer ´ e e ırhat´-e.2. l´sd a 11.2. y. l´sd a 11. a szakaszt.

pontot. l´sd a 8. o ın´ a • GL FOG DENSITY A k¨d s˝r˝s´ge.2 szakaszt. l´sd a 8. a o ınindexe.2 szaa e a kaszt.1. l´sd a 3.3 szakaszt. a o a o e a • GL FOG HINT A k¨d megval´s´ as´nak pontoss´g´t azonos´ o szimbolikus konsto o ıt´ a a a ıt´ ans. szakaszt. l´sd a 12.3 szakaszt. e a • GL DOUBLEBUFFER A dupla k´ps´ haszn´lata (pl. e e a a • GL FEEDBACK BUFFER SIZE A visszacsatol´si puffer m´rete.3 szakaszt.6 szaıt´ a kaszt. l´sd a 8.3. o uue a • GL FOG END A line´ris k¨d-interpol´ci´hoz az end param´ter. • GL FEEDBACK BUFFER TYPE A visszacsatol´si puffer t´ a ıpusa. a • GL FOG INDEX A k¨d sz´ • GL FOG MODE A k¨d kisz´m´ as´nak m´dja. o a ıt´ a o a • GL FOG START A line´ris k¨d-interpol´ci´hoz a start param´ter.3.3 szaa o a o e a kaszt. a oe oe e e a • GL EDGE FLAG A hat´rol´ ´l jelz˝j´nek ´rt´ke.2.6. l´sd a • GL GREEN BITS A sz´ a 10. l´sd a 10. l´sd a 8.3.3 szakaszt. a oe o o a a e • GL EDGE FLAG ARRAY STRIDE A hat´rol´ ´lek t¨mbj´ben az egym´st k¨vet˝ a oe o e a o o ´rt´kek t´vols´ga. • GL FOG A k¨d effektus enged´lyezett-e. aa a • GL HISTOGRAM A sz´ ınek eloszl´s´r´l statisztika k´sz´ ese enged´lyezett-e. l´sd a 3.• GL DITHER A dithering enged´lyezett-e. aao e ıt´ e 152 . l´sd a 8. l´sd a 12. l´sd a 10. l´sd a 8.2 szaa kaszt. o e a • GL FOG COLOR A k¨d sz´ enek RGBA komponensei.5.3 szakaszt. pontot.3 szakaszt. • GL GREEN SCALE A pixelmozgat´sok sor´n a z¨ld sz´ a a o ınkomponensre alkalmazott sk´l´z´s. a ınpufferek h´ny biten t´rolj´k a z¨ld sz´ a a a o ınkomponenst. l´sd a 11. a • GL GREEN BIAS A pixelmozgat´sok sor´n a z¨ld sz´ a a o ınkomponensre alkalmazott eltol´s. a ıt´ u e e o • GL FRONT FACE Milyen ir´ny´ as´ poligonokat tekint a rendszer fel´nk n´z˝nek.1 szakaszt. • GL EDGE FLAG ARRAY A hat´rol´ ´lek t¨mbben val´ t´rol´sa enged´lyezett-e. a • GL DRAW BUFFER Az ´ ırhat´ sz´ o ınpuffer szimbolikus azonos´ oja. anim´ci´hoz) enged´lyezette ık a a o e e. l´sd a 8. pontot. l´sd a 8.

szakaszt. pontot. a oe e a • GL INDEX SHIFT A pixelmozgat´sok sor´n a sz´ ´s stencilindexek eltol´sa. o u o a a a ın. szakaszt.2. pontot. a • GL LIGHT MODEL COLOR CONTROL A t¨kr¨z¨tt visszaver˝d´s sz´m´ asait a u o o o e a ıt´ rendszer elk¨l¨n´ u o ıti-e a norm´l megvil´g´ asi sz´m´ asokt´l.e a a a 9. l´sd a 8. a a ıt´ a ıt´ o • GL LIGHT MODEL LOCAL VIEWER A t¨kr¨z¨tt visszaver˝d´si sz´m´ asokn´l u o o o e a ıt´ a a t´nyleges n´z˝pontot. • GL INDEX LOGIC OP A sz´ ınindexeken a logikai m˝veletek enged´lyezettek-e. a o e l´sd a 6. l´sd a 6. • GL INDEX BITS A sz´ ınpufferek h´ny biten t´rolj´k a sz´ a a a ınindexet.2. szakaszt.5. l´sd a 6. • GL INDEX CLEAR VALUE A sz´ ınpuffer t¨rl´s´re haszn´lt sz´ o ee a ınindexe.1. uo o o uo o o • GL LIGHT MODEL TWO SIDE A poligonok k¨l¨nb¨z˝ oldalainak k¨l¨nb¨z˝ek-e az anyagtulajdons´gai. a a • GL INDEX ARRAY TYPE A sz´ ınindex t¨mb elemeinek t´ o ıpusa. pontot.7.3.1. pontot. • GL LIGHTi Az i-edik f´nyforr´s enged´lyezett-e.1.• GL INDEX ARRAY A sz´ ınindex t¨mb haszn´lata enged´lyezett-e. a ır´ a 153 .2. a ıt´ e a • GL LIGHT MODEL AMBIENT A glob´lis k¨rnyezeti f´ny RGBA komponensei. l´sd a 10. l´sd a 8. oe u a ıpus haszn´lata enged´lyezett-e. szakaszt. • GL LINE SMOOTH HINT A szakasz alapelem hat´r´nak sim´ asa milyen aa ıt´ min˝s´g˝. a szakaszt. l´sd a 2.2.1 a szakaszt. l´sd e e o e a e o a a a 6. l´sd a 9. a a aa ıt´ e a • GL LINE SMOOTH A szakasz alapelemek hat´r´nak sim´ asa enged´lyezett-e.3. l´sd a 4 fejezetet. l´sd a a ın. l´sd a 10. • GL INDEX MODE A rendszer sz´ ınindex m´dban m˝k¨dik-e. • GL INDEX WRITEMASK A sz´ ınindex puffer mely bitjei ´ ırhat´k. o a e • GL INDEX ARRAY STRIDE A sz´ ınindex t¨mb egym´st k¨vet˝ elemeinek o a o o t´vols´ga. l´sd u e a a 11.1. szakaszt. l´sd a 6. szo a akaszt. e a e a • GL LIGHTING A megvil´g´ as enged´lyezett-e. a e a • GL LINE STIPPLE A vonalt´ • GL LINE STIPPLE PATTERN A vonalmint´t le´ o 16 bit. szakaszt.3.1. szakaszt. vagy v´gtelen t´voli n´z˝pontot haszn´l a rendszer.7. szakaszt.1.2. l´sd a 3.´s stencilindexhez e • GL INDEX OFFSET A pixelmozgat´sok sor´n a sz´ hozz´adand´ ´rt´k.7. l´sd a 3.

1. o e e o text´rakoordin´t´kat hoz-e l´tre. szakaszt. z koordin´t´it hoz-e l´tre. pontot. • GL LOGIC OP MODE A sz´ ıneken v´grehajtand´ logikai m˝velet k´dja. l´sd a 14. l´sd a 14. szae a a a kaszt. l´sd a 3.3.1. u aa e a o e e o u • GL MAP1 VERTEX 3 Az egydimenzi´s ki´rt´kel˝ a cs´cspontok x. u aa e a Az egydimenzi´s o • GL MAP1 TEXTURE COORD 2 text´rakoordin´t´kat hoz-e l´tre.3. l´sd e o u o a a 11. o e a o ıt´ a o e a o e aa o a • GL LIST MODE A felt¨lt´s alatt ´ll´ display-lista l´trehoz´s´nak m´dja. l´sd a 14. l´sd a 14.3.1.2. l´sd a 14. szakaszt.1.1. s. • GL MAP1 GRID DOMAIN A glMapGrid1*() tom´ny´nak hat´rai.1. szakaszt. pontot.• GL LINE STIPPLE REPEAT A vonalminta nagy´ asi t´nyez˝je. t. • GL LIST INDEX A felt¨lt´s alatt ´ll´ display-lista azonos´ oja. • GL MAP1 TEXTURE COORD 1 Az egydimenzi´s o text´rakoordin´t´kat hoz-e l´tre.1.1. l´sd a 3. r s t q • GL MAP1 TEXTURE COORD 4 Az egydimenzi´s ki´rt´kel˝ r.5. l´sd a 14. szakaszt. a a a a f¨ggv´ny u e ´rtelmez´si e e tar- • GL MAP1 GRID SEGMENTS A glMapGrid1*() f¨ggv´nnyel l´trehozand´ u e e o r´cspontok sz´ma. szakaszt.3.2. • GL LINE WIDTH A kurrens vonalvastags´g. aa e a 154 . a a a • GL MAP1 INDEX Az egydimenzi´s ki´rt´kel˝ sz´ o e e o ınindexeket hoz-e l´tre. l´sd a 3. szakaszt. l´sd a 14. e a szakaszt. pontot. pontot. ponıt´ e o a tot. l´sd a 14. • GL MAP1 NORMAL Az egydimenzi´s ki´rt´kel˝ norm´lisokat hoz-e l´tre. e a • GL LIST BASE A glCallLists() v´grehajt´sakor haszn´lt offset. szakaszt. szakaszt.5. u aa e a ki´rt´kel˝ e e o ki´rt´kel˝ e e o ki´rt´kel˝ e e o r. l´sd a 7. y. l´sd a 7. l´sd a 3. • GL MAP1 COLOR 4 Az egydimenzi´s ki´rt´kel˝ sz´ o e e o ıneket hoz-e l´tre. szakaszt. e a szakaszt. szakaszt. l´sd a 14. au ıt´ e a ıtott hat´r´ szakaszok vonalvastags´g´nak miniau a a • GL LINE WIDTH RANGE Sim´ muma ´s maximuma.1.2. a a • GL LINE WIDTH GRANULARITY A rendszer ´ltal t´mogatott vonalvastags´gok a a a k¨zti k¨l¨nbs´g sim´ o uo e ıtott hat´r´ megjelen´ esn´l.1. l´sd a 7. u aa e a • GL MAP1 TEXTURE COORD 3 Az egydimenzi´s o text´rakoordin´t´kat hoz-e l´tre.1. s.3. l´sd o e e o a e a a 14.2.1. r.

l´sd az 5. z. e a szakaszt. l´sd a 9.2. r.• GL MAP1 VERTEX 4 Az egydimenzi´s ki´rt´kel˝ a cs´cspontok x. l´sd a 14.2. z koordin´t´it e o e e o u aa hoz-e l´tre. e o a • GL MATRIX MODE A kurrens m´trixverem. szakaszt. s.1.2. e a szakaszt. y. l´sd a 9. w koore o e e o u din´t´it hoz-e l´tre. szakaszt. w kooro e e o u din´t´it hoz-e l´tre. l´sd a 14. illetve v param´terei ´rtelmez´si tartom´ny´nak hat´rai.7. a a u • GL MAX CLIENT ATTRIB STACK DEPTH Az attrib´tumverem szintjeinek maxim´lis sz´ma.2.2. l´sd e o e e o a e a a 14. z.2. l´sd a 14. l´sd a 14.4. y. szakaszt. szakaszt. e a • GL MAP2 VERTEX 4 A k´tdimenzi´s ki´rt´kel˝ a cs´cspontok x. u aa e a • GL MAP2 VERTEX 3 A k´tdimenzi´s ki´rt´kel˝ a cs´cspontok x. szakaszt. l´sd a 14. szakaszt.7. t. a a 155 . e o a a a a a a • GL MAP STENCIL A pixelmozgat´sok sor´n a stencilindexek t´bl´zat alapj´n cser´lend˝k-e. r s t q • GL MAP2 TEXTURE COORD 4 A k´tdimenzi´s ki´rt´kel˝ e o e e o text´rakoordin´t´kat hoz-e l´tre. e e a a a a • GL MAP2 GRID SEGMENTS A glMapGrid2*() f¨ggv´nnyel l´trehozand´ u e e o r´cspontok sz´ma u. l´sd a 14. a a a a • GL MAP2 INDEX A k´tdimenzi´s ki´rt´kel˝ sz´ e o e e o ınindexeket hoz-e l´tre.2. u e e • GL MAP2 GRID DOMAIN A glMapGrid2*() f¨ggv´ny u.2. u aa e a ki´rt´kel˝ e e o ki´rt´kel˝ e e o ki´rt´kel˝ e e o r. A k´tdimenzi´s e o • GL MAP2 TEXTURE COORD 1 text´rakoordin´t´kat hoz-e l´tre. l´sd a 14. aa e a • GL MAP2 COLOR 4 A k´tdimenzi´s ki´rt´kel˝ sz´ e o e e o ıneket hoz-e l´tre. r. a a • GL MAX 3D TEXTURE SIZE Az OpenGL implement´ci´ ´ltal kezelhet˝ 3D-s a o a o text´r´k m´ret´nek durva becsl´se. s. szakaszt. l´sd a 14. illetve v ir´nyban. szakaszt. l´sd a 14. y. szakaszt. szakaszt. • GL MAP2 NORMAL A k´tdimenzi´s ki´rt´kel˝ norm´lisokat hoz-e l´tre. l´sd a 13. szakaszt. szakaszt. szakaszt. l´sd a 14.2. u aa e a • GL MAP2 TEXTURE COORD 2 A k´tdimenzi´s e o text´rakoordin´t´kat hoz-e l´tre. ua e e e a u e • GL MAX ATTRIB STACK DEPTH A kliens attrib´tumverm´ben a szintek maxim´lis sz´ma.2. aa e a • GL MAP COLOR A pixelmozgat´sok sor´n a sz´ a a ınek ´s sz´ e ınindexek t´bl´zat alapj´n a a a cser´lend˝k-e. l´sd a 14. u aa e a • GL MAP2 TEXTURE COORD 3 A k´tdimenzi´s e o text´rakoordin´t´kat hoz-e l´tre.2.6. szakaszt.

l´sd a 9.2. szakaszt. e o e e u e a e • GL MAX LIGHTS A f´nyforr´sok sz´m´nak maximuma. l´sd a 6.3.8. ´s a 14. ´s fel¨letek rendj´nek maximuma.2. a • GL MAX MODELVIEW STACK DEPTH A n´z˝pont-modell transzform´ci´k e o a o m´trixai sz´m´ra fenntartott veremben a szintek sz´m´nak maximuma.2. l´sd az 5.• GL MAX CLIP PLANES Az opcion´lis v´g´s´ a a o ıkok maxim´lis sz´ma. e e e a • GL MAX TEXTURE STACK DEPTH A text´r´k m´trixai sz´m´ra fenntartott ua a a a veremben a szintek sz´m´nak maximuma. a a • GL MAX ELEMENTS VERTICES A t¨mbben t´rolhat´ cs´cspontok sz´m´nak jao a o u a a vasolt maximuma. l´sd az 5. l´sd a 7. • GL MAX COLOR MATRIX STACK DEPTH A sz´ atrixok verm´ben a szintek ınm´ e maxim´lis sz´ma. szakaszt. • GL MINMAX A pixelekhez t´rolt ´rt´kek minimum´nak ´s maximum´nak a e e a e a sz´m´ asa enged´lyezett-e. • GL MAX VIEWPORT DIMS A k´pmez˝ m´reteinek maximuma. szakaszt. a a e l´sd a 12. e o a o a • GL MODELVIEW STACK DEPTH A n´z˝pont-modell transzform´ci´k m´trixai sz´m´ra fenntartott veremben a szintek pillanatnyi sz´ma. l´sd a 14.1. a a a a a • GL MAX NAME STACK DEPTH A kiv´laszt´si n´vverem szintjeinek maximuma.3. a a a a a • GL MAX PROJECTION STACK DEPTH A vet´ esi transzform´ci´k m´trixai ıt´ a o a sz´m´ra fenntartott veremben a szintek sz´m´nak maximuma. • GL MAX EVAL ORDER A glMap1*() ´s glMap2*() ki´rt´kel˝k ´ltal kezelt e e e o a B´zier-g¨rb´k.1. e a a a a • GL MAX LIST NESTING A display-list´k egym´sba ´gyaz´s´nak maxim´lis a a a aa a szintje. a a a u e a • GL MAX TEXTURE UNITS ARB A t´mogatott text´raegys´gek sz´ma. a a a 156 . a a • GL MAX ELEMENTS INDICES A t¨mbben t´rolhat´ cs´cspontok indexei o a o u sz´m´nak javasolt maximuma.2. a ıt´ e • GL MODELVIEW MATRIX A kurrens n´z˝pont-modell transzform´ci´s m´trix 16 e o a o a eleme. a • GL MAX PIXEL MAP TABLE A t´bl´zat szerinti sz´ a a ıncser´hez haszn´lhat´ e a o t´bl´zatok sz´m´nak maximuma. szakaszt.szakaszokat. szae o e a kaszt. l´sd a 13. a a a a • GL MAX TEXTURE SIZE Az OpenGL implement´ci´ ´ltal kezelhet˝ text´r´k a o a o ua m´ret´nek durva becsl´se. szakaszt. a a a szakaszt.

• GL NAME STACK DEPTH A kiv´laszt´si n´vverem szintjeinek pillanatnyi sz´ma, a a e a l´sd a 12.1. szakaszt. a • GL NORMAL ARRAY A norm´lisok t¨mb¨kben val´ t´rol´sa enged´lyezett-e. a o o o a a e a o e a o o • GL NORMAL ARRAY STRIDE A norm´lisok t¨mbj´ben az egym´st k¨vet˝ adatok t´vols´ga. a a • GL NORMAL ARRAY TYPE A norm´lisok t¨mbj´nek t´ a o e ıpusa. • GL NORMALIZE A norm´lisok automatikus normaliz´l´sa enged´lyezett-e, l´sd a aa e a a 3.1. szakaszt. o a ır´ a • GL PACK ALIGNMENT A pixelek adatainak a mem´ri´ba ´ asa sor´n a byte-ok elrendez´se, l´sd a 9.6. szakaszt. e a • GL PACK IMAGE HIGHT A pixelek adatainak a mem´ri´ba ´ asa sor´n a k´p o a ır´ a e magass´ga, l´sd a 9.6. szakaszt. a a • GL PACK LSB FIRST Az 1 bit/pixel t´ u adatoknak a mem´ri´ba ´ asa sor´n ıpus´ o a ır´ a a mem´ria byte-jainak legkisebb helyi´rt´k˝ bitj´be kezdi-e az ´ ast, l´sd a 9.6. o e e u e ır´ a szakaszt. • GL PACK ROW LENGTH A pixelek adatainak a mem´ri´ban haszn´lt sorhossza, o a a l´sd a 9.6. szakaszt. a o o a ır´ o • GL PACK SKIP IMAGES Az els˝ pixelek adatainak a mem´ri´ba ´ asa el˝tt kihagyand´ k´ppixelek sz´ma, l´sd a 9.6. szakaszt. o e a a • GL PACK SKIP PIXELS Az els˝ pixelek adatainak a mem´ri´ba ´ asa el˝tt kio o a ır´ o hagyand´ pixelek sz´ma, l´sd a 9.6. szakaszt. o a a • GL PACK SKIP ROWS Az els˝ pixelek adatainak a mem´ri´ba ´ asa el˝tt kio o a ır´ o hagyand´ pixelsorok sz´ma, l´sd a 9.6. szakaszt. o a a • GL PACK SWAP BYTES Az pixelek adatainak a mem´ri´ba ´ asa el˝tt a 2 vagy o a ır´ o 4 byte-on t´rolt adatok felcser´lend˝k-e, l´sd a 9.6. szakaszt. a e o a • GL PERSPECTIVE CORRECTION HINT A sz´ ıneknek ´s text´r´knak a pere ua spekt´ torz´ as miatt sz¨ks´ges intepol´ci´j´hoz a pontoss´g, l´sd a 8.2. szakaszt. ıv ıt´ u e a oa a a o a ır´ • GL PIXEL MAP A TO A SIZE Az pixelek adatainak a mem´ri´ba ´ asakor az alf´b´l alf´ba t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. a o a ıpus´ a a a a e a • GL PIXEL MAP B TO B SIZE Az pixelek adatainak a mem´ri´ba ´ asakor a o a ır´ k´kb˝l k´kbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. e o e ıpus´ a a a a e a o a ır´ • GL PIXEL MAP G TO G SIZE Az pixelek adatainak a mem´ri´ba ´ asakor a z¨ldb˝l z¨ldbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. o o o ıpus´ a a a a e a o a ır´ • GL PIXEL MAP I TO A SIZE Az pixelek adatainak a mem´ri´ba ´ asakor az alf´b´l indexbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. a o ıpus´ a a a a e a 157

• GL PIXEL MAP I TO B SIZE Az pixelek adatainak a mem´ri´ba ´ asakor az ino a ır´ dexb˝l k´kbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. o e ıpus´ a a a a e a • GL PIXEL MAP I TO G SIZE Az pixelek adatainak a mem´ri´ba ´ asakor az ino a ır´ dexb˝l z¨ldbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. o o ıpus´ a a a a e a o a ır´ • GL PIXEL MAP I TO I SIZE Az pixelek adatainak a mem´ri´ba ´ asakor az indexb˝l indexbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. o ıpus´ a a a a e a • GL PIXEL MAP I TO R SIZE Az pixelek adatainak a mem´ri´ba ´ asakor az ino a ır´ dexb˝l v¨r¨s t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. o o o ıpus´ a a a a e a • GL PIXEL MAP R TO R SIZE Az pixelek adatainak a mem´ri´ba ´ asakor a o a ır´ v¨r¨sb˝l v¨r¨sbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. oo o oo ıpus´ a a a a e a • GL PIXEL MAP S TO S SIZE Az pixelek adatainak a mem´ri´ba ´ asakor a steno a ır´ cilb˝l stencilbe t´ u eltol´shoz haszn´lt t´bl´zat m´rete, l´sd a 9.6. szakaszt. o ıpus´ a a a a e a e a • GL POINT SIZE A pont alapelem m´rete, l´sd a 3.3.1. pontot. • GL POINT SIZE GRANULARITY A rendszer ´ltal t´mogatott pontm´retek k¨zti a a e o k¨l¨nbs´g sim´ uo e ıtott hat´r´ megjelen´ esn´l, l´sd a 8.2.1. pontot. au ıt´ e a • GL POINT SIZE RANGE Sim´ ıtott hat´r´ pontok m´ret´nek minimuma ´s maxiau e e e muma, l´sd a 8.2.1. pontot. a aa ıt´ e a • GL POINT SMOOTH A pont alapelemek hat´r´nak sim´ asa enged´lyezett-e, l´sd a 8.2.1. pontot. • GL POINT SMOOTH HINT A pont alapelem hat´r´nak sim´ asa milyen min˝s´g˝, aa ıt´ oe u l´sd a 8.2. szakaszt. a • GL POLYGON MODE A poligonok (oldalank´nt), l´sd a 3.3.3. pontot. e a k´t e oldal´nak a megjelen´ esi ıt´ m´dja o

• GL POLYGON OFFSET FACTOR A poligon offsetj´nek sk´l´z´s´hoz haszn´lt e aa a a a t´nyez˝. e o • GL POLYGON OFFSET UNITS A poligon raszteriz´l´sakor a fragmentumhoz aa adand´ ´rt´k. oe e o o o ıt´ • GL POLYGON OFFSET FILL Kit¨lt¨tt poligonok offsettel val´ megjelen´ ese enged´lyezett-e. e • GL POLYGON OFFSET LINE Hat´rukkal reprezent´lt poligonok offsettel val´ a a o megjelen´ ese enged´lyezett-e. ıt´ e u a • GL POLYGON OFFSET POINT Cs´cspontjaival reprezent´lt poligonok offsettel val´ megjelen´ ese enged´lyezett-e. o ıt´ e aa ıt´ e a • GL POLYGON SMOOTH A poligonok hat´r´nak sim´ asa enged´lyezett-e, l´sd a 8.2.2. pontot. 158

• GL POLYGON SMOOTH HINT A poligon alapelem hat´r´nak sim´ asa milyen aa ıt´ min˝s´g˝, l´sd a 8.2. szakaszt. oe u a • GL POLYGON STIPPLE A poligonok mint´val val´ kit¨lt´se enged´lyezett-e, l´sd a o o e e a a 3.3.5. pontot. • GL POST COLOR MATRIX COLOR TABLE A sz´ atrixszal val´ transzınm´ o form´l´s ut´n t´bl´zat szerinti sz´ aa a a a ıncsre enged´lyezett-e. e • GL POST COLOR MATRIX RED BIAS A sz´ atrixszal val´ transzform´l´s ınm´ o aa ut´n a fragmentumokra alkalmazand´, v¨r¨s szerinti eltol´s, l´sd a 9.7. szakaszt. a o oo a a • GL POST COLOR MATRIX GREEN BIAS A sz´ atrixszal val´ transzform´l´s ınm´ o aa ut´n a fragmentumokra alkalmazand´, z¨ld szerinti eltol´s, l´sd a 9.7. szakaszt. a o o a a • GL POST COLOR MATRIX BLUE BIAS A sz´ atrixszal val´ transzform´l´s ınm´ o aa ut´n a fragmentumokra alkalmazand´, k´k szerinti eltol´s, l´sd a 9.7. szakaszt. a o e a a • GL POST COLOR MATRIX ALPHA BIAS A sz´ atrixszal val´ transzform´l´s ınm´ o aa ut´n a fragmentumokra alkalmazand´, alfa szerinti eltol´s, l´sd a 9.7. szakaszt. a o a a • GL POST COLOR MATRIX RED SCALE A sz´ atrixszal val´ transzform´l´s ınm´ o aa ut´n a fragmentumokra alkalmazand´, v¨r¨s szerinti sk´l´z´s t´nyez˝je, l´sd a 9.7. a o oo aa a e o a szakaszt. • GL POST COLOR MATRIX GREEN SCALE A sz´ atrixszal val´ transzınm´ o form´l´s ut´n a fragmentumokra alkalmazand´, z¨ld szerinti sk´l´z´s t´nyez˝je, aa a o o aa a e o l´sd a 9.7. szakaszt. a • GL POST COLOR MATRIX BLUE SCALE A sz´ atrixszal val´ transzform´l´s ınm´ o aa ut´n a fragmentumokra alkalmazand´, k´k szerinti sk´l´z´s t´nyez˝je, l´sd a 9.7. a o e aa a e o a szakaszt. • GL POST COLOR MATRIX ALPHA SCALE A sz´ atrixszal val´ transzınm´ o form´l´s ut´n a fragmentumokra alkalmazand´, alfa szerinti sk´l´z´s t´nyez˝je, l´sd aa a o aa a e o a a 9.7. szakaszt. u o ue a • GL POST CONVOLUTION COLOR TABLE A pixelek konvol´ci´s sz˝r´se ut´n t´bl´zat szerinti sz´ a a ıncsre enged´lyezett-e. e • GL POST CONVOLUTION RED BIAS A pixelek konvol´ci´s sz˝r´se ut´n a fragu o ue a mentumokra alkalmazand´, v¨r¨s szerinti eltol´s, l´sd a 9.7. szakaszt. o oo a a u o ue a • GL POST CONVOLUTION GREEN BIAS A pixelek konvol´ci´s sz˝r´se ut´n a fragmentumokra alkalmazand´, z¨ld szerinti eltol´s, l´sd a 9.7. szakaszt. o o a a • GL POST CONVOLUTION BLUE BIAS A pixelek konvol´ci´s sz˝r´se ut´n a u o ue a fragmentumokra alkalmazand´, k´k szerinti eltol´s, l´sd a 9.7. szakaszt. o e a a u o ue a • GL POST CONVOLUTION ALPHA BIAS A pixelek konvol´ci´s sz˝r´se ut´n a fragmentumokra alkalmazand´, alfa szerinti eltol´s, l´sd a 9.7. szakaszt. o a a 159

1.1.7. l´sd a 9. o e aa a e o a • GL POST CONVOLUTION ALPHA SCALE A pixelek konvol´ci´s sz˝r´se ut´n a u o ue a fragmentumokra alkalmazand´. l´sd a 11. l´sd a 9. l´sd a 12. v¨r¨s szerinti sk´l´z´s t´nyez˝je. z¨ld szerinti sk´l´z´s t´nyez˝je. 160 . ıt´ • GL RED BIAS A pixelmozgat´sok sor´n a v¨r¨s sz´ a a oo ınkomponensre alkalmazott eltol´s.1. • GL RED SCALE A pixelmozgat´sok sor´n a v¨r¨s sz´ a a oo ınkomponensre alkalmazott sk´l´z´s.• GL POST CONVOLUTION RED SCALE A pixelek konvol´ci´s sz˝r´se ut´n a u o ue a fragmentumokra alkalmazand´. szakaszt. szakaszt.7. szakaszt. o aa a e o a • GL PROJECTION MATRIX A kurrens vet´ esi m´trix 16 eleme. • GL POST CONVOLUTION GREEN SCALE A pixelek konvol´ci´s sz˝r´se ut´n a u o ue a fragmentumokra alkalmazand´. fejezetet. aa e e a a • GL SCISSOR TEST A kiv´g´si vizsg´lat enged´lyezett-e. aa a • GL RENDER MODE A megjelen´ es m´dj´t azonos´ o szimbolikus konstans. l´sd ıt´ o a ıt´ a a 12. szakaszt. l´sd a 9. e • GL RGBA MODE Az OpenGL RGBA m´dban m˝k¨dik-e. szaıt´ a a kaszt. l´sd a 11. • GL PROJECTION STACK DEPTH A vet´ esi transzform´ci´k m´trixai sz´m´ra ıt´ a o a a a fenntartott veremben a szintek pillanatnyi sz´ma. e a a a • GL SHADE MODEL A kurrens ´rnyal´si modell szimbolikus konstansa.2. l´sd az 5. • GL SEPARABLE 2D A sz´tv´laszthat´ k´tdimenzi´s konvol´ci´s sz˝r˝ ene a o e o u o uo ged´lyezett-e. szakaszt. l´sd a 9.7. a • GL RED BITS A sz´ ınpufferek h´ny biten t´rolj´k a v¨r¨s sz´ a a a oo ınkomponenst. szakaszt. a a a e a • GL SELECTION BUFFER SIZE A kiv´laszt´si puffer m´rete. szakaszt. o o aa a e o a u o ue a • GL POST CONVOLUTION BLUE SCALE A pixelek konvol´ci´s sz˝r´se ut´n a fragmentumokra alkalmazand´.2. • GL RESCALE NORMAL A transzform´ci´k ut´n a norm´lisok normaliz´l´sa ena o a a aa ged´lyezett-e. l´sd a 4. szaa a e a kaszt. k´k szerinti sk´l´z´s t´nyez˝je. szao oo aa a e o a kaszt.1. o u o • GL SCISSOR BOX A kiv´g´si vizsg´latokhoz haszn´lt ablak bal als´ sark´nak koa a a a o a ordin´t´i. l´sd a a 10. a • GL READ BUFFER Az olvashat´ sz´ o ınpuffert azonos´ o szimbolikus konstans.7. magass´ga. sz´less´ge. alfa szerinti sk´l´z´s t´nyez˝je.

amit a stencilvizsg´laton ´tmen˝. a a • GL STENCIL CLEAR VALUE A stencilpuffer t¨rl´si ´rt´ke. l´sd a 11. a e a • GL STENCIL VALUE MASK A stencilvizsg´lathoz haszn´lt maszk. l´sd aa a e e a a 10.3.1.3. e a • GL SMOOTH POINT SIZE GRANUALITY A rendszer ´ltal t´mogatott a a pontm´retek k¨zti k¨l¨nbs´g sim´ e o uo e ıtott hat´r´ megjelen´ esn´l.3. amit a stencilvizsg´laton ´s a m´lys´gvizsg´laton is ´tmen˝ fragmentumokra a e e e a a o alkalmaz a rendszer. l´sd a 11.3. o a e e a • GL STEREO A sztereoszk´pikus (bicentr´lis) lek´pez´st t´mogatja-e az implement´ci´.3. au ıt´ e a • GL SMOOTH POINT SIZE RANGE Sim´ ıtott hat´r´ pontok m´ret´nek miniau e e muma ´s maximuma. pontot. l´sd a 3. l´sd a 11.5. • GL STENCIL BITS A stencilpuffer bits´ ıkjainak sz´ma. l´sd a 11. a • GL STENCIL PASS DEPTH PASS Azt a m˝veletet azonos´ o szimbolikus konstu ıt´ ans.2. a a a szakaszt. pontot. sza a e e a akaszt. a o a • GL STENCIL FUNC A stencilvizsg´lathoz haszn´lt f¨ggv´nyt azonos´ o szimbolia a u e ıt´ kus konstans. l´sd a 11. amit a stenu ıt´ cilvizsg´laton fennakad´ fragmentumokra alkalmaz a rendszer. 161 .3. a a e a szakaszok vonalvas- • GL SMOOTH LINE WIDTH GRANUALITY A rendszer ´ltal t´mogatott vonala a vastags´gok k¨zti k¨l¨nbs´g sim´ a o uo e ıtott hat´r´ megjelen´ esn´l.2.• GL SMOOTH LINE WIDTH RANGE Sim´ ıtott hat´r´ au tags´g´nak minimuma ´s maximuma. pontot. l´sd a 13. a • GL STENCIL REF A stencilvizsg´lathoz haszn´lt referencia´rt´k.3. szakaszt.2.3. szakaszt. l´sd a 11. l´sd a 11. szakaszt. l´sd a 8. a u a o u e e e a • GL TEXTURE 1D Az egydimenzi´s text´ralek´pez´s enged´lyezett-e. • GL STENCIL WRITEMASK A stencilpuffer maszkol´s´hoz haszn´lt ´rt´k.5. szakaszt. l´sd a 8. au ıt´ e a pontot. o e e e a • GL STENCIL FAIL Azt a m˝veletet azonos´ o szimbolikus konstans. a • GL STENCIL PASS DEPTH FAIL Azt a m˝veletet azonos´ o szimbolikus konstu ıt´ ans.3. l´sd a 11. szakaszt.2.3. de a m´lys´gvizsg´laton fennakad´ fragmena a o e e a o tumokra alkalmaz a rendszer.1. szakaszt. l´sd a 10. szakaszt. l´sd a 3.7. szakaszt. szakaszt. • GL STENCIL TEST A stencilvizsg´lat enged´lyezett-e. a o • GL SUBPIXEL BITS Az alpixelek (amiket a rendszer az ablakkoordin´taa rendszerben a raszteriz´lt alakzatok poz´ a ıcion´l´sakor haszn´l) felbont´s´hoz aa a aa haszn´lt bitek becs¨lt sz´ma.

2.11. szakaszt.3. e a • GL TEXTURE GEN S A text´r´k s koordin´t´j´nak automatikus l´trehoz´sa enua aaa e a ged´lyezett-e. e u aa o e • GL TEXTURE COORD ARRAY SIZE A text´rakoordin´t´k t¨mbj´nek egy-egy elem´ben h´ny koordin´ta t´rolhat´. pontot. szakaszt. e a • GL TEXTURE GEN R A text´r´k r koordin´t´j´nak automatikus l´trehoz´sa enua aaa e a ged´lyezett-e. a o u e e e a szakaszt. a o o a a • GL TEXTURE COORD ARRAY TYPE A text´rakoordin´t´k t¨mbj´ben az eleu aa o e mek t´ ıpusa. l´sd a 13. l´sd a 9. a a ıpus´ o a o o • GL UNPACK LSB FIRST Az 1 bit/pixel t´ u adatoknak a mem´ri´b´l val´ olvas´sa sor´n a mem´ria byte-jainak legkisebb helyi´rt´k˝ bitj´be kezdi-e az ´ ast. pontot. e a o a o o a e • GL UNPACK IMAGE HIGHT Pixeleknek a mem´ri´b´l val´ olvas´sakor a k´p magass´ga. szakaszt.2. l´sd a 13.3. • GL TEXTURE GEN Q A text´r´k q koordin´t´j´nak automatikus l´trehoz´sa enua aaa e a ged´lyezett-e. pontot. ıt´ a • GL TEXTURE 3D A h´romdimenzi´s text´ralek´pez´s enged´lyezett-e. l´sd a 13. pontot. l´sd a 13.6.9. • GL TEXTURE BINDING 3D A kurrens h´romdimenzi´s text´raobjektum azoa o u nos´ oja. pontot.11. a 162 .9. ıt´ a • GL TEXTURE 2D A k´tdimenzi´s text´ralek´pez´s enged´lyezett-e. e a u a • GL TEXTURE MATRIX A kurrens text´ram´trix 16 eleme. ıt´ a • GL TEXTURE COORD ARRAY A text´rakoordin´t´k t¨mbj´nek haszn´lata enu aa o e a ged´lyezett-e. a a o e e u e ır´ l´sd a 9. l´sd a 13. l´sd a 13. e a a a o • GL TEXTURE COORD ARRAY STRIDE A text´rakoordin´t´k t¨mbj´ben az u aa o e egym´st k¨vet˝ elemek t´vols´ga.• GL TEXTURE BINDING 1D A kurrens egydimenzi´s text´raobjektum azoo u nos´ oja. l´sd a 13.3.3. e a • GL TEXTURE GEN T A text´r´k t koordin´t´j´nak automatikus l´trehoz´sa enua aaa e a ged´lyezett-e. pontot. pontot.2.2.6. u a a • GL UNPACK ALIGNMENT Pixeleknek a mem´ri´b´l val´ olvas´sakor a byte-ok o a o o a elrendez´se. l´sd a 13.6.11. e o u • GL TEXTURE BINDING 2D A kurrens k´tdimenzi´s text´raobjektum azonos´ oja.6. e o u e e e a szakaszt. l´sd a 13. • GL TEXTURE STACK DEPTH A text´ram´trix szintjeinek pillanatnyi sz´ma.9. l´sd a 9.11.

A plane param´ter ´rt´ke e e e a oı a a GL CLIP PLANEi lehet. A rendszer a hib´t okoz´ f¨ggv´ny h´ as´t figyelmen k´ ul hagyja. A plane param´terrel azonos´ e ıtott opcion´lis v´g´s´ n´z˝pontkoordin´ta-rendszerbeli a a o ık e o a implicit alakj´nak egy¨tthat´it adja vissza az equation c´ a u o ımen. a • GL UNPACK SKIP IMAGES Az els˝ pixelek adatainak a mem´ri´b´l val´ olvas´sa o o a o o a el˝tt kihagyand´ pixelek sz´ma. de nincs u e a o u e ıv´ a ıv¨ egy´b mell´khat´sa a hib´nak. sz´less´ge ´s magass´ga. pontot.4.2. szakaszt.6.• GL UNPACK ROW LENGTH Pixeleknek a mem´ri´b´l val´ olvas´sakor haszn´lt o a o o a a sorhossz. szakaszt. u o e a e • GL VERTEX ARRAY SIZE A cs´cspontokat h´ny koordin´t´val t´roljuk a t¨mbu a aa a o ben. l´sd a 9. m´ a hibajelz˝t ki nem olvassuk a glGetError() o ıt ´ a ıg o f¨ggv´nnyel. (i = 0. a 163 .3. szakaszt. a a u aa a e o a • GL ZOOM Y Pixelmozgat´skor az y ir´ny´ sk´l´z´si t´nyez˝. szakaszt.2. o o a a • GL UNPACK SKIP ROWS Az els˝ pixelek adatainak a mem´ri´b´l val´ olvas´sa o o a o o a el˝tt kihagyand´ pixelsorok sz´ma. a hibajelz˝h¨z hozz´rendeli a megfelel˝ ´rt´ket ´s a e o o a o e e e mindaddig nem r¨gz´ ujabb hib´t. a e o a • GL VERTEX ARRAY A cs´cspontok t¨mbj´nek haszn´lata enged´lyezett-e. a a u aa a e o a void glGetClipPlane (GLenum plane. a a • GL VERTEX ARRAY TYPE A cs´cspontok t¨mbj´nek t´ u o e ıpusa. o o a a • GL UNPACK SKIP PIXELS Az els˝ pixelek adatainak a mem´ri´b´l val´ olvas´sa o o a o o a el˝tt kihagyand´ pixelek sz´ma.4. v´g´s´kok sz´ma−1) (l´sd az 5. GLenum glGetError (void).2. . . l´sd a 9. a • GL ZOOM X Pixelmozgat´skor az x ir´ny´ sk´l´z´si t´nyez˝. Ha a rendszer hib´t ´szlel. l´sd a 9.6. o o a a • GL UNPACK SWAP BYTES Pixeleknek a mem´ri´b´l val´ olvas´sakor a 2 vagy o a o o a 4 byte-on t´rolt adatok felcser´lend˝k-e. l´sd a 9. GLdouble *equation). Visszaadja a kurrens hibak´dot ´s t¨rli a hibajelz˝t (GL NO ERROR).6. e o o a aa e e e a l´sd az 5. l´sd a 9.6. l´sd a 9. szakaszt. e e a a A k¨vetkez˝ hibajelz˝k defini´ltak: o o o a • GL NO ERROR A rendszer nem jegyzett fel hib´t. szakaszt. l´sd a 9. . pontot. A rendszer o e o o minden ´ltala figyelt hib´hoz egy numerikus k´dot ´s egy szimbolikus konstanst rena a o e del. szakaszt). • GL VIEWPORT A k´pmez˝ bal als´ sark´nak koordin´t´i. . • GL VERTEX ARRAY STRIDE A cs´cspontok t¨mbj´ben az egym´st k¨vet˝ eleu o e a o o mek t´vols´ga.6.

a o mint az imple- void glGetLightfv (GLenum light. amelyik k´ ul esik az ´rtelmez´si tartom´nyon. vagy eg´sz sz´mk´nt (a m´sodik h´ asi forma).] intervallumot line´risan lek´pezi a rendszer ´ltal ´br´zolhat´ a e a a a o legkisebb ´s legnagyobb eg´sz ´ltal hat´rolt intervallumra. u e a • GL OUT OF MEMORY Nincs el´g mem´ria a f¨ggv´ny v´grehajt´s´hoz. ıv¨ e e a • GL INVALID OPERATION A v´grehajtand´ m˝velet nem megengedett a rendszer e o u pillanatnyi ´llapot´ban. GLenum pname. u e • GL INVALID VALUE Valamely f¨ggv´ny h´ as´n´l olyan numerikus ´rt´ket adtu e ıv´ a a e e unk meg. • GL DIFFUSE A f´nyforr´s sz´rt f´ny¨sszetev˝j´nek RGBA komponenseit adja e a o e o oe vissza. w koordin´t´i a n´z˝pontkoordin´tae a e aa e o a rendszerben. hogy a [−1. • GL SPOT EXPONENT A reflektor f´nyerej´nek cs¨kken´se. e a u o o e o oe • GL SPECULAR A f´nyforr´s t¨kr¨z¨tt f´ny¨sszetev˝j´nek RGBA komponenseit adja vissza. u e u a • GL STACK UNDERFLOW A megh´ ıvott f¨ggv´ny verem-alulcsordul´st okozna. GLfloat *params). u e a e a • GL SPOT DIRECTION A reflektorszer˝ f´nyforr´s tengely´nek ir´nya ( x.. e e a a A pname ´rt´kei. y. A rende o u e e aa szer tov´bbi m˝k¨d´se nem meghat´rozhat´. • GL POSITION A f´nyforr´s hely´nek x. y. akkor ugy konvert´lja a kom´ a ponenst. z. e e o e • GL SPOT CUTOFF A reflektor k´pj´nak f´l ny´ assz¨ge. GLenum pname. A light azonos´ oj´ f´nyforr´s param´tereit adja vissza val´s sz´mk´nt (az els˝ h´ asi ıt´ u e a e o a e o ıv´ forma). void glGetLightiv (GLenum light. z). a u o e a o • GL TABLE TOO LARGE A megadott t´bl´zat nagyobb. u a e ıl´ o 164 . a a • GL STACK OVERFLOW A megh´ ıvott f¨ggv´ny verem-t´lcsordul´st okozna. Ha eg´sz sz´mk´nt k´rdez¨nk le sz´ e a e e u ınkomponenseket. a a ment´ci´ban megengedett maximum.• GL INVALID ENUM Rossz szimbolikus konstanssal h´ ıvtuk meg valamelyik f¨ggv´nyt. A light param´ter ´rt´ke e a e a ıv´ e e e GL LIGHTi 0 ≤ i < GL MAX LIGHTS lehet. ´s a hat´sukra visszakapott ´rt´kek az al´bbiak: e e e a e e a • GL AMBIENT A f´nyforr´s k¨rnyezeti f´ny¨sszetev˝j´nek RGBA komponenseit e a o e o oe adja vissza. 1. A k´ ant ´rt´ket a params c´ ıv´ e e ımen kapjuk vissza. GLint *params).

o void glGetMapdv (GLenum target. e a a a u o • GL QUADRATIC ATTENUATION A f´nytompul´s m´sodfok´ tagj´nak egy¨tte a a u a u hat´ja. VERTEX 3. TEXTURE COORD 4. A glMap1*() ´s glMap2*() f¨ggv´nyekkel l´trehozott ki´rt´kel˝k (B´zier-g¨rbe. TEXTURE COORD 2. TEXTURE COORD 3. A params c´ ımen visszaadja a poligonok face oldal´nak a pname param´terrel azoa e nos´ ıtott anyagtulajdons´gait. GLenum pname.. a a a o e e a a face ´rt´ke GL FRONT vagy GL BACK lehet. GLint *values). GL MAP2 TEXTURE COORD 1. illetve fel¨let eset´n az u ´s v ir´ny´ rendeket adja vissza. ile u e e e e o e o letve fel¨let megad´sok) param´tereit adja vissza a values c´ u a e ımen. a h´ ıvott f¨ggv´nynek u e megfelel˝en double. • GL DOMAIN A param´ter(ek) ´rtelmez´si tartom´ny´t (tartom´nyait) adja vissza. GL MAP2 VERTEX 3. GLenum query. ´ e A query param´terrel specifik´ljuk a lek´rdezend˝ adatokat. GL MAP1 TEXTURE COORD 2. GLdouble *values). GLfloat *values). GL MAP2 TEXTURE COORD 3. e aa • GL LINEAR ATTENUATION A f´nytompul´s line´ris tagj´nak egy¨tthat´ja. TEXTURE COORD 1. akkor ugy konvert´lja a komponenst.] intervallumot line´risan lek´pezi a rendszer ´ a a e ´ltal ´br´zolhat´ legkisebb ´s legnagyobb eg´sz ´ltal hat´rolt intervallumra. w). GL MAP2 VERTEX 4. INDEX. Ert´ke: e a e o • GL COEFF A kontrollpontokat adja vissza homog´n koordin´t´kban (x. o e e e A target param´ter lehets´ges ´rt´kei: e e e e GL GL GL GL GL GL GL MAP1 MAP1 MAP1 MAP1 MAP2 MAP2 MAP2 COLOR 4. e e e a a a void glGetMaterialfv (GLenum face. GL MAP2 NORMAL. o e o e u e e a u • GL ORDER A g¨rbe rendj´t. GLenum query. GLenum pname. GL MAP1 TEXTURE COORD 4. Ha eg´sz sz´mk´nt k´rdez¨nk le sz´ a e a e e u ınkomponenseket. GLenum query. void glGetMaterialiv (GLenum face. GL MAP1 INDEX. y. GLfloat *params). void glGetMapiv (GLenum target. e aa K´tdimenzi´s ki´rt´kel˝ (fel¨let) eset´n oszlopfolytonosan adja vissza a kontrolle o e e o u e pontok t¨mbj´t. GL MAP1 NORMAL. e e pname ´rt´kei: e e 165 . z.• GL CONSTANT ATTENUATION A f´ny tompul´s´nak konstans tagja. GL MAP1 VERTEX 4. GL MAP2 COLOR 4 . float vagy integer ´rt´kk´nt. GLint *params). 1. void glGetMapfv (GLenum target. hogy a [−1.

• GL AMBIENT Az anyag k¨rnyezeti f´ny visszaver˝d´si egy¨tthat´j´nak RGBA o e o e u oa komponenseit adja vissza. a u oa • GL COLOR INDEXES Az anyag k¨rnyezeti. const GLubyte *glGetString (GLenum name). a a e • GL SHININESS Az anyag ragyog´si egy¨tthat´j´t adja vissza. a e ıt´ a 166 . and A TO A. a oe o e • GL RENDERER A megjelen´ eshez haszn´lt hardver platform konfigur´ci´j´nak ıt´ a a oa neve. GL PIXEL MAP I TO R. GLushort *values). • GL SPECULAR Az anyag t¨kr¨z¨tt visszaver˝d´si egy¨tthat´j´nak RGBA komu o o o e u oa ponenseit adja vissza. void glGetPixelMapusv (GLenum map. • GL DIFFUSE Az anyag sz´rt visszaver˝d´si egy¨tthat´j´nak RGBA komponenseit o o e u oa adja vissza. void glGetPixelMapuiv (GLenum map. • GL EXTENSIONS A t´mogatott OpenGL kieg´sz´ esek list´ja. GLfloat *values). • GL EMISSION Az anyag ´ltal kibocs´tott f´ny RGBA komponenseit adja vissza. sz´rt ´s t¨kr¨z¨tt visszaver˝d´si o o e u o o o e egy¨tthat´j´nak sz´ u oa ınindexeit adja vissza. A sz´ ınkomponensek map t´bl´zat szerinti m´dos´ as´nak be´ll´ asait adja vissza a a a o ıt´ a a ıt´ values c´ ımen. GL PIXEL MAP G TO G. map lehets´ges ´rt´kei: e e e GL GL GL GL PIXEL PIXEL PIXEL PIXEL MAP MAP MAP MAP I TO I. GL PIXEL MAP B TO B. a o o o a o ım´ name lehets´ges ´rt´kei: e e e • GL VENDOR Az implement´ci´´rt felel˝s c´g. GLuint *values). void glGetPixelMapufv (GLenum map. GL PIXEL MAP I TO B. R TO R. A poligonok kit¨lt´s´re haszn´lt 32 × 32 mint´t adja vissza a mask c´ o ee a a ımen. void glGetPolygonStipple (GLubyte *mask ). GL PIXEL MAP S TO S. a o a • GL VERSION Az implement´lt OpenGL verzi´sz´ma. GL PIXEL MAP I TO A. I TO G. Az implement´ci´ra vonatkoz´ sz¨veges inform´ci´ c´ et adja vissza.

hogy a pixelek adatait milyen t´ u adatk´nt t´roljuk. A level ≥ 0 param´terrel a lek´rdezend˝ text´ra r´szletess´g´nek ua e e o u e e e szintj´t kell megadni. GL UNSIGNED SHORT. coord a text´ra koordin´t´j´t azonos´ u aaa ıtja. e GL LUMINANCE ALPHA. GL BYTE. GLdouble *params).void glGetTexEnvfv (GLenum target. A format param´terrel azt kell megadni. GL BGR. GLint level. GLenum pname.vagy h´romdimenzi´s e o u o e a o text´r´t ad vissza. GLenum pname. GL ALPHA. Lehets´ges ´rt´kei: GL RED. GLenum pname. SHORT 5 6 5 REV. GL UNSIGNED BYTE 3 3 2. GL LUMINANCE. BYTE 2 3 3 REV. GLenum pname. GL T. GL TEXTURE 2D e e e e e ´s GL TEXTURE 3D. INT. pname lehets´ges e e e e ´rt´kei: e e • GL TEXTURE ENV MODE A kombin´l´s m´dj´t azonos´ o szimbolikus konstans. GLfloat *params). A pixels c´ ımen a target param´tert˝l f¨gg˝en egy-. a e e e GL BLUE. u o void glGetTexImage (GLenum target. GLint *params). void glGetTexGenfv (GLenum coord. GL RGBA. GL GREEN. void glGetTexEnviv (GLenum target. GLfloat *params). GLenum pname. e e pname lehets´ges ´rt´kei: e e e GL TEXTURE GEN MODE A text´rakoordin´t´k l´trehoz´s´ra haszn´lt f¨ggv´ny u aa e aa a u e azonos´ oja. void glGetTexGendv (GLenum coord. GL UNSIGNED SHORT 5 6 5. GL UNSIGNED SHORT 5 5 5 1. ´rt´ke GL S. GL GBRA. k´t. lehets´ges ´rt´kei: ıpus´ e a e e e GL GL GL GL GL UNSIGNED UNSIGNED UNSIGNED UNSIGNED UNSIGNED BYTE. a u o GL EYE PLANE A referencias´ n´z˝pontkoordin´ta-rendszerbeli implicit alakj´nak ık e o a a egy¨tthat´i. GL INT. aa o a ıt´ u u e ın´ • GL TEXTURE ENV COLOR A text´raf¨ggv´ny sz´ enek RGBA komponensei. A target param´ternek a GL TEXTURE ENV ´rt´ket kell adni. GLenum format. SHORT 4 4 4 4 REV. GL R. A glTexGen*() paranccsal megadott text´rakoordin´t´t l´trehoz´ f¨ggv´nynek a u aa e o u e pname param´terrel megadott jellemz˝it adja vissza a params c´ e o ımen. hogy a pixelek adae tait milyen form´ban akarjuk visszakapni. GL SHORT. 167 . vagy GL Q lehet. GLenum type. GL UNSIGNED SHORT 4 4 4 4. GL RGB. GL FLOAT. A pname param´terben specifik´lt text´raf¨ggv´ny param´tereit adja vissza a params e a u u e e c´ ımen. A type param´terrel azt adjuk meg. target lehets´ges ´rt´kei: GL TEXTURE 1D. ıt´ GL OBJECT PLANE A referencias´ objektumkoordin´ta-rendszerbeli implicit ık a alakj´nak egy¨tthat´i. void glGetTexGeniv (GLenum coord. GLvoid *pixels). GLint *params).

GL UNSIGNED SHORT 1 5 5 5 REV. GL TEXTURE WRAP R. target lehets´ges u e e ´rt´kei: GL TEXTURE 1D. GL UNSIGNED INT 10 10 10 2. GL TEXTURE MAX LOD. RESIDENT.GL TEXTURE PRIORITY. GL TEXTURE MIN FILTER. BASE LEVEL. WRAP S. GL TEXTURE 2D ´s GL TEXTURE 3D. GL UNSIGNED INT 2 10 10 10 REV. GL TEXTURE MAX LEVEL. BORDER COLOR. GLenum pname. GL TEXTURE WRAP T. 168 . GLfloat *params). GLenum pname. void glGetTexParameteriv (GLenum target. A params c´ ımen a target text´ra pname param´tereit adja vissza. MIN LOD. GL UNSIGNED INT 8 8 8 8 REV. GLint *params). GL UNSIGNED INT 8 8 8 8. pname lehets´ges e e e e ´rt´kei: e e GL GL GL GL GL GL TEXTURE TEXTURE TEXTURE TEXTURE TEXTURE TEXTURE MAG FILTER . void glGetTexParameterfv (GLenum target.

29 Gouroud-f´le. 100 glCopyTexSubImage1D(). 115 glColorMask(). 9. 92. 80 glColorMaterial(). 79 glClearAccum(). 55 glCallLists(). 46. 79 glClipPlane(). 88 egyszer˝ soksz¨g. 94. 15. 59 glCallList(). 49. 105. 56. 67. 67. 16. 86. 6. 75. 100 glCopyTexSubImage3D(). 95. 9. 116. 54–56 dithering. 83 a a oa ablak t¨rl´se.T´rgymutat´ a o ´rnyal´s. 27. 69. 97 glEdgeFlag(). 109. a 53 B-spline g¨rbe o deriv´lja. 154 glClear(). 48. 48. 106. 110 g¨mb. 63. 82. 140 bitt´rk´p. 144 glDrawBuffer(). 85. 109. 78 glClearDepth(). 114 glEndList(). 128 o glAccum(). 60. 97. 78 glClearStencil(). 18. 86–88. 114. 138 u g¨rbe. 30 e konstans. 49. 71. 49. 113. 46. 39 glDisable(). 44. 6. 13. 25. 96. 4. 82–84. 100 glCopyTexSubImage2D(). 21. 63. 113. 6. 50 glCopyPixels(). 11 u o egyszeresen ¨sszef¨gg˝. 23 glEnable(). 79 glClearColor(). 64. 41. 63. 4. 83. 80. 28. 12. 18. 88. 68 e e csonkak´p. 114 169 glBindTexture(). 79 glDrawPixels(). 16. 88. 38 glColor*(). 27. 140. 116. 26. 106 glDepthFunc(). 101 glCopyTexImage1D(). 7. 47–49. 49. 28. 58. 85. 83. 10. 101 glCullFace(). 76 glAlphaFunc(). 55. 20. 107 glBegin(). 29 folytonos. 86. 87 glDepthMask(). 69. 6 o e addit´ sz´ ıv ınkever´s. 83 glAreTexturesResident(). 130 o pontja. 12. 53. 21. 9. 6. 99. 29 a a ˜i modell. 114. 80 glDepthRange(). 53. 99. 58–61. 61. 38. 72. 60. 128 u deriv´lt. 61 anyagtulajdons´g. 24 e antialiasing. 115 glEvalCoord2*(). 11 o u o f´ny tompul´sa. 141 a display-lista. 45 e a fragmentum. 116 glEvalMesh1(). 15. 38. 62–64. 27. 44. 53. 54 glEvalCoord1*(). 95. 21. 144 glEnd(). 92. 79 glClearIndex(). 114. 140 a B´zier e fel¨let. 56 glDeleteTextures(). 56. 29 ´tl´tsz´s´g. 58. 20 glDeleteLists(). 106 glBlendFunc(). 69. 107. 70. 115 . 71. 72.

72. 40. 116. 90. 72. 39. 44. 148 glGetClipPlane(). 111. 48. 97. 105 glGet*(). 106. 64 glIndex*(). 165 glMapGrid1*(). 97–102 glTexImage3D(). 81 glStencilOp(). 121. 72. 19. 11 glRenderMode(). 62. 33. 115. 49. 56 glGenTextures(). 40. 167 glGetTexGen*(). 165 glMap2*(). 101 glTranslate*(). 166 glGetPolygonStipple(). 130 gluBeginTrim(). 106. 103. 26. 55 glPopName(). 84 glTexCoord*(). 56 glLoadIdentity. 55. 99. 117. 34 glScissor(). 63 glPolygonStipple(). 84 glStencilMask(). 166 glGetTexEnv*(). 18 glLineWidth(). 49 glLineStipple(). 107 glPushMatrix(). 69. 54. 114. 40. 99 glPixelTransfer*(). 91 glLogicOp(). 62. 87. 92. 107. 107 glTexGen*(). 166 glGetString(). 7. 54 glFlush(). 72 glPixelStore*(). 39. 4. 165 glGetPixelMap*(). 56 glNormal*(). 29 glStencilFunc(). 115. 91. 81. 71. 39. 156. 155 glMaterial*(). 105 glLight*(). 83 glSelectBuffer(). 35. 92 glFinish(). 40 glLoadIdentity(). 110 glTexSubImage1D(). 96. 112 glMultMatrix(). 168 glHint(). 55. 40 glLoadName(). 130 gluBeginSurface(). 154 glMapGrid2*(). 40. 55. 103 . 54. 91 glShadeModel(). 8. 70. 72. 115 glIndexMask(). 55 glPushName(). 91 glIsList(). 10. 90. 40. 80 glRect(). 55. 118. 122. 56. 46. 71. 69. 16 glPolygonMode(). 163 glGetError(). 164 glGetMap*(). 36. 71. 91 glPrioritizeTextures(). 88. 85. 122. 117 glFeedbackBuffer(). 34. 91. 28. 46. 56 glIsTexture(). 118. 167 glTexImage1D(). 90 glRotate*(). 146 glOrtho(). 115 glTexEnv*(). 19 glFrustum(). 98. 96. 100 glTexImage2D(). 43. 54. 54 glFog*(). 40. 147. 103. 80 glInitNames(). 98 glGetTexParameter*(). 50 170 glMatrixMode(). 33. 49 glLightModel*(). 91 glReadBuffer(). 116. 92 glPixelMap*(). 100 glTexSubImage3D(). 71. 68. 156. 123 gluBuild1DMipmapLevels(). 17 glListBase().glEvalMesh2(). 71 glPopMatrix(). 71 glPointSize(). 72. 101. 109. 72. 40. 21. 167 glGetTexImage(). 84. 39 glLoadMatrix(). 72. 35. 40 glGenLists(). 105. 71. 40 glScale*(). 55. 165 glGetMaterial*(). 38. 55. 83. 64 glFrontFace(). 80. 100 glTexSubImage2D(). 34 gluBeginCurve(). 17. 167 glGetTexLevelParameter*(). 80 glReadPixels(). 37 glPassThrough(). 144. 91. 70. 44. 99 glPixelZoom(). 105. 55. 75. 21. 55. 35. 16. 101 glTexParameter*(). 163 glGetLight*(). 40 glNewList(). 39. 34. 80. 34. 88 glMap1*(). 63. 123. 76.

28. 141 e pontja. 141 a pontja. 68. a ıt´ 46. 82. 140 glujDerNurbsCurve(). 92 gluPwlCurve(). 67. 115 glViewport(). 45. 77. 122. 9. 142 a norm´lvektor. 32. 122 gluEndTrim(). 131 gluLookAt(). 142 glujNurbsSurface(). 139 e u . 126. 134 glujParamCurve(). 128 gluQuadricTexture(). 122. 128 gluSphere(). 130 glujBezierSurface(). 10. 122. 101 e o -transzform´ci´. 97. 118. 64. 38. 124. 38 171 Gouroud. 122. e o 63. 16. 50 o e k´p. 43 mipmapping. 140 glujPointOnNurbsSurface(). 72. 36. 36 gluPickMatrix(). 95. 47. 123. 127. 35. 125. 37 gluPartialDisk(). 43. 118 fel¨let. 141 glujHermiteSpline(). 128 u kiv´laszt´s. 140 offset. 126. 99–101 e k´p. 9. 53. 108. 139 glujPointOnBezierCurve(). 39. 71 e k´pmez˝. 126 gluNurbsCallback(). 111. 102 gluCylinder(). 131 glujIsolineOnNurbsSurface(). 128 gluEndCurve(). 118. 45. 126 gluDisk(). 74. 34. 69. 128 Hermite-spline. 119. 128 glVertex*(). 127 ˜i modell. 126. 126 gluQuadricDrawStyle(). 125 gluNurbsCurve(). 30 henger. 11 megvil´g´ as. 39 a o n´z´si ir´ny. 133 konvex burok. 131 k¨d. 41. 123 gluQuadricCallback(). 38 a a NURBS. 102 modellkoordin´ta-rendszer. 121. 141 g¨rbe. 130. 121. 138 glujCircle(). 123 gluNurbsProperty(). 121 o deriv´ltja. 119. 21. 133 u norm´lisa. 68. 128 o uu k¨rnyezeti f´ny. 131 glujDerBsplineCurve(). 140 glujPointOnNurbsCurve(). 126. 124. 131 o k¨rcikk. 9. 63. 126. 126. 9 a normaliz´lt koordin´ta-rendszer. 92. 121. 34–36 e e a n´z˝pont. 43–45. 33. 128 gluPerspective(). 39 a o k´ppuffer. 17. 130 gluNewQuadric(). 38. 90 a a kontrollh´l´. 128 gluDeleteNurbsRenderer(). 130 gluNurbsSurface(). 118. 38. 119. 128 o uu k¨rgy˝r˝cikk. 118. 42. 122. 118. 82. 130 gluEndSurface(). 34. 33. 34 a modelltranszform´ci´. 141 glujNormalOfNurbsSurface(). 127 gluQuadricOrientation(). 163 norm´lis. 32. 142 a param´tervonala. 38. 82. 35. 27. 86. a 43. 133 param´teres fel¨let. 127. 2. 63 o k¨r. 34 gluNewNurbsRenderer(). 126. 110. 69. 125 gluNurbsCallbackData(). 33. 68. 129 o k¨rgy˝r˝. 33. 133. 119. 141 glujTrimmedNurbsCurve(). 126. 41–43. 41. 120. 124. 131 glujParamSurface(). 134 gluOrtho2D(). 119 gluDeleteQuadric(). 122. 127 gluQuadricNormals(). 126. 67. 60. 49. 126.gluBuild1DMipmaps(). 133 ao kontrollpont. 134. 119. 123 glujBezierCurve(). 49. 75. 33. 86 koordin´ta-rendszer.

35. 46. 28 kever´s. 88 t¨rl´se. 49 o e szubtrakt´ sz´ ıv ınkever´s. 100 o f¨ggv´nyek. 24 e addit´ 24 ıv. 38 a a v´g´s´ 36–38. 92 a vonalt´ ıpus. 90. 63. 16 e ponth´l´. 75. 48–50. 43. 79 a a kiv´laszt´si ˜. 104 r´szletess´gi szintje. 108 aa m´dos´ asa. 44. 24 e t¨kr¨z¨tt f´ny. 27. 99 o ıt´ megad´sa. 94 u egydimenzi´s ˜. 76 u o k´p˜. 103 uo trimmelt fel¨let. 24 a o sz´rt f´ny. 47. 131 e o param´tervonal. 19 a o hat´rol´ ´le. 74 e kiv´laszt´sa. 21 o e a megad´sa. 38–40. 18 vonalvastags´g. 107 u e h´romdimenzi´s ˜. 18 a pont alapelem l´trehoz´sa. 28 a megad´si m´d. 123 u g¨rbe. 90 a a m´lys´g˜. 134 ao puffer. 61. 101 a o helyettes´ o. 86 e e maszkol´sa. 98 ıt˝ ism´tl´se. 7. 35. 42. megad´s. 44. 32. 67 reflektor. 20 a fel´nk n´z˝ oldala. 42. 163 a o ık. 19 o u elhagy´sa. 133. 95 e o koordin´t´k. 74. 35. 78 o e visszacsatol´si ˜. 41. 92 a ragyog´s. ıt´ a o 82. 102 e e sz˝r˝k. 45. 110 e e k´tdimenzi´s ˜. 16. 61. 131 o v´g´s. vet´ esi transzform´ci´. 62. 21 a oe kit¨lt´se mint´val. 13 e a m´rete. 19 u o el˝jeles ter¨lete. 48 a raszteres objektum. 80 a stencil˜. 75. 46. 17. u o o e 108 172 text´ra. 74 ın sz´ ın˜. 77. 95 a objektumok. 141 e poligon. 83 gy˝jt˝˜. 19 e e o h´ts´ oldala. 49 sim´ as.param´teres g¨rbe. szubtrakt´ 24 ıv. ıt´ 87 sz´ ın index. 84 sz´ ˜. 17 a . 7. 94 visszacsatol´s. 11 poligon alapelem el¨ls˝ oldala. 76. 6.

D. [3] Shreiner. van Dam.trolltech. D. MA.. 1999. OpenGL programming guide. MA.. Version 1. L. Davis. ComputerBooks..edu/˜rademach/glui/ [8] http://www.Irodalomjegyz´k e [1] Foley. Csonka F. The official reference document to OpenGL.2. [4] Szirmay-Kalos. J.xmission. third edition. Addison-Wesley. J. Budapest. Springer.unc. 1999.. D.opengl.sgi. Addison-Wesley.com/software/opengl/ [10] http://www. Reading.. anim´ci´ ´s j´t´kfejleszt´s. [7] http://www.2. T..cs. Shreiner. The official guide to learning OpenGL. K.. D.. J. M. 1990. MA. Version 1.. A. third edition. Budapest.org/ [9] http://www. ComputerBooks. ae e [6] Woo. 2003. Reading. New York. a ıt´ e a o a o e [5] Szirmay-Kalos. second edition. Feiner. Antal Gy.com/ [11] http://www. Addison-Wesley.. Reading.html 173 .. L. [2] Salomon..com/˜nate/opengl. Computer Graphics: principles and practice. Hughes. Neider. OpenGL reference manual. S. (edt). F. Sz´m´ og´pes grafika. Computer graphics and geometric modeling. H´romdimenzi´s grafika. 1999. 1999..