Informatika | Grafika » Oláh Zoltán - 3D grafika és animáció

Alapadatok

Év, oldalszám:1998, 53 oldal

Nyelv:magyar

Letöltések száma:737

Feltöltve:2006. szeptember 03.

Méret:398 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

GÁBOR DÉNES FŐISKOLA 3D GRAFIKA ÉS ANIMÁCIÓ 180/98 OLÁH ZOLTÁN BUDAPEST 1998 Tartalom I AZ EMBERI LÁTÁS ÉS A PERSPEKTÍVIKUS GRAFIKA . 5 I.1 A LÁTOTT KÉP FELFOGÁSA 5 I.2 A LÁTÁS BIOLÓGIÁJA, KÉPALKOTÁS AZ EMLÉKEZET SEGÍTSÉGÉVEL 6 I.21 Szemünk felépítése 6 I.22 A látás alapjai 8 I.23 A visszavert fény érzékelése 9 I.24 Látott képek kiegészítése a vizuális emlékezet segítségével 9 I.25 Képek leképzése 10 I.3 A SZÍNLÁTÁS ÉS A LÁTÁS EGYÉB SAJÁTOSSÁGAI 10 I.31 Színek érzékelése 10 I.32 Látásunk időbeli felbontása 11 I.33 A színlátás egyéb jellemzői 12 I.34 A színkeverés két elterjedt módszere 12 I.35 Alakzatlátás 13 II MATEMATIKAI ALAPOK . 14 II.1 TESTEK FELSZÍNÉNEK KÖZELÍTÉSE 14 II.2 VEKTOROK R2-BEN ÉS R3-BAN 15 II.21 Irányított szakaszok 15 II.22 Vektorok jellemzői 15 II.23 Vektorok összege 16 II.24 Vektorok szorzása számmal 16 II.25 Vektorok lineáris kombinációja, a tér

dimenziója 17 II.26 Vektorok megadása koordinátákkal 18 II.27 Egyenesek paraméteres egyenletei 19 II.28 Vektorok szorzása 19 II. 2 8 1 A skaláris szorzat 19 II.282 A vektoriális szorzat 20 II.29 Pont és egyenes távolsága 21 II. 3 MÁTRIXSZÁMÍTÁS 23 II.31 Mátrixok jellemzői 23 II.32 Műveletek mátrixokkal 24 II.321 Mátrixok összeadása 24 II.322 Mátrix szorzása skalárral 24 II.323 Mátrixok szorzása 25 III GEOMETRIAI TRANSZFORMÁCIÓK . 26 III.1 TRANSZFORMÁCIÓK HÁROM DIMENZIÓBAN 26 III.11 Háromdimenziós forgatás 26 III.12 Vetítési típusok 29 III.13 Láthatóság 30 IV 3D GRAFIKA SZERKESZTŐPROGRAM BEMUTATÁSA . 31 IV.1 3D GRAFIKA SZERKESZTŐPROGRAM 10 VERZIÓJÁNAK FELHASZNÁLÓI KÉZIKÖNYVE 31 IV. 2 A PROGRAM FOLYAMATÁBRÁJA 40 IV.3 A PROGRAM ELJÁRÁSAI ÉS FÜGGVÉNYEINEK LEÍRÁSA 43 V 3D VIDEO STUDIO . 48 2 Bevezetés A számítógépes grafika segítségével a száraz matematikai tények szemléletes formában jelennek

meg a megfigyelő szeme előtt. Az emberi agy nem arra van berendezkedve, hogy digitális formájú információkat dolgozzon fel. Azt szoktuk meg, hogy az információkat elsősorban a szem révén, másodsorban pedig a hallás és a tapintás útján nyerjük, és ennek megfelelően dolgozzuk fel. Három dimenziós világban élünk. A számítógép nem tud három dimenzióban számolni, sem két dimenzióban, a gép digitalizált információkhoz kötött. Képes azonban a számítógép arra, hogy ezeket az információkat alkalmas programokkal könnyen áttekinthető rajzokká alakítsa. A számítógép nem véletlenül örvend oly nagy népszerűségnek az iparban és a kutatásokban. Segítségükkel a kísérletek gyakran egyszerűbben elvégezhetők, és lényegesen olcsóbbak is. A grafikus adatfeldolgozás jelentősége legjobban az alkalmazási területein keresztül mutatható meg:  Computer Added Design, vagyis automatizált vázlatkészítés, szerkesztés,

tervezés  orvostechnikai alkalmazások  térképészet  prezentációs grafika (üzleti grafika)  számítógépes játékok  a környezet szimulációja (pl. katonai alkalmazások)  filmkészítés, animáció  számítógépes művészet. A felsorolt alkalmazások többsége igényli is a három dimenziós megjelenítést, mivel a két dimenziós ábrázolás nem mindig eléggé szemléletes. A három dimenziós ábrázoláson belül is a mozgó térbeli grafikák állnak legközelebb a látásunkhoz. 3 A számítógépes ábrázolás egyik legérdekesebb feladata a mozgó képek készítése. Az ábrázolt alakzat illetve a vetítési irány mozgatási képleteinek ismeretében a feladat megoldásának nincs elvi akadálya. A számítógép teljesítőképessége azonban megszabja a megjelenítési sebesség felső határát, és ezáltal a mozgás látványának élvezhetőségét. Bonyolultabb térbeli alakzatok (újrarajzolással

történő mozgatása) esetén ez a felső határ eléggé alacsony is lehet. Az animációkészítés központi kérdése az egymás után következő képek egyenletes, villogásmentes megjelenítése. A képernyőre történő rajzolást úgy kell megvalósítani, hogy a rajzolóprogram akkor kezdje meg a képernyő tetején lévő sor kirajzolását, amikor a monitor vertikális elektronsugara befejezte az előző kép megjelenítését. Egy megfelelő teljesítményű számítógéppel elérhetjük azt, hogy mire az elektronsugár ismét a képernyő tetejére kerül, addigra a következő megjelenítendő kép a videokártya memóriájába kerüljön. A cél tehát olyan, számítógépre alkalmazható algoritmus létrehozása, amely a lehető legnagyobb mértékben igazodik látásunkhoz. Ahhoz, hogy a látásunknak ezt a típusú szimulációját meg tudjuk valósítani, meg kell ismerni szemünk szerkezetét, látásunk mechanizmusát, és az alkalmazott szoftver, hardver

környezetet figyelembe véve, olyan algoritmust kell előállítanunk, amely ezt számítógépen modellezi. A bemutatott matematikai modellekre támaszkodó 3D Grafika Szerkesztőprogram v.10 [forráskódja a mellékletben található] bemutatja a három dimenziós grafika és az animáció alapelveire támaszkodó mechanizmust. A Pascal nyelven írt program alapos térgeometriai ismeretekkel továbbfejleszthető, amely képes lehet szélesebb körű használatra. Bonyolultabb vetített képek testekké alakításával, majd újbóli síkra vetítésével, megfelelő példákkal a program hasznos segítség lehet az ábrázoló geometria elsajátítóinak. 4 I AZ EMBERI LÁTÁS ÉS A PERSPEKTÍVIKUS GRAFIKA I.1 A látott kép felfogása Az ember és környezete közötti kapcsolatban a látás a legfontosabb információszerzési mód, rendkívüli tömörsége és összetettsége miatt. A világosság, szín, alak, térbeliség illetve mozgás egyaránt része annak az

összetett fiziológiai folyamatnak, melyet látásnak nevezünk. A számítógépes képfeldolgozás sokszor az emberi látást próbálja modellezni, más esetekben pedig az emberi látással kapcsolatos ismereteket használja fel, építi be a feldolgozás folyamatába. Példaként említhető a JPEG képtömörítő eljárás, amely azt használja ki, hogy a szem nem tud annyi színt egymástól megkülönböztetni, mint amennyit a számítógép képes megjeleníteni. Egy másik hétköznapi példa: a televízió képernyőjén látott egymást gyorsan követő állóképeket a szem mozgóképnek látja. A szemünk recehártyáján keletkező képek kétdimenziós, síkbeli képek: szélességük és magasságuk van. Egy valós tárgynak, amelynek a képét látjuk mélysége is van. A magyarázata annak, hogy három dimenzióban látjuk a világot az, hogy két szemmel egymástól kicsit eltérő képet látunk. A retinánkon keletkező képeket agyunk egyesíti egy térbeli

képpé. A látás, mint tanult képesség nem független sem az adott földrajzi környezettől, sem az adott kortól. Például a különböző iskolázottsággal rendelkező afrikaiaknál gyakori volt, hogy a vizsgálati anyagként bemutatott képeket nem fogták fel a tér ábrázolásaként szokásos perspektivikus képnek. Tehát bizonyosra vehető, hogy a mai európai kultúrán nevelkedett szem számára a valósághoz igen közel álló perspektivikus ábrázolás értése és igénylése tanulás eredménye. 5 I.2 A látás biológiája, képalkotás az emlékezet segítségével I.21 Szemünk felépítése Szemünk jó közelítéssel 24 mm átmérőjű gömb alakú test (1.1 ábra), amelynek elülső részéből kiemelkedik a kisebb görbületi sugarú szaruhártya. Három nevezetes síkot lehet megemlíteni: equator sík (első és hátsó féltekére osztja a szemet), valamint a vízszintes és függőleges meridián síkok. A szem valamely tulajdonságai miatt

lényeges pontok: a szem legelső pontja A (polus anterior), leghátsó pontja B (polus posterior). A rajtuk át húzott egyenes egy főtengelyt alkot, ebben metszi egymást a két fő meridián is. Az A, B pontokon átmenő egyenes neve axis bulbi. A látás szempontjából mégsem ez a fő tengely, hanem az axis opticus-nak is nevezett egyenes, mely a függőleges meridián síkjában van, és amely mintegy 5°-os szögben eltér az AB egyenestől. Ez nem más, mint a látósugár, a látás irányát kijelölő egyenes. Az axis opticus három nevezetes pontja: R az axis opticus döféspontja a szem felületén, Sr az axis opticus döféspontja az ideghártyán, P pedig a szemlencse hátsó részének középpontja, ez az optikai középpont. Az Sr pont környezetének neve sárgafolt, másnéven fovea centralis. A szemlencse 9 mm átmérőjű, változtatható mélységi átmérőjű bikonvex lencse, melynek hátsó fele domborúbb az elsőnél. Ez rugalmas, fókusza állítható Ily

módon a beeső fénysugarak a különböző távolságban lévő tárgyakról is éles képet adhatnak. A fénysugarak tehát a szaruhártyán, a szemcsarnokon és a szivárványhártya átlag 4 mm átmérőjű nyílásán, a pupillán keresztül érik el a szemlencsét. Onnan a lencse fénytörésének megfelelően módosulva összetartó sugarakként az üvegtesten át haladva elérik az ideghártyát, másnéven retinát. Az itt keletkező kép fordított állású, tartalmaz szín és tónusinformációkat is. Szemünk felépítését a következő oldalon található ábra szemlélteti. 6 A szem felépítése [4]: 1.1 ábra 7 I.22 A látás alapjai A látás azon alapul, hogy az igen rövid hullámhosszúságú, 380-780 nm–es frekvencia tartományba eső elektromágneses sugárzás a szemünkben fényérzetet kelt. A szem fényérzékelési mechanizmusának lényege: a sugárzási energia hatására a szem recehártyájának (retinájának) idegszálvégződései

működésbe lépnek, fizikai-kémiai folyamatok indulnak be, melyek az agy megfelelő központjaihoz idegingerület formájában továbbítódnak. Két, egymástól kismértékben különböző képet érzékelünk, melyek agyunkban térbeli kép érzetét keltik. AB: A : B : P : α : α’ : γ : λ : axis bulbi polus anterior, legelső pont polus posterior, leghátsó pont az optikai középpont fénysugár beesési szöge fénysugár törési szöge az STPMT szög az axis bulbi és a látósugár által bezárt szög RST:axis opticus R : axis opticus elülső pontja ST : fovea centralis, sárgafolt S : a szem által nézett pont M : másik térbeli pont SM : az axis opticusra merőleges szakasz MT : M képe az ideghártyán 8 I.23 A visszavert fény érzékelése A látást (fizikai-optikai oldalról megközelítve) a fény, valamint fényelnyelőfénytörő - fényvisszaverő testek kölcsönhatásai teszik lehetővé. Ennek fizikai alapjai:  A szükséges fényt

valamilyen elsődleges fényforrás biztosítja.  A látótér objektumai – mint másodlagos fényforrások – visszaverik a rájuk eső fényt. A visszavert fény valamennyi jellemzője megváltozik, ez a változás hordozza a látáshoz szükséges információt.  A visszavert fény a szembe jut. Az alapvető optikai összefüggések a szem működésére nézve is érvényesek. A szemnek mint leképező rendszernek legfontosabb alkotóeleme a szemlencse. Szemünk alakja automatikusan követi a képalkotás igényeit, ezt a tudat alatti szabályozást nevezhetjük autófókusznak is. A leképezés eredményeként a retina belső (gömb) felületén létrejön a fordított állású kép. I.24 Látott képek kiegészítése a vizuális emlékezet segítségével A képérzet igen összetett fiziológiai folyamat, melyben a szemen, az ingerületközvetítő idegpályákon, illetve az agy látóközpontján kívül igen nagy szerepet kap a többi érzékszerv és az ún.

vizuális emlékezet is Ez utóbbi teszi lehetővé a látványból hiányzó képrészek pótlását, az alakzatok felismerését. 9 A látás az összes érzékelt információnak több mint a felét, egyes kutatók szerint akár 90 % – át is szolgáltatja. A különböző érzetek általában keverednek 1egymással, mivel több érzékszerv együttes működésének eredményei. Ugyanerre utal az is, hogy a látás mennyire összefügg a tanulással, szemünk elvileg a megszületéstől kezdve alkalmas lenne a látásban játszott szerepének betöltésére, az újszülött azonban eleinte csak homályos foltokat észlel, melyek a vizuális memória töltődésével, a szem mozgatásának tudatosulásával válnak képérzetté. I.25 Képek leképzése Az ingerületek továbbítása az agy látóközpontjai felé többszörös áttételen keresztül, igen nagy hibatűréssel rendelkező ún. impulzuskód modulációval történik. Nem az összes receptor jele jut el az

idegpályákon az agyba, mivel a kb 126 millió receptorra csak kb. 1 millió idegszál jut Ez a redukció egy retina szintű előfeldolgozást takar, elsősorban az élekre, gyors változásokra vonatkozó adatok jutnak a központi idegrendszerbe. A leképezés időben gyorsan zajló folyamat:  Agyi parancsra az izmok a szemet (vagy akár az egész testet) úgy mozgatják, hogy a kívánt látvány létrejöhessen.  A szemlencse fókusztávolságának és a pupilla nyílásának automatikus változtatása folyamatosan biztosítja az éles képalkotást és a megfelelő fénymennyiséget. I.3 A színlátás és a látás egyéb sajátosságai I.31 Színek érzékelése A receptorok érzékenysége nemcsak a fény erősségétől, hanem annak hullámhosszától is függ. A látás során a fény hullámhossz szerinti összetételét is érzékeljük: ez a színérzetben nyilvánul meg. A csapocskák, melyek a színlátást teszik lehetővé három csoportba sorolhatók,

ezeket érzékenységük hullámhosszfüggése különbözteti meg egymástól. 10  P típus 80 nm (vörös)  D típus 540 nm (zöld)  T típus 440 nm (kék) A retinán a receptorok eloszlása nem egyenletes: a csapocskák elsősorban a látómező közepén fordulnak elő, a pálcikák pedig a szélek felé ( a pálcikák a világosság és sötétség, megkülönböztetéséért felelnek ). Ez a magyarázata annak, hogy színlátásunk a látótér széle felé gyengébb, míg a fényerősség változásokat a szélek felé érzékeljük jobban. Az idegpályák kilépési helyén, az ún. vakfolton nincsenek receptorok, s így az ide eső fény nem vesz részt az érzékelésben. Az, hogy mégis összefüggő képet látunk, agyunk és vizuális emlékezetünk eredménye. A látás érzékenysége (finomsága, részletgazdagsága) többféle jellemző együttesétől függ:  a geometriai felbontás azt határozza meg, hogy adott távolságban egymáshoz

milyen közel lévő pontokat tudunk különálló pontokként észlelni  az intenzitás-felbontás a fényerősség-változás érzékelését  a színfelbontás pedig a színárnyalatok elkülönítési képességét adja meg. I.32 Látásunk időbeli felbontása Ez azt jelenti, hogy mennyi ideig kell egy látványnak tartania ahhoz, hogy különállónak - az előtte és utána következő látványtól különbözőnek - érzéklejük. Tapasztalatok szerint a kb. 1/15 másodpercnél rövidebb időre „bevillanó” képeket nem tudjuk egymástól elkülönítve érzékelni, pontosabban: tudatunk szintjén összefolynak egymással. (A film és a televízió ezt a felbontási korlátot használja ki a mozgás érzetének keltésére: a másodpercenkénti 16-25 állókép megjelenítése számunkra összefüggő, viszonylag villogásmentes mozgóképként jelentkezik.) 11 I.33 A színlátás egyéb jellemzői Az agyunkban kialakuló színérzetnek három jellemző

tulajdonsága van:  Színezet (hue), melyet a hétköznapi életben helytelenül színnek mondunk, a fény hullámhosszától függ. Szemünk kb. 200 féle színezetet tud megkülönböztetni  Telítettség (saturation), ami attól függ, hogy mekkora a fehér fény összetevője a többi összetevőhöz képest. Szemünk egy adott színezetben kb 20 telítettségi fokozatot tud megkülönböztetni  Világosság (intensity), ami az egységnyi térszögben szemünkbe érkező fényenergia mennyiségétől felbontóképessége erősen függ. Szemünk hullámhosszfüggő, világosság átlagosan szerinti mintegy 500 fokozatot tudunk megkülönböztetni. I.34 A színkeverés két elterjedt módszere A színkeverés két legelterjedtebb módszere:  Additív színkeverés: a keverékszín monokróm fényforrások fényének egymásra vetítésével áll elő. Így működik pl a TV képcső Az additív színkeverés alapszínei a vörös, zöld és

kék (RGB).  Szubsztraktív színkeverés: széles sávban sugárzó fényforrás színéből kivonunk egyes hullámhosszakat (vagy tartományokat) : a keverékszín az lesz, ami megmarad. Ez az alapelve pl a színes nyomtatásnak A szuszbtraktív színkeverés alapszínei a sárga, magenta, cián (YMC). 12 I.35 Alakzatlátás A tárgyakat nem képpontok halmazaként, hanem térbeli alakzatokként érzékeljük. Agyunk lényegkiemelő tevékenységének köszönhetően az egyes fényingerek - a vizuális emlékezetből való kiegészítésekkel- foltok, élek rendszerévé alakulnak. Agyunk alakfelismerő képessége rendkívüli: a tárgyakat - méretüktől, állásuktól, színüktől stb. függetlenül - akár kis részleteikből is szinte hihetetlen biztonsággal ismerjük fel. „Képi adatbázissal” rendelkezünk, mely mintákat (prorotípusokat) tárol. A felismerés mintaillesztéssel történik A folyamat visszacsatolást is tartalmaz: a fel nem ismert

részletekről erősebb odanézéssel próbálunk több információt szerezni. 13 II MATEMATIKAI ALAPOK II.1 Testek felszínének közelítése Az átlátszó testeket kivéve minden testnek csak a felszínét látjuk, nem nézhetünk bele az objektumok belsejébe. Testek felszínét legjobban poligonokkal közelíthetjük, ez azt is jelenti, hogy egy testet poliéderrel lehet legpontosabban megközelíteni. Világos, hogy minél több sokszöggel közelítjük a test felszínét, annál pontosabb lesz az általunk rajzolt kép. Ha transzformáljuk egy poligon minden csúcsát, - például valamelyik vetítési módszerrel – és a kapott transzformált csúcspontokat a megfelelő sorrendben összekötjük, megkapjuk a poligon transzformált képét. Amennyiben meg akarjuk szerkeszteni egy tetszőleges test három dimenziós, transzformált képét, akkor a módszer a következő: Minden poligonnal mely a test felszínét alkotja - végrehajtva a fenti műveletet,

megszerkeszthetjük a test három dimenziós, perspektív képét. Ez a transzformáció még nyers, mivel ezt a képet láthatósági szempontból elemezni kell. Minél több poligonnal közelítjük a test felszínét, annál pontosabban tudjuk ábrázolni a test térbeli képét. Ahhoz, hogy ábrázolni tudjunk térbeli testeket a felmerülő feladatokat az alábbi csoportokba sorolhatjuk:  Ismernünk kell a koordináta–rendszereket, amelyekben az ábrázolandó dolog geometriája, adatai leírásra kerülnek  Transzformációkat kell végeznünk koordináta–rendszerek között(hogy például nézőpontot tudjunk váltani az ábrázolandó tárgyhoz viszonyítva)  A háromdimenziós objektumok kétdimenziós vetületeit kell képeznünk ahhoz, hogy a képernyőn megjeleníthessük azokat. Némely test esetén elegendő kevés poligonnal közelítenünk, pl. egy kocka felszínét hat négyzettel pontosan felírhatjuk. A 3D Grafika Szerkesztőprogram 1.0–s

verziója is ilyen testek ábrázolására törekszik, melyet az alábbi matematikai alapfogalmak segítségével teszi. 14 II.2 Vektorok R2-ben és R3-ban II.21 Irányított szakaszok Azokat a mennyiségeket, amelyeknek az értéke egy szám és a tér egy irányának együttes megadásával jellemezhetünk vektoroknak nevezzük (pl. sebesség, gyorsulás). A vektor irányított szakasz, egy nyíl a térben (21 ábra) A szakasz hosszát a vektor nagyságának vagy abszolút értékének nevezzük. A v vektor hosszát: |v| − vel jelöljük. v 2.1 ábra II.22 Vektorok jellemzői  Két vektor szögének mindig az irányaik által alkotott konvex szöget nevezzük. Ez a szög tehát száznyolcvan foknál nem lehet nagyobb.  A 0 vektor olyan vektor, amelynek kezdő és végpontja egybeesik, a hossza tehát nulla.  Két vektor akkor egyenlő, ha nagyságuk és irányuk is azonos.  A v vektorral egyirányú egységvektor: v0= v / |v| 15 II.23 Vektorok

összege Legyen a és b két vektor (2.2 ábra), akkor összegüket a következőképpen értelmezzük: párhuzamos eltolással az a és b vektorokat úgy fűzzük egymáshoz, hogy a b vektor kezdőpontja az a vektor végpontjához kerüljön. Az a+b összegvektor az a vektor lesz, amelynek kezdőpontja azonos az a vektor kezdőpontjával, végpontja pedig azonos a b vektor végpontjával. Mint ez a következő rajzon látható, mindegy, hogy a b vektort fűzzük az a vektorhoz, vagy az a-t a b-hez: b a a+b a b 2.2 ábra II.24 Vektorok szorzása számmal Az a vektor k-szorosán azt a k•a-val jelölt vektort értjük, amelynek abszolút értéke │k│·│a│ iránya pedig a irányával egyező, ha a k pozitív, és azzal ellentétes, ha k negatív (2.3) ábra Itt k a valós számok eleme –2a a 2a –a 2.3 ábra 16 Vektorok k számmal való szorzását az animal1 egységben például a forgat nevű eljárás használja fel: procedure

forgat(p1,p2,p3,alfa,beta,gamma,h:real;var ki1,ki2,ki3:integer); begin . pi1:=trunc(( cos(rb)*cos(rg)p1–cos(rb)sin(rg)p2+sin(rb)p3 )h); pi2:=trunc(( (cos(ra)*sin(rg)+sin(ra)sin(rb)cos(rg))p1 + (cos(ra)*cos(rg)–sin(ra)sin(rb)sin(rg))p2– sin(ra)*cos(rb)p3 )h); pi3:=trunc(( (sin(ra)*sin(rg)–cos(ra)sin(rb)cos(rg))p1+ (sin(ra)*cos(rg)+cos(ra)sin(rb)sin(rg))p2+ cos(ra)*cos(rb)p3 )h); end; Az eljárás bemenő paramétereiben szereplő h értékkel szorozzuk meg a forgatási képlettel elforgatott pontok koordinátáit. A h paraméter segítségével egyszerűen megkaphatjuk egy tárgy önmagához viszonyított nagyított, vagy kicsinyített képét. II.25 Vektorok lineáris kombinációja, a tér dimenziója Az vektorok a1,a2,,an (2.4 ábra) lineáris kombinációjaként a b=k1a1+k2a2++knan vektort értjük, ahol a kr 1<=r<=n valós számok. a5 a4 a3 b b a3 a2 a1 a2 a1 2.4 ábra A b vektor mindkét esetben az ar vektorok lineáris kombinációjaként áll elő.

Nyilvánvalóan végtelen sok lehetőség van arra, hogy különböző ar vektorok összegeként fejezzük ki a b vektort. 17 Elsősorban az a kérdés, hogy létezik e minimális számú ar vektor, amelynek lineáris kombinációjaként bármely vektor előállítható. Tekintsük a következő egyenletet: k1a1+k2a2++knan=0 (2.1) Az a1,a2,,an vektorokat függetlennek nevezzük, ha az egyenletnek nincs k1,k2,,kn=0-tól különböző megoldása. Ekkor a1,a2,,an azok a minimális számú vektorok, amelyek lineáris kombinációjaként bármely vektor előállítható. A tér dimenziója a lineárisan független vektorainak számával egyenlő. II.26 Vektorok megadása koordinátákkal Legyenek e1, e2 és e3 (2.5 ábra) az R3 lineárisan független vektorai Akkor az R3 összes vektora kifejezhető az e1, e2 és e3 vektorok kombinációjaként. z e1 a e2 e3 a1 a3 a2 y x 2. 5 ábra Minden a vektor kifejezhető az egységvektorok lineáris kombinációjának segítségével:

a=a1e1+a2e2+a3e3 (2.2) Adott e1, e2 és e3 (2.2) esetén a irányát csak az a1, a2 és a3 együtthatók határozzák meg. Ezeket az a vektor bázisra vonatkozó koordinátáinak nevezzük Bázisnak az ei lineárisan független vektorok azon minimális halmazát nevezzük, amelyek lineáris kombinációjaként a vizsgált tér valamennyi vektora egyértelműen előállítható. 18 II.27 Egyenesek paraméteres egyenletei y P0 v r0 P r x 2.6 ábra A 2.6 ábra jelöléseit használva: ro(xo,yo)a Po ponthoz vezető helyvektor Az egyenes tetszőleges P futópontjához vezető helyvektor r(x,y). r felírható ro, és v segítségével: r=ro+PoP, ahol PoP=tv (t є R),tehát r=ro+tv Az is igaz, hogy minden ilyen alakban előállítható helyvektor végpontja az egyenesen van. A kapott egyenlet tehát az egyenes paraméteres vektoregyenlete II.28 Vektorok szorzása II. 2 8 1 A skaláris szorzat Az a és b vektorok skaláris szorzata alatt az ab= |a|*|b|cos ß (2.3) valós számot

értjük, ahol ß (0<=ß<=pi) az a és b vektorok által közrezárt szög. A skaláris szorzás eredménye nem vektor, hanem egy valós szám, vagyis skalár. A szorzat koordináták segítségével is kiszámolható: ab=a1b1+a2b2++anbn (2.4) 19 II.282 A vektoriális szorzat Vektoriális szorzatot csak az R3-ban definiálunk. A vektoriális szorzat eredménye szintén vektor, amely merőleges az a és b által meghatározott síkra, mégpedig úgy, hogy az a, b és axb ún. jobbsodrású rendszert alkot Az eredményvektor hossza pedig az a és b vektorok hosszának és közbezárt szögük szinuszának szorzata: |axb| = |a|*|b|sin ß Legyen a(a1,a2,a3) (2.5) és b(b1,b2,b3)az R3 vektorai, akkor az i-edik koordinátát úgy kapjuk meg, hogy az a és b vektorok i-edik koordinátájának elhagyásával kapott kétsoros determinánst kiszámoljuk. Az animal1 egység a láthatóság megállapításakor, a kirajzolandó lap normálvektorának koordinátáit vektoriális

szorzással számolja ki: function lathato(sz1,sz2,sz3:real;a,b,c,d:integer;h:real):boolean; var va,vb:array[1.3] of integer; n:array[1.3] of real; Begin n[1]:=(va[2]*vb[3])-(va[3]vb[2]); n[2]:=(va[3]*vb[1])-(va[1]vb[3]); n[3]:=(va[1]*vb[2])-(va[2]vb[1]); end; 20 II.29 Pont és egyenes távolsága A program szerkesztési részében lehetősége van a felhasználónak arra, hogy a rajzolt szakaszokat, vagy azok csúcspontjait más pozícióba mozgassa. Ennek az a módja, hogy az egérrel kétszer rá kell kattintania a kijelölendő szakaszra. Ha a kattintás helye egy bizonyos távolságon belül (a programban 5 egység) van valamelyik egyenestől, akkor még a következő feltételeket kell megvizsgálni:  az egyenesnek azt a részét kell figyelembe venni, ahol az egér pozíciója van, hiszen az egyenesen lehetnek más szakaszok  a program figyelembe veszi azt, hogy az egér pozíciója nincs e egy adott távolságon belül kijelölt szakasz valamelyik

végpontjával; mert ha igen akkor a csúcsokat kell elmozdítania. P n’ n g A α u k*u 2.7 ábra Egy pontnak egy egyenestől mért távolságát úgy kapjuk meg, hogy meghatározzuk, a P pontból a g egyenesre bocsátott merőleges g egyenessel való metszéspontjának a P pontból való távolságát (2.7 ábra) Az egyenes egyenlete: g: X=A+k*u, ahol A az egyenes egy pontja, u pedig az egyenes irányvektora. Nyilvánvalóan igaz, hogy n=n’–k*u Könnyen megállapíthatjuk az ábra alapján, hogy │k*u│=│n’│cosα Ez ekvivalens a következővel: │k*u│=│n’│(│u│/│u│)cosα 21 A skaláris szorzat összefüggésének felhasználásával: │k*u│=│n’│(u/│u│) k*u=│ku│(u/│u│)=(n’u/│u│)(u/│u│)=(n’u/│u│2)u=(n’u/u2)u (Ezt a levezetést az eddigi összefüggések felhasználásával végeztük el.) Behelyettesítés után kapjuk: d=│n│=│n’–(n’*u/u2)u│ (2.6) A programban ezt a következő sorok

valósítják meg: skalaru:=u[1]*u[1]+u[2]u[2]; skalarnu:=n[1]*u[1]+n[2]u[2]; if skalaru<>0 then k:=skalarnu/skalaru; nv[1]:=n[1]-k*u[1]; nv[2]:=n[2]-k*u[2]; tav:=sqrt(sqr(nv[1])+sqr(nv[2])); if (tav<5) and (mx>=a) and (my>=b) and (mx<=c) and(my<=d) then kozel:=true; A következő ábrán egy példát láthatunk arra az esetre amikor egy szakaszt nem pontosan rajzolunk, és azt dupla kattintással odébb vonszoljuk: 22 II. 3 Mátrixszámítás Az objektumok a három dimenziós tér valamely részhalmazában találhatók meg, ezért rájuk a három dimenziós tér transzformációi vonatkoznak. Az alakzatok képét perspektívikus transzformációval egy síkra képezzük le. Többféle leképezés is lehetséges, amelyet perspektívnak nevezhetünk, pl. a képsík helyétől vagy a vetítés típusától függően. Az így keletkező képeket is transzformálhatjuk, rájuk a sík kétdimenziós transzformációi vonatkoznak, amelyek az alkalmazott vetítés

típusától függetlenek. Egy poligon transzformációjához elég a csúcspontjait transzformálni, mivel ezeket összekötve hozzájutunk a transzformált poligonhoz. Hasonlóképpen egy poliéder transzformációját a felszínét alkotó poligonok transzformációjára vezethetjük vissza. A következőkben a két és háromdimenziós terek pontjaira vonatkozó transzformációkat mutatom be. Ezek általában mátrixokkal leírhatók Az mxn méretű mátrix m sorba és n oszlopba rendezett elemek táblázata. Az m sorból és n oszlopból álló mátrixok M halmazát a következőképpen jelöljük: M(mxn, R), ahol R a valós számok halmaza. Legyen A egy mxn-es mátrix: A= a11 a21 a12 a22 (2.7) am1 a1n a2n am2 amn II.31 Mátrixok jellemzői  A táblázat alakja m és n értékétől függ.  Az olyan mátrixot, amelynek csak egy sora (m=1) vagy csak egy oszlopa(n=1) van, vektornak(sor, ill. oszlopmátrixnak) nevezzük  Ha egy mátrixnak ugyanannyi

sora van, mint oszlopa(m=n), akkor négyzetes vagy kvadratikus mátrixról beszélünk.  A nullamátrix minden eleme 0.  Az egységmátrix olyan mátrix, amelynek minden főátlóbeli eleme 1 és minden más helyen 0 áll. 23 II.32 Műveletek mátrixokkal II.321 Mátrixok összeadása Legyen az A és a B mátrix az (mxn, R) halmaz mátrixa. a11 a21 A= a12 a22 B= a1n a2n am1 am2 amn b11 b21 b12 b22 b1n b2n bm1 bm2 bmn Az A és B mátrixok összegén azt a mátrixot értjük, amelynek elemei rendre az A és B mátrix megfelelő elemeinek összegéből adódnak. A+B=C a11+b11 a21+b21 C= a12+b12 a22+b22 am1+bm1 am2+am2 a1n+b1n a2n+b2n (2.8) amn+bmn II.322 Mátrix szorzása skalárral Legyen k egy valós szám. Az A mátrix k-szorosán azt a mátrixot értjük, amelynek minden eleme az A mátrix megfelelő elemének k-szorosa. ka11 ka12 = ka1n kA kam1 kam2 kamn (2.9) 24 II.323 Mátrixok szorzása Legyen az A mátrix A

є M (mxn, R) és a B mátrix B є M (nxp, R) a11 a21 A= B= a12 a1n a22 a2n am1 am2 amn b11 b21 b12 b1p b22 b2p bn1 bn2 bnp A szorzatmátrixot a következőképpen értelmezzük: c11 c21 C=A*B= (2.10) cm1 c12 c1p c22 c2p cm2 cmp ahol: cik= ai1 ai2 ain * b1k b2k (2.11) bnk Ahol a szorzatmátrix azon elemét, amely az i-edik sor és a k-adik oszlop metszéspontjában van, úgy kapjuk meg, hogy az A mátrix i-edik sorát skalárisan szorozzuk a B mátrix k-adik oszlopával. Ehhez elengedhetetlen feltétel, hogy az A mátrix oszlopainak száma egyenlő legyen a B mátrix sorainak számával. Ha tehát az A mátrix mxn méretű, akkor a B mátrixnak nxp méretűnek kell lenni, és a C mátrix mxp méretű lesz. 25 III GEOMETRIAI TRANSZFORMÁCIÓK III.1 Transzformációk három dimenzióban A három dimenziós transzformációk magára az objektumra vonatkoznak. Ezek nem mindig a valóság pontos ábrázolásának eszközei, hanem - úgy mint

a kétdimenziós transzformációk - túlmutatnak azon: a valóság transzformált ábrázolásmódját segítik elő. A kétdimenziós transzformációk általánosításának is felfoghatjuk őket. A három dimenziós transzformációk jelentős részének egy mátrixot feleltethetünk meg. A következő részben leírom a program által is felhasznált három dimenziós vektorok forgatási mátrixát, az alkalmazott vetítési módszert, a láthatósági feltétellel együtt. III.11 Háromdimenziós forgatás Az a(a1,a2) vektort (3.1), az arra alkalmas mátrix segítségével elforgathatjuk a 3.1 ábra Ez természetesen nem csak két, hanem háromdimenziós esetben is lehetséges. Ha abból indulunk ki, hogy egy tetszőleges test véges számú helyvektorral leírható, akkor azt a testet egy tetszőlegesen elforgatott helyzetben is ábrázolni tudjuk, csak minden egyes helyvektort el kell forgatnunk a rotációs mátrix segítségével. 26 Az u(u1,u2,u3) vektort (3.2)

szeretnénk a Z-tengely körül elforgatni egy meghatározott γ szöggel. Z u u3 u2 u1 δ b2 γ Y r’ b1 r 3.2 ábra X Eközben a z koordináta nem, csak az x és az y változnak meg. Az u vektort koordinátákkal a következő módon írhatjuk fel: u1 u= u2 u3 = r*cosδ r*sinδ u3 3.1 Tudjuk, hogy a z koordináta nem változik, ezért elég, ha az r vektort ( u vetületét az XY síkra ) vizsgáljuk. Mivel r=(u1,u2), a 3.1-es összefüggés alapján r=(r*cosδ,rsinδ). Forgassuk el r vektort γ szöggel, az új vektor legyen r’=b1+b2, ahol b1=(r*cos(δ+γ),0) =(rcosδcosγ–rsinδsinγ,0) b2=(0,r*sin(δ+γ)) =(0,rsinδcosγ+rcosδsinγ) u1=r*cosδ, u2=r*sinδ 3.1 alapján: r’=(b1,b2)=(u1*cosγ–u2sinγ,u1sinγ+u2cosγ) Mivel a harmadik koordináta nem változott, u’–nek a koordinátái a következők: u’=(u1*cosγ–u2sinγ,u1sinγ+u2cosγ,u3) 27 u1, u2, u3 együtthatóinak segítségével felírhatjuk a Z tengely körüli forgatás mátrixát: cosγ

sinγ 0 Rγ = –sinγ cosγ 0 0 0 1 (3.2) Hasonlóan kapjuk az X illetve az Y tengely körüli forgatás mátrixát: Rα = 1 0 0 Rβ = cosβ 0 –sinβ Az 0 cosα sinα 0 –sinα cosα (3.3) 0 1 0 sinβ 0 cosβ (3.4) R=Rα*RβRγ: cosβ∗cosγ cosα∗sinγ + sinα∗sinβ∗cosγ sinα∗sinγ−cosα∗sinβ∗cosγ –cosβ∗sinγ cosα∗cosγ−sinα∗sinβ∗sinγ sinα∗cosγ+cosα∗sinβ∗sinγ sinβ –sinα∗cosβ cosα∗cosβ annak a transzformációnak a mátrixa, amellyel a három transzformáció egymásutánja helyettesíthető, ez nem más, mint a komponensek mátrixának megfelelő sorrendben vett szorzata. Itt a térbeli forgatást a koordináta–rendszer 3 tengelye körüli egy-egy forgatás egymásutánjaként kezeljük. A program forgat eljárása ezt a mátrixot használja: pi1:=trunc(cos(rb)*cos(rg)p1–cos(rb)sin(rg)p2+sin(rb)p3); pi2:=trunc((cos(ra)*sin(rg)+sin(ra)sin(rb)cos(rg))p1 + (cos(ra)*cos(rg)–sin(ra)sin(rb)sin(rg))p2–

sin(ra)*cos(rb)p3); pi3:=trunc((sin(ra)*sin(rg)–cos(ra)sin(rb)cos(rg))p1+ (sin(ra)*cos(rg)+cos(ra)sin(rb)sin(rg))p2+ cos(ra)*cos(rb)p3 ); 28 III.12 Vetítési típusok A vetítés két különböző fajtáját különböztetjük meg: a középpontos és a párhuzamos vetítést. A középpontos vetítés nagyon közel áll az emberi szem látásmódjához, míg a párhuzamos vetítés a vetítés tisztán matematikai formája. 3.9 ábra Középpontos vetítéssel kapott kocka képe 3.10 ábra Párhuzamos vetítéssel kapott kocka képe A 3D grafika és szerkesztőprogram a párhuzamos vetítés módszerét alkalmazza, mégpedig a párhuzamos vetítésnek is azt a nagyon egyszerű formáját, amikor annak a tengelynek az irányvektorát használjuk vetítővektorként, amelyikre a vetítés történik. Legyen a vetítendő pontba mutató vektor k(k1,k2,k3), a vetített pont koordinátájának vektora b(b1,b2,b3) és a vetítés történjen az YZ tengelyek síkjára, akkor a

vetítés képlete nem más mint: b1 b2 b3 = 0 k2 k3 (3.10) 29 III.13 Láthatóság A más képek által eltakart képrészek eliminálása a valóságot megközelítő ábrázolás egyik lehetősége. A tárgyak helyes láthatóságának figyelembevételével lényegesen hozzájárulunk ahhoz, hogy jobban lehessen ábrázolni őket. Tekintsünk egy sík lapok által határolt konvex testet például egy kockát. Forgassuk el a kockánkat a koordináta–rendszer tengelyei körül, tetszőleges (φ1,φ2,φ3) szöggel. Azt akarjuk megállapítani, hogy a kockának mely lapjai láthatók, és melyek nem. Feltételünk szerint a test sík lapokból áll Egy ilyen lap helyzetét a normálvektora írja le. Ha valamennyi sík normálvektorát a test középpontjával ellentétesen irányítjuk, akkor a normálvektora segítségével meg tudjuk állapítani, hogy egy lap látható vagy nem. Ha párhuzamos vetítést alkalmazunk elegendő a normálvektort vizsgálni.

Középpontos vetítésnél szükségünk van még az adott lap súlypontjára is. Párhuzamos vetítésnél a lap láthatóságának egy feltételét kapjuk azáltal, hogy a normálvektor és a vetítővektor által bezárt szöget (φ) vizsgáljuk (3.11 ábra): n1 n2 n3 3.11 ábra Ha φ <90 , akkor a lap nem látható φ >=90 a lap látható a szög könnyen meghatározható a normálvektor és a vetítővektor skaláris szorzásával (2.5) 30 IV 3D GRAFIKA SZERKESZTŐPROGRAM BEMUTATÁSA IV.1 3D Grafika szerkesztőprogram 10 verziójának felhasználói kézikönyve Kijelentem, hogy az általam elkészített program csak saját szellemi kapacitásomra épül. Azt vagy annak részeit egyedül állítottam elő, más médiákban a kódot nem mutattam be, más általam tanulmányozott programok kódjaiból nem tettem a programomba. A program első verzióját szakdolgozatom témakörében gondos felkészülésem jegyében készítettem. A téma igazán

megfogott, és lehetőségem szerint a témakörben geometriai tudásomat tovább fejlesztem, a programból egy erősebb változatot készítek, melyhez szükséges még a síkok térben való elhelyezkedésének megállapítása, és a síkban fekvő csúcspontok sorrendjének megállapítása. Kisebb feladat számomra a síkbeli pontok elhelyezkedésének, és helyes sorrendjének megállapítása, amelyre egy jó eljárás a VEB POINT módszer. A kézikönyv tartalma: Bevezetés  1. Rajzolási lehetőségek  2. Eszköztárak  3. Példa rajzok  4. 3D–s képek előállítása  5. Egyéb funkciók 31 Bevezetés A program hardver, szoftver követelményei a következők: Hardver követelmények: A programba helyezett animációs funkció miatt ajánlott legalább 486-os processzorral, matematikai társprocesszorral rendelkező gépen futtatni a programot. Gyengébb teljesítmény esetén a program élvezhetősége erősen csökken. A program

egyaránt működik monokróm és színes monitorokon is. Egér használata elengedhetetlen a program működéséhez Memóriaszükséglet: 1 Mbyte. Szoftver követelmények: A program képes Dos 3.0-nál nagyobb verziójú operációs rendszerű gépen futni, és természetesen a Windows programok Dos módjában is elindul. Dos operációs rendszerben, vagy a Win95 Dos módjában szükséges egérkezelőt telepíteni. A programot az egéren kívül billentyűkkel is lehet vezérelni, bár a funkciók többsége egér használatához kötött. A Szerkesztőprogram segít megérteni az axonometrikus ábrázolás alapjait, ebben hasznos segítséget nyújtanak a példarajzok. A felhasználó saját maga is készíthet ábrákat, melyeknek térbeli felépítését – ha a rajz megfelel a program követelményeinek – szemlélheti meg. A programmal előállítható testek: kocka és téglatest. Bonyolultabb testek térbeli képének, vetített képekből történő előállítása

meglehetősen nehéz feladat. A program erre nem is képes, erre figyelmeztetést ad működés közben. A főképernyőn egy koordináta–rendszer segítségével szerkeszthetjük rajzainkat, persze a koordináta–rendszer mellett más kisegítő lehetőségek is elérhetők, amelyek a pontos rajzolást segítik. Mivel a testek transzformált képeit pontosan, a valóságnak megfelelően kell ábrázolnunk, egy rajz megszerkesztése sokáig tartó folyamat. A kezdő felhasználóknak a pontos rajzolás hosszadalmas, viszont ez az idő a gyakorlat során alaposan csökkenhet. A kisegítő lehetőségek használata általában kikapcsolható, bár ezzel a lehetőséggel nem érdemes élni. A szerkesztés után a 3D–s kép menüpont segítségével megnézhetjük, a testet, amelyiknek az axonometrikus ábráját megszerkesztettük. A menüpont meghívásakor egy kisebb képernyőben megjelenik a test, melyet tetszőlegesen forgathatunk a tér három irányában, nagyíthatjuk,

kicsinyíthetjük, megválaszthatjuk, hogy láthatóak legyenek–e a takart élek, vagy nem. 32 és A program főképernyőjének felépítése: 2. Animálás főmenü 1. Editing főmenü 4. koordináta– rendszer rácsozattal 3. eszköztárak 6. Kilépés menüpont 5. státusz sor A képernyőn látható elemek:  1 Editing főmenü: A legtöbb rajzolási funkció ebből a főmenüből hívható meg. Itt távolíthatjuk el az eszköztárakat a képernyőről.  2 Animálás főmenü: A testeket ebben főmenüben jeleníthetjük meg, különböző animációs feladatokat végezhetünk rajtuk. Az animálás főmenü– pontban található 3 példa rajzon is végre lehet hajtani a fenti funkciókat.  3 eszköztárak: A bal oldali eszköztárban találhatjuk meg rajzolás eszközei közül a legfontosabbakat, leggyakrabban használtakat. A jobb oldali eszköztár segítségével a példarajzokat hívhatjuk elő.  4 koordináta–rendszer rácsozattal:

Szerkesztési terület, egy a rajzolást könnyítő 5 egységes hálóval. A rácsozatot eltüntethetjük a koordináta– rendszerből.  5 státusz sor: Információt kaphatunk kapcsolatban.  6 Kilépés menüpont: Kilépés a programból. 33 az aktuális tevékenységgel 1 Rajzolási lehetőségek A koordináta–rendszerbe rajzolható ábrák vonalakból épülnek fel, ezeket a vonal illetve a négyszög funkció segítségével rajzolhatjuk. A rajzolt szakaszok adott negyeden belüli elhelyezkedése, illetve a csúcspontok koordinátái módosíthatók. Kijelölhetjük a koordináta–rendszer objektumait, ha rájuk kétszer kattintunk az egér bal gombjával. A kijelölt objektumok az egér jobb gombjának lenyomásáig mozgathatók. Ha egy csúcsban több vonal találkozik, kétszeri egérgomb lenyomására az összes egy csúcsban lévő szakaszok kijelölődnek. Vonalat és négyszöget rajzolhatunk a megfelelő funkciók segítségével. A megkezdett

objektumok kiterjedése az adott negyeden belül lehetséges, ahol a rajzolást elkezdtük. A lenti képernyőn az egyes példarajz egy csúcsának elmozgatását láthatjuk: 34 Az Editing főmenü rajz almenüpontjának menüpontjaival tudjuk a rajzolási lehetőséget elérni:  vonal  négyszög  képtörlés  rács  rácsraugrás. 3.1 Vonalrajzolás A képernyő koordináta–rendszerében vonalat rajzol bal egérgomb lenyomásának pozíciójától kezdődően, ismételt bal egérgomb lenyomásáig. A művelet a jobb egérgomb lenyomásával félbeszakítható. A pontosabb rajzolást az egérgomb koordinátáinak megfelelő pozícióban egy vízszintes és egy függőleges, a koordináta–rendszerig terjedő segédvonal könnyíti. A koordináta–rendszeren belüli egérpozíció a státusz sorban látható. Egy adott negyedben elkezdett vonal rajzolását csak ugyanabban a negyedben lehet befejezni. 35 3.2 Négyszögrajzolás A

képernyő koordináta–rendszerében négyszöget rajzol. Valamelyik átló egyik végpontjának koordinátái a koordináta–rendszeren belül az első lenyomott bal egérgomb pozíciójában lesznek, másik végpontja a második lenyomott bal egérgomb lenyomásának koordinátájában lesz. A művelet a jobb egérgomb lenyomásával félbeszakad. A pontosabb rajzolást az egérgomb koordinátáinak megfelelő pozícióban egy vízszintes és egy függőleges – a koordináta–rendszerig terjedő – segédvonal segíti. Adott negyedben elkezdett vonal rajzolását csak ugyanabban a negyedben lehet befejezni. 36 3.3 Képtörlés A funkció hatására az összes koordináta–rendszeren belül lévő elem kitörlődik. A kijelölt objektumokat egyesével is törölhetjük a Del billentyűvel A rajzolás megkönnyítésére alapértelmezésben egy 5*5 egységes négyzetháló helyezkedik el a koordináta–rendszerben. Ezt a menüpont segítségével megváltoztathatjuk, bár

így nehézkessé válhat olyan rajzok szerkesztése, amelyek a program segítségével térbeli testekké alakíthatók. 3.5 Rácsraugrás A menüpontban elérhetjük, hogy az egymáshoz igen közel rajzolt csúcsok egy koordinátára helyezkedjenek. 4 Eszköztárak A legáltalánosabb funkciók gyors eléréséhez Rajz és Példák eszköztárak állnak a felhasználó rendelkezésére. Ezek segítségével meghívhatjuk a Rajzolás almenüpontjai és a 3D–s kép menüpont funkcióit. Az Edit főmenüpont eszköztárak almenüjében a két eszköztár kikapcsolható. vonal rajzolása négyszög rajzolása képtörlés rácspontra igazítás 37 5 Példa rajzok A programmal ismerkedők gyorsan megkedvelhetik a programot, ha kipróbálják a példarajzokat, és azokat térben szemlélik a 3D–s forgatás menüpont segítségével. 6 3D–s képek előállítása A koordináta–rendszerben szerkesztett rajzból a program, ha a rajz megfelelő, három-dimenziós képet

állít elő. A test térbeli képét párhuzamos vetítési módszerrel az YZ síkra vetíti. A tárgyat forgathatjuk, kicsinyíthetjük és nagyíthatjuk a forgatás képernyőjén belül. A forgatás képernyőjét odébb vonszolhatjuk, ha látni akarjuk a koordináta–rendszer rajzát. Meghatározhatjuk a Láthat menüpont segítségével, hogy a képernyőn látszódjanak-e a takart élek, vagy azok a valóságnak megfelelően takarva maradjanak. Az egyes példarajz térbeli képe: 1. nagyítás 3. takart élek megjelenítése, eltávolítása 2. kicsinyítés 4. a forgatás irányai az egyes számú test 38 A 3D–s kép, forgatás képernyőn található elemek a következők:  1. nagyítás: a képernyő szélességéig nagyítja a test képét  2. kicsinyítés: kicsinyíti a testet egy bizonyos mértékig  3. Láthat menüpont: meghatározhatjuk vele, hogy a képernyőn látszódjanak–e az eltakart élek vagy nem  4 a forgatás irányait adhatjuk

meg. 7 Egyéb funkciók Rajzolt vonalak mozgatása, törlése.(gépi időt felhasználó eljárás, amely azt figyeli, hogy le volt–e ütve a bal egérgomb kétszer) Az egér bal billentyűjének kétszeri lenyomásával lehet kijelölni a vonalakat vagy a vonalak csúcsait. Ha egy csúcsban több vonal találkozik, kétszeri egérgomb lenyomására az összes egy csúcsban lévő szakaszok kijelölődnek. Egy szakasz kijelölésekor lehetőség van a jelölt szakasz törlésére. A mozgatást az eredeti pozíciótól az egér jobb gombjának lenyomásánál lévő pontig folytatja. Az adott negyeden kívül nem lehet vinni a szakasz végpontjait. Ha a koordináta–rendszeren belül található az egér, akkor láthatjuk az egér koordinátáját a státusz sorban. Kilép: Kilép a programból. 39 IV. 2 A program folyamatábrája 40 41 42 IV.3 A program eljárásai és függvényeinek leírása A 3D–s forgatás és animálás képernyőjének, és a képernyő

tartalmának kezdő pozíciói az alábbi tipizált konstansokkal vannak definiálva, a 3dkep eljárásban: cs:array[1.4] of integer=(100,100,450,450); A 3d képernyő kerete cim:array[1.4] of integer=(100,55,450,70); 3d-s kép és forgatás cím nagyit:array[1.4] of integer=(100,70,170,85); Nagyítás menü kerete kicsiny:array[1.4] of integer=(100,85,170,100); Kicsinyítés menü kerete kilep:array[1.4] of integer=(380,85,450,100); Kilépés keret lathat:array[1.4] of integer=(380,70,450,85); Láthatóság kerete xkeret:array[1.4] of integer=(170,70,220,100); Állandó forgatás az X tengely körül xp:array[1.4] of integer=(220,70,240,85); Egérbillentyű nyomásáig történő pozitív forgatás az X tengely körül xn:array[1.4] of integer=(220,85,240,100); Egérbillentyű nyomásásig történő negatív forgatás az X tengely körül ykeret:array[1.4] of integer=(240,70,290,100); Állandó forgatás az Y tengely körül yp:array[1.4] of

integer=(290,70,310,85); Egérbillentyű nyomásáig történő pozitív forgatás az Y tengely körül yn:array[1.4] of integer=(290,85,310,100); Egérbillentyű nyomásáig történő forgatás az Y tengely körül zkeret:array[1.4] of integer=(310,70,360,100); Állandó forgatás a Z tengely körül zp:array[1.4] of integer=(360,70,380,85); Egérbillentyű nyomásáig történő pozitív irányú forgatás a Z tengely körül zn:array[1.4] of integer=(360,85,380,100); Egérbillentyű nyomásáig történő negatív irányú forgatás a Z tengely körül. 43 Procedure negyed(x,y:integer); Funkció: Eldönti, hogy az egér melyik negyedben található, az aktuális negyedre korlátozza az egér mozgásterületét. Paraméterek: x: aktuális x egérkoordináta y: aktuális y egérkoordináta Visszatérési érték: Megjegyzés: Az eljárás meghívása előtt le kell kérdezni az egér koordinátáinak helyzetét. Function teruletin(xpont1, ypont1, xpont2, ypont2, fmszam,

almszam, alalmensz: integer): boolean; Funkció: A függvény azt vizsgálja, hogy az aktuális egérpozíció a paraméterekben átadott területen belül van–e. fmszam, almszam, alamensz nulla értékek mellett a függvény tetszőleges területet vizsgál, egyébként a főmenü 0,0 értékéhez viszonyít. Paraméterek: xpont1, ypont1, xpont2, ypont2: a vizsgálandó terület keretének koordinátái, kivéve, ha valamelyik utolsó három paraméter értéke nem nulla. Ekkor az első főmenüpont koordinátáihoz viszonyít a függvény fmszam, almszam, alamensz: főmenü, menü és almenüszámok Megjegyzés: Procedure keret(k1,k2,k3,k4:integer); Funkció: Keretet rajzol a menüpontok köré. Paraméterek: k1,k2,k3,k4:a keret koordinátái Procedure Statusz(szoveg:string); Funkció: Státusz sort rajzol a szoveg paraméterben megadott üzenettel. Paraméter: szoveg: kiírandó üzenet 44 Procedure menucim(xpont1, ypont1, xpont2, ypont2, fmszam, almszam, alalmensz: integer;

szoveg:string); Funkció: A megadott keret közepébe szöveget ír. Paraméterek: xpont1, ypont1, xpont2, ypont2: a vizsgálandó terület keretének koordinátái, kivéve, ha valamelyik utolsó három paraméter értéke nem nulla. Ekkor az első főmenüpont koordinátáihoz viszonyít a függvény fmszam, almszam, alamensz: főmenü, menü és almenüszámok Megjegyzés: Általában hibaüzenetekre használja a program. Procedure beolvas(pelda:string); Funkció: Lemezről beolvassa valamelyik példarajzot. Paraméterek: pelda: a beolvasandó állomány neve (valami.3dg) Megjegyzés: A típusos fájl szerkezete: fponts=array[1.4] of integer; IV.21 Animal1 egység eljárásai és függvényei: procedure forgat(p1,p2,p3,alfa,beta,gamma,h:real;var ki1,ki2,ki3:integer); Funkció: Elforgatja adott szögekkel az adott pont koordinátáit. Paraméterek: p1,p2,p3: az adott pont térbeli koordinátái alfa,beta,gamma: forgatás szögei h: a nagyítás, illetve kicsinyítés mértéke

Kimenő paraméterek: ki1,ki2,ki3: a forgatás eredményeként kiszámolt pontok értékei 45 procedure lapok(a,b,c,d:integer); Funkció A megadott sorrendben vonalakat rajzol a megadott csúcsok körül. Paraméterek: a,b,c,d: a csúcsok számai, amelyeket össze kell kötni Megjegyzés: A rajzolt alakzatra hatással van a csúcsok megadásának sorrendje. Tehát lapok(1,2,3,4)<>lapok(2,3,1,4) function lathato(sz1,sz2,sz3:real;a,b,c,d:integer;h:real):boolean; Funkció: A megadott csúcsok köré rajzolt lap normálvektora és a vetítővektor segítségével eldönti, hogy az adott lap látható, vagy nem. Paraméterek: sz1,sz2,sz3: a forgatási szögek jelenlegi értékei a,b,c,d: a poligon csúcsainak száma h:nagyítás, kicsinyítés értéke Megjegyzés: 4 3 1 2 8 7 5 6 4.1 ábra A 4.1 ábrán látható sorrendben van definiálva a téglatestek csúcsainak sorrendje 46 Célomnak tűztem ki, hogy a programot tovább fejlesztem, és készítek egy olyan új

verziót, amelyik bonyolultabb rajzokból is képes lesz testek három dimenziós képét előállítani. Ehhez, a rajz alapján meg kell határozni a következő dolgokat:  meg kell állapítani a térben a test csúcsainak a helyét  ezekre síkokat kell fektetni, persze csak a megfelelő csúcsokra, hogy a test lapjait kapjuk meg  a síkokban meg kell állapítani a csúcspontok sorrendjét, hogy poligont tudjunk rajzolni. A hazánkban is igen népszerű program a 3D STUDIO nevű program is a térbeli ábrázolással, és az ábrázolt tárgyak animálásával foglalkozik. Ezzel a programmal egy rajz elkészítése sokkal egyszerűbb és gyorsabb, mint az én programommal. Igaz a 3D STUDIO pont ellentétesen közelíti meg a témát nem vetületi ábrákból állítja elő a három dimenziós képet, hanem először három dimenziós tárgyakat rajzol, majd ebből előállítja a megfelelő nézetek axonometrikus ábráit is. 47 V 3D VIDEO STUDIO A mai grafikus

szabványkörnyezet csak azoknak a programozóknak kellemes, akik élni akarnak a grafikus felület által nyújtott szabványos objektum és eszközkezelés lehetőségeivel. Jellemző képviselőjük a 3D Studio A programot háromdimenziós képek és animációk készítésére fejlesztették ki. A háromdimenziós teret három síkbeli szerkesztőfelület segítségével lehet birtokba venni. A program alapvetően vektorgrafikus, de nagyon sok - eddig csak bittérképes programokra jellemző tulajdonsággal is rendelkezik. Ezek a színezésre, színnel történő kitöltésre vonatkozó jellemzők többnyire csak a képfeldolgozó programoknál jelentek meg. Ilyen jellemző az opacitás nevű színerősség meghatározó eszköz. Ennek segítségével átlátszhatóságot, áttetszőséget lehet szimulálni. Külön élmény a programmal az áthatások készítése. A 3D Studio különösen összetett, szerteágazó, a PC számítógépeken leginkább

elterjedt 3D animációs program. Nem elég a számtalan lehetőséget ismerni, élni is kell a lehetőségekkel, ami nagyfokú kreativitást igényel. A program sikeres használatához tehát nem elég a funkciók ismerete, hanem szükség van legalább alapfokú geometriai ismeretekre, ismerni kell a színek hatását, és tudni kell a térábrázolás alapjait. A 3D Studio egy igen hatékony vizuális 3D modellező és animációs program. Kiválóan alkalmas látványtervek, 3 dimenziós animációk készítésére A programmal nem lehet gyártási terveket, modelleket készíteni, nem helyettesíti az AutoCAD-et. A tárgyakat a 3DS-ben nem fizikailag precízre, hanem vizuálisan megfelelőre tervezzük. Ez azt jelenti, hogy a tárgyakról nem kell gyártási pontosságú terveket készíteni, hanem olyanra kell azokat megalkotni, hogy azok szemre szépek legyenek. A program ilyen irányú felhasználási köre miatt nem is tartalmaz numerikus tárgyszerkesztési lehetőségeket,

nem adhatjuk meg például a tárgy alkotó pontjait számszerű pozícióval. Ennek ellenére szükség esetén lehetséges a pontos tárgyszerkesztés, hiszen tetszőleges közökkel térrácsot definiálhatunk, amelynek rácspontjaikhoz igazíthatjuk a tárgyak elemeit. 48 A program egyik erőssége, hogy közvetlenül képes fogadni a CAD terveket DXF formátumban, így például az AutoCAD segítségével létrehozott berendezés, épület terveit a 3DS-be betöltve annak kinézete még az elkészülte előtt megmutatható. Megvizsgálhatjuk, hogy hogyan fog kinézni a tervezett épület, hogyan fog illeszkedni a környezetébe. Bejárhatjuk a házat, ellenőrizhetjük a fényviszonyait, kipróbálhatjuk a falak színeinek többféle kombinációját. A program elsősorban egy gyors és hatékony animációs eszköz, ezért nem képes hagyományos fénysugárkövetéses képkészítésre, mivel ez felettébb számításigényes. Az ilyen programok a fényforrásokból

kiinduló fénysugarak útját követik nyomon, míg azok el nem hagyják a kép színhelyét. Az eredmény, hogy a tükröződő felületekben megjelenő tükörkép igazán élethű, az árnyékok valóságosak, a különböző fénytörési mutatójú közegekben áthaladó fény valóban megtörik, például az üveggömb ténylegesen nagyítja a mögötte levő tárgy képét. A fénysugárkövetés, eredeti nevén ray-tracing helyettesítésére azonban a 3DS hatékony trükköket alkalmaz, amelyek segítségével mégis készíthetünk árnyékokat, tükröződéseket. Ezeket a lehetőségeket jól kihasználva az elkészült kép élethűség szempontjából megközelíti a valódi ray-tracerek képminőségét. A program 4-es változata már képes az árnyékokat, de csak azt, ray-trace algoritmussal kiszámolni a szokásos shadow mapping helyett. Ez a módszer azonban észrevehetően növeli a számítási időt és a használt memória nagyságát, pedig

nagyon messze áll még a teljes fénysugárkövetéstől. A számítógépes modellezés lényege azonban nem merül ki a fotórealisztikus képek készítésénél, sőt igazában ez a kisebb felhasználási kör, hiszen ami a valóságban is elkészíthető, arra felesleges számítógép animációt használni. Egy csillogó-villogó krómozott kanálkészletről könnyebben készíthető kép, ha lefotózzuk, mintha modelleznénk a darabjait. Ellenben például egy űrháború csatajelenetét minden bizonnyal számítógépes animáció segítségével egyszerűbb ábrázolni. Egyszerűbb egy modellezett ház falán lévő tapéta anyagtulajdonságait változtatni, hogy megtaláljuk a megfelelőt, mint gyors egymásutánban fél tucatszor kitapétázni a valódi szobát. A háromdimenziós programok használatához szükség van a szemléletük megértésére. Ez nem bonyolult dolog hiszen a valós világ is ugyanezen az alapelveken nyugszik. A 3D Studio egy nagyon jól

kezelhető, logikus felépítésű eszköz. 49 Ha a felhasználó azonosul a szemléletmódjával, használata magától érthetődő lesz. Leginkább a fotózáshoz, vagy a filmkészítéshez hasonlít a program kezelése. Annál is inkább megfelel a programnak a kamerához való hasonlítása, mivel a nézőpontok kialakításához ez is kamerákat használ. Ezek a kamerák csak elméletiek, de megfelelnek egy valós filmfelvevőnek, vagy fényképezőgépnek. A tárgyakat ugyanúgy kell beállítani, mint egy fénykép, vagy film jelenetét, és ugyanúgy meg kell világítani a helyszínt. Az így előkészített képzeletbeli színhely alapján egy megadott pontból, megadott irányba néző képzeletbeli kamera szemszögéből, a kamerára jellemző paraméterek figyelembevételével készíti el a program a kész képet. Ha a tárgynak valamilyen paramétere, pozíciója, anyagtulajdonsága változik és sorozatképet készítünk, akkor animációt kapunk, hasonlóan mint

egy filmforgatás során. A program használata során alapvetően kétféle megjelenítési móddal találkozunk: Síknézet és Perspektívikus nézet. Előbbit főleg a tárgyak készítése során használjuk és megfelel a hagyományos ábrázoló geometriában alkalmazott síknézetnek, ahol a tárgyakat három egymásra merőleges tengelyű térbe helyezzük és olyan irányból tekintünk rájuk, amelyek párhuzamosak a világ valamely képzeletbeli tengelyével. Ebből a nézőpontból párhuzamos vetítővonalak segítségével hozzuk létre a síknézeti képeket. Legyen a három tengely X, Y és Z, az egyes nézeteket pedig azon két tengely nevével jelöljük, amely tengelyek által meghatározott síkra merőleges vetítő vonalakat alkalmaztunk az ábrázolás során, így megkülönböztetünk X/Z, X/Y és Z/Y nézeteket. Ezek globális tengelyek, vagyis a képzeletbeli három dimenziós terünk egészére jellemzőek. Szemben más programokkal itt megadhatók, hogy a

tengelyek közül melyik legyen a mélységé, magasságé és szélességé, így mindenki a saját megszokásának megfelelő tengelyrendszert állíthat be. Miután eldöntöttük, hogy melyik tengely milyen irányt jelöl, az egyes nézeteket elnevezhetjük. Szintén síknézet az User View, de a vetítés nem feltétlen valamely globális tengellyel párhuzamosan, hanem egy tetszőleges irányból történik. A másik nézeti mód a Camera View, valamely kamera szemszögéből tekint a jelenetre. Ebben a nézetben már megjelennek a perspektíva jellemzői: az aránytorzulás és a vonalak összetartása. 50 V.11 Perspektíva A hagyományos perspektíva szemlélet egy vizsgáló pontból tekint a térbe, ez a nézőpont. A nézőpontból mindig egy konkrét pontra irányul a figyelem, ennek a pontnak a neve látványközéppont. A nézőpontot és a látványközéppontot a látóvonal köti össze, ami egybeesik a kamera hossztengelyével. Erre merőleges a

képsík. A képsíkon a kép nem párhuzamos vetítővonalak, hanem a nézőpontot minden egyes pontjával összekötő vetítővonalak által jön létre. A nézőpontból nem tekinthetünk egyszerre minden irányba, a vetítővonalak csak egy bizonyos vízszintes és függőleges nyílásszögeken érkeznek a kamerába. Ezek a vetítővonalak a vetítősíkból kivágnak egy részletet, ez a képkivágás, ami azonos a képpel, vagy a vászonnal. Az emberi szem átlagos látószöge kb. 48 fok, a 3D Studio kamerája is ekkora értékkel dolgozik A látószög mértéke nagymértékben befolyásolja a perspektívikus hatást. A szélesebb látószög dinamikusabb, élettel telibb képet eredményez. A látószög növelésével a perspektíva egyre jobban torzul, megnyúlik, míg létrejön az ún. halszem hatás A látószög csökkentése fordított hatást eredményez, a tér mélységi különbségei csökkennek, a kép ellaposodik, bár közel sem akkora mértékben, mint a

széles látószög esetén, de a perspektívikus hatás most is torzul, csak éppen fordított, a tér zsugorodni látszik. A nézőpont általában egy nyugvó sík fölött van szemmagasságnyival. A sík neve talaj sík, angolul ground. A perpektívikus képen a tárgy párhuzamos vonalai összetartani látszanak egy végtelen távolságban lévő pont felé. A talajjal párhuzamos síkokon fekvő párhuzamos vonalak összetartási pontja; egy, a talajjal párhuzamos vonalat rajzolnak ki a végtelenben, ez a horizont. A nézőpont alatti vonalak látszólag emelkednek, az e felettiek süllyedni látszanak a horizont felé, míg a szemmagasságban lévő vonalak látszólag vízszintesen közelítenek a horizonthoz. Az iménti leírásban feltételeztük, hogy a nézővonal párhuzamos a talajsíkkal, ezért a horizont azonos magasságba esik a nézőponttal, ez azonban nincs mindig így. Ha a nézőpont magasabban van a látványközéppontnál, a horizont a nézőpont felett

látszik, és ekkor magas horizontról beszélünk. Fordított esetben, amikor a látványközéppont van magasabban, a horizont a nézőpont felett látszik, és ekkor magas horizontról beszélünk. 51 Fordított esetben, amikor a látványközéppont van magasabban, a horizont a nézőpont alatt látszik. Ezt az esetet alacsony horizontnak nevezzük Ha a képet tisztán tárgyakból építjük fel, nincs probléma a magas és az alacsony horizontokkal, a program helyesen számítja ki a perspektívát, de hibák adódhatnak, ha háttérképet használunk. Ebben az esetben a háttérkép horizontjának egybe kell esnie a jelenet horizontjával, ellenkező esetben perspektíva hiba jön ki. A horizontok egybeesésénél arra is ügyelni kell, hogy a háttérkép és a jelenet azonos látószöggel készüljön. V.12 A kamera A 3D Studio 35 mm–es filmfelvevő kamerával egyezik meg. A látószögét is egy ennek megfelelően a kamera gyújtótávolságával lehet megadni.

Ahhoz, hogy a kamerát manipulálni tudjuk, először is létre kell hozni egyet. Több kamera is lehet a jelenetben, sőt egyszerre akár több is lehet aktív, vagyis több nézet is lehet kameranézet. Az Internetről letölthető az OLDCITY3DS fájl, amelyben már van kamera definiálva. V.13 Színek Nem feltétlenül elegendőek a geometriai definíciók és a nézőpont beállítások, a tárgyaknak anyagjellemzőket is kell adni ahhoz, hogy az elkészülő kép megfelelő legyen. Legfontosabb anyagjellemző a szín A színek hatásának megértése, a kívánt effektusokhoz való kiválasztásuk fontos dolog a modellezés során. A szín a tárgy felületének jellemzője 52 Felhasznált irodalom: [1] Pogáts Ferenc: Vektorgeometria Példatár Műszaki Könyvkiadó Budapest, 1974 [2] Hajós György: Bevezetés a geometriába. Nemzeti tankönyvkiadó, Budapest 1971 [3] Angster Erzsébet – Kertész László: Turbo Pascal 6.0 [4] Pirkó József: 3D Perspektívikus

Grafika IBM PC-n Turbo Pascalban [5] Pázmány Ágnes - Permay Éva: Látás és ábrázolás Gimnázium I-III Tankönyvkiadó Budapest 1991 [6] Füzi János: 3D grafika és animáció IBM PC-n Computerbooks, Budapest, 1995 53