3D Grafika

Top  Previous  Next

 

 

       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.2.1 Szemünk felépítése........6

I.2.2 A látás alapjai........8

I.2.3 A visszavert fény érzékelése........8

I.2.4 Látott képek kiegészítése a vizuális emlékezet        segítségével        8

I.2.5 Képek leképzése........9

I.3 A színlátás és a látás egyéb sajátosságai........9

I.3.1 Színek érzékelése........9

I.3.2 Látásunk időbeli felbontása........10

I.3.3 A színlátás egyéb jellemzői........11

I.3.4 A színkeverés két elterjedt módszere........11

I.3.5 Alakzatlátás........12

II MATEMATIKAI ALAPOK........13

II.1 Testek felszínének közelítése        13

II.2 Vektorok R2-ben és R3-ban........14

II.2.1 Irányított szakaszok........14

II.2.2  Vektorok jellemzői........14

II.2.3 Vektorok összege........15

II.2.4 Vektorok szorzása számmal........15

II.2.5 Vektorok lineáris kombinációja, a tér dimenziója........16

II.2.6 Vektorok megadása koordinátákkal........17

II.2.7 Egyenesek paraméteres egyenletei........18

II.2.8 Vektorok szorzása........18

II. 2. 8. 1 A skaláris szorzat........18

II.2.8.2 A vektoriális szorzat........19

II.2.9 Pont és egyenes távolsága........20

II. 3 Mátrixszámítás........22

II.3.1 Mátrixok jellemzői........22

II.3.2 Műveletek mátrixokkal........23

II.3.2.1 Mátrixok összeadása........23

II.3.2.2 Mátrix szorzása skalárral........23

II.3.2.3 Mátrixok szorzása........24

III GEOMETRIAI TRANSZFORMÁCIÓK........25

III.1 Transzformációk három dimenzióban........25

III.1.1 Háromdimenziós forgatás........25

III.1.2 Vetítési típusok........28

III.1.3 Láthatóság........29

IV 3D GRAFIKA SZERKESZTŐPROGRAM BEMUTATÁSA        30

IV.1 3D Grafika szerkesztőprogram 1.0 verziójának felhasználói kézikönyve        30

IV. 2 A program folyamatábrája........39

IV.3 A program eljárásai és függvényeinek leírása........42

V 3D VIDEO STUDIO........47

 

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.

 
       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.1.0. [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.

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.

 

I.2 A látás biológiája, képalkotás az emlékezet segítségével

I.2.1 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.

 

 
 
 
 
 
 
 
 
 
 
 
 
 

I.2.2 A látás alapjai

       A látás azon alapul, hogy az igen rövid hullámhosszúságú, 380-780 nmes 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.

I.2.3 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.2.4 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.

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.2.5 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.3.1 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ámhossz-függése különbözteti meg egymástól.

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.3.2 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.)

I.3.3 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 függ. Szemünk világosság szerinti felbontóképessége erősen hullámhosszfüggő, átlagosan mintegy 500 fokozatot tudunk megkülönböztetni.

I.3.4 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).

I.3.5 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.

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átarendszereket, amelyekben az ábrázolandó dolog geometriája, adatai leírásra kerülnek
Transzformációkat kell végeznünk koordinátarendszerek 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.0s verziója is ilyen testek ábrázolására törekszik, melyet az alábbi matematikai alapfogalmak segítségével teszi.

II.2 Vektorok R2-ben és R3-ban

II.2.1 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 (2.1. á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.

 

                               

 
II.2.2  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|

II.2.3 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:

 

 

II.2.4 Vektorok szorzása számmal

       Az a vektor k-szorosán azt a ka-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.

 

 

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)*p1cos(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.2.5 Vektorok lineáris kombinációja, a tér dimenziója

       Az a1,a2,…,an vektorok (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.

       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.

       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.2.6 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.

 

       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ó.

II.2.7 Egyenesek paraméteres egyenletei

 

       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.2.8 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)

II.2.8.2 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 ß        (2.5)

Legyen a(a1,a2,a3) é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;

II.2.9 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.

       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:        gX=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á

A skaláris szorzat összefüggésének felhasználásával:

k*u=n*(u/u)

k*u=k*u*(u/u)=(n*u/u)*(u/u)=(n*u/u2)*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;

 

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:

 

 

 

 

a11

a12

… a1n

 

 

A=

 

 

a21

a22

… a2n

 

      (2.7)

 

 

 

 

 

 

 

 

 

am1

am2

… amn

 

 

 
II.3.1 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.

II.3.2 Műveletek mátrixokkal

II.3.2.1 Mátrixok összeadása

Legyen az A és a B mátrix az (mxn, R) halmaz mátrixa.

 

 

 

 

a11

a12

… a1n

 

 

A=

 

 

a21

a22

… a2n

 

 

 

 

 

 

 

 

 

 

 

am1

am2

… amn

 

 

 

 

 

 

b11

b12

… b1n

 

 

B=

 

 

b21

b22

… 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

a12+b12

… a1n+b1n

 

 

C=

 

 

a21+b21

a22+b22

… a2n+b2n

 

     (2.8)

 

 

 

 

 

 

 

 

 

 

 

am1+bm1

am2+am2

… amn+bmn

 

 

 

II.3.2.2 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

=

 

 

 

 

      (2.9)

 

 

 

kam1

kam2

… kamn

 

 

 
 

 

II.3.2.3 Mátrixok szorzása

Legyen az A mátrix A ş M (mxn, R) és a B mátrix B ş M (nxp, R)

 

 

 

 

a11

a12

… a1n

 

 

A=

 

 

a21

a22

… a2n

 

 

 

 

 

 

 

 

 

 

 

am1

am2

… amn

 

 

 

 

 

 

b11

b12

… b1p

 

 

B=

 

 

b21

b22

… b2p

 

 

 

 

 

 

 

 

 

 

 

bn1

bn2

… bnp

 

 

 

A szorzatmátrixot a következőképpen értelmezzük:

 

 

 

 

c11

c12

… c1p

 

 

C=A*B=

 

 

c21

c22

… c2p

 

(2.10)

 

 

 

 

 

 

 

 

 

cm1

cm2

… cmp

 

 

 

ahol:

 

 

 

 

 

 

 

b1k

 

 

cik=

 

ai1 ai2 … ain

 

*

 

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.

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.1.1 Háromdimenziós forgatás

Az a(a1,a2) vektort (3.1), az arra alkalmas mátrix segítségével elforgathatjuk.

 

       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.

       Az u(u1,u2,u3) vektort (3.2) szeretnénk a Z-tengely körül elforgatni egy meghatározott ă szöggel.

 

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:

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ä,r*sinä).

Forgassuk el r vektort ă szöggel, az új vektor legyen r=b1+b2, ahol

       b1=(r*cos(ä+ă),0)        =(r*cosä*cosăr*sinä*sină,0)

       b2=(0,r*sin(ä+ă))        =(0,r*sinä*cosă+r*cosä*sină)

u1=r*cosä,

u2=r*sinä         3.1 alapján:

r=(b1,b2)=(u1*cosău2*sină,u1*sină+u2*cosă)

Mivel a harmadik koordináta nem változott, unek a koordinátái a következők:

u=(u1*cosău2*sină,u1*sină+u2*cosă,u3)

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

 

    (3.2)

 

 

0

0

1

 

 

 
Hasonlóan kapjuk az X illetve az Y tengely körüli forgatás mátrixát:

 

 

1

0

0

 

 

Rá  =

 

0

cosá

siná

 

   (3.3)

 

 

0

siná

cosá

 

 

 

 

 

cosâ

0

sinâ

 

 

Râ  =

 

0

1

0

 

     (3.4)

 

 

sinâ

0

cosâ

 

 

 

Az        R=Rá*Râ*Ră:

 

cosβ*cosγ

cosβ*sinγ

sinβ

 

 

cosα*sinγ + sinα*sinβ*cosγ

cosα*cosγ-sinα*sinβ*sinγ

sinα*cosβ

 

 

sinα*sinγ↑↑-cosα*sinβ*cosγ

sinα*cosγ+cosα*sinβ*sinγ

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átarendszer 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)*p1cos(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 );

 

III.1.2 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.

 

 

 

       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:
 

III.1.3 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átarendszer tengelyei körül, tetszőleges (ö123) 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):

 

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).

IV 3D GRAFIKA SZERKESZTŐPROGRAM        BEMUTATÁSA

IV.1 3D Grafika szerkesztőprogram 1.0 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. 3Ds képek előállítása
5. Egyéb funkciók.

 

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átarendszer segítségével szerkeszthetjük rajzainkat, persze a koordinátarendszer 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 3Ds 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, és megválaszthatjuk, hogy láthatóak legyeneke a takart élek, vagy nem.

A program főképernyőjének felépítése:

 

 

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átarendszer 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átarendszerből.
5 státusz sor: Információt kaphatunk az aktuális tevékenységgel kapcsolatban.
6 Kilépés menüpont: Kilépés a programból.

1 Rajzolási lehetőségek

 

       A koordinátarendszerbe 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átarendszer 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:

 

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átarendszeré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átarendszerig terjedő segédvonal könnyíti. A koordinátarendszeren 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.

3.2 Négyszögrajzolás

       A képernyő koordinátarendszerében négyszöget rajzol. Valamelyik átló egyik végpontjának koordinátái a koordinátarendszeren 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átarendszerig terjedő segédvonal segíti. Adott negyedben elkezdett vonal rajzolását csak ugyanabban a negyedben lehet befejezni.

 

 

3.3 Képtörlés

       A funkció hatására az összes koordinátarendszeren 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átarendszerben. 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 3Ds kép menüpont funkcióit. Az Edit főmenüpont eszköztárak almenüjében a két eszköztár kikapcsolható.

 

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 3Ds forgatás menüpont segítségével.

6 3Ds képek előállítása

       A koordinátarendszerben 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átarendszer 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:

 

 

 

A 3Ds 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ódjanake 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 volte ü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átarendszeren 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.

 

IV. 2 A program folyamatábrája

 

 

 

 

 

 

 

 

IV.3 A program eljárásai és függvényeinek leírása

A 3Ds 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.

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 vane. 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

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.2.1 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

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:

A 4.1 ábrán látható sorrendben van definiálva a téglatestek csúcsainak sorrendje.

 

       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.

 

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.

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.

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.

V.1.1 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.

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.1.2 A kamera

       A 3D Studio 35 mmes 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 OLDCITY.3DS fájl, amelyben már van kamera definiálva.

V.1.3 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.

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