uvod
arhitektura
galerija
downloads
o nama
 




           VirtuaFER je pisan u C++ i namijenjen je za kompilaciju u Visual Studio-u 2008. Dodatne biblioteke korištene pri izradi su Boost, FastDelegate i IFL (skupina besplatnih biblioteka za prikazivanje fontova, učitavanje JPEG datoteka, itd.).

Osnove arhitekture

            Glavna klasa koja enkapsulira svu funkcionalnost grafičkog enginea zove se CEngine i njene najvažnije sastavnice su klasa CSystem i CRenderDevice.

            Klasa CSystem je apstrakcija platforme na kojoj se odvija program, i zaslužna je za komunikaciju sa operacijskim sustavom. Umjesto direktnog pozivanja Windows API-ja (ili X-Window API-ja, ili već nekih odgovarajućih funkcija danog operacijskog sustava) za stvaranje prozora za aplikaciju i očitavanje stanja ulaznih jedinica (tipkovnica, miš), koriste se funkcije i podklase CSystem klase. Na taj način, ako je potrebno prebaciti program na neki drugi operativni sustav, treba se promijeniti samo implementacija CSystem klase - svi ostali dijelovi programa mogu ostati potpuno isti.

            Klasa CRenderDevice je apstrakcija grafičkog API-ja. Umjesto direktnog pozivanja funkcija specifičnog API-ja, kao što je OpenGL ili Direct3D, pozivaju se funkcije CRenderDevice klase. Implementacija te klase zatim direktno poziva funkcije nekog specifičnog API-ja. Na ovaj način, sam engine je neovisan o korištenom API-ju - moguće je napraviti nekoliko implementacija CRenderDevice klase, od kojih svaka koristi neki drugi API. Pri izvođenju programa, instancira se ona implementacija koju korisnik odabere.

            Uz te dvije klase, unutar CEngine klase nalazi se i klasa CIBSP koja enkapsulira strukturu .bsp datoteke, te sve funkcije potrebne za učitavanje te strukture iz datoteke u memoriju.
Sam postupak iscrtavanja nivoa opisanog u .bsp datoteci izvršava CRenderDevice klasa. Ona preuzima podatke iz CIBSP klase i iscrtava ih na zaslonu.

Osvjetljenje i materijali

            Sama implementacija VirtuaFER grafičkog pokretača omogućava dva načina prikaza osvjetljenja scene. Prvi način koristi mape osvjetljenja (lightmape) koje su unaprijed generirane i postavljene po sceni. Ovaj način dopušta samo statično tj. nepromjenljivo osvjetljenje, ali istovremeno dozvoljava veće brzine iscrtavanja. Drugi način je korištenje programirljivih grafičkih procesora (shader-e) za iscrtavanje scene i računanje osvjetljenja pri iscrtavanju. Budući da se na taj način osvjetljenje stalno iznova računa može se koristi dinamičko tj. promjenljivo (pomično) osvjetljenje.

            Zbog ograničenih mogućnosti računala (grafičke kartice) na kojima je sustav rađen, u načinu osvjetljenja pomoću programirljivih grafičkih procesora, koristi se samo jedan dinamički izvor svjetla. Zamišljeno je da se taj izvor pomiče zajedno s kamerom po sceni te daje dojam svjetiljke koja je pričvrščena na kameru (promatrača).

Model fakulteta

Oblikovanje prostorija fakulteta

            Oblikovanje modela započeto je preciznim modeliranjem veličine osnovnih građevnih elemenata prostora - zidova, poda i stropa. Budući da se pozicija detalja u modelu određuje prema udaljenosti od jednog od tih elemenata, bilo kakvu neotkrivenu grešku ili preveliko odstupanje napravljeno prilikom ove faze je kasnije vrlo teško popraviti. Srećom, originalni tlocrt zgrade je bio od velike pomoći u ovoj fazi, te su pomoću njega lako izgrađeni pod i strop. Ostale veličine koje su bile potrebne utvrđene su dodatnim mjerenjima.            

            Nakon definiranja osnovnog oblika modela, na red su došli složeni objekti čije pozicioniranje nije utjecalo previše na raspored drugih objekata i detalja, ali su zbog svoje veličine ili neke druge vrste istaknutosti bili nezaobilazni. U tu su skupinu ušli razni oblici pokućstva poput stolova i studomata i dijelovi zgrade poput stepenica, vrata ili prozora. U ovoj fazi se prvi put javio problem preklapanja tekstura, koji se događa kad se zbog postavljanja jednog objekta zaklanja dio drugog objekta, koji je teksturiran (slika 2.2.1). Ako su prikazani i prvi i drugi objekt, nije moguće nacrtati drugi objekt bez da se nacrtaju i zaklonjena i nezaklonjena površina. Makar će na kraju prikaz izgledati onako kako bi i trebao, biti će potrošeno dodatno vrijeme na određivanje koji je dio vidljiv.

slika 2.2.1     slika 2.2.1
     Slika 2.2.1 - Preklapanje tekstura        Slika 2.2.2. Ispravljeno preklapanje

            Ovaj problem je tijekom modeliranja riješen tako da je svako preklapanje dvoje većih objekata ispravljeno, a za manje objekte je preklapanje ispravljeno samo kad je zaklonjena površina bila mnogo veća od prikazane.

Dodavanje detalja i izrada tekstura

            U konačnoj fazi oblikovanja se model pokušava učiniti što prepoznatljivijim dodavanjem detaljnih objekata male veličine i izradom i postavljanjem odgovarajućih tekstura. Detaljno oblikovanje korištenjem više geometrijskih tijela skoro pa uvijek bolje izgleda od prikaza teksturom, ali je manje efikasno zbog upotrebe većeg broja poligona za prikazivanje. Dovoljno kompleksni objekti čine gradnju binary space partitioning stabla složenijom, i mogu spriječiti kompilaciju mape zbog ograničenja programa koji gradi stablo. Posebno su problematični slučajevi gdje nije moguće uvjerljivo prikazati objekt teksturiranjem, a model je presložen i stvara probleme prilikom kompilacije mape, kao u slučaju radijatora kod izrade modela fakulteta.
Prilikom oblikovanja, potrebno je obratiti pozornost na male nepreciznosti nastale postavljanjem objekata koje stvaraju velike probleme tijekom kompilacije mape. Visibility izračuni dijele prostor na sobe prema postavljenim tijelima i određuju je li iz jedne sobe vidljiva druga soba.

            Teksture koje se koriste u ovom modelu napravljene su koristeći fotografije raznih površina fakulteta. Za jednostavne teksture poput onih na zidovima, osnovna boja teksture je izabrana prema raznim slikama i primjenjen je filter koji je dodao malu količinu bijele buke kako bi tekstura bila prirodnija. Ostale teksture su izrađene obradom prikladnih slika kako bi se uklonili artefakti nastali nejednolikim osvjetljenjem i distorzija nastala slikanjem.

Kompilacija mape

            Kompilacija se vrši pomoću alata koji se distribuira uz GtkRadiant zvanog Q3map2, i da bi se izvela, potrebno je osigurati da je prostor u kojem se nalazi početna pozicija korisnika zatvoren teksturiranim geometrijskim tijelima. Kompilacija završne verzije mape je trajala 3 sata, a kod nekih od ranijih verzija koje su imale lošije definirane prostore, kompilacija je trajala i do 10 sati.