Modeliranje Dvokapne hiše s čopi s pomočjo grafičnega jezika OpenGL

Damjan Čelič

24. junij, 2002


Abstract:

A program, which generates and animates a simple model of a house with a few windows is to be developed. Windows should be drawn on the surface of the house. The incoming parameters are: length, width, height, colours of surface and roof of the house.

Kazalo:

  1. Uvod
  2. Teoretične osnove
  3. Rešitev naloge
  4. Literatura

  1. Uvod
  2. Za izdelavo prostorskih geometrijskih modelov je najenostavneje uporabiti grafični jezik OpenGL. Zaradi svoje odprtosti, zmogljivosti in enostavnosti za uporabo, se je OpenGL uveljavil na vseh operacijskih sistemih in strojnih platformah.

    Jezik OpenGL je konstruiran kot strojno neodvisen vmesnik med programsko kodo in grafičnim pospeševalnikom. To pa pomeni tudi to, da OpenGL nima uporabniškega vmesnika, ki bi ga povezoval z okenskim sistemom. Zaradi različnih specifikacij okenskih sistemov, pa splošen uporabniški vmesnik ni možen. Zato se je izdelala knjižnica GLUT (GL Utility), ki vse razlike med operacijskimi sistemi kompenzira in vpeljuje skupen način manipuliranja z dogodki (events). S knjižnico GLUT je tako mogoče pisati prenosljive programe, ki so enostavni za programiranje in dovolj zmogljivi za nezahtevne uporabniške vmesnike.

  3. Teoretične osnove
  4. Program pišemo v programskem jeziku Fortran [2] in v sintaksi vključujemo (kličemo) ukaze iz knjižnice GLUT. Programsko kodo potem s prevajalnikom prevedemo v program s končnico exe. Vse kar je potrebno vedeti o vključevanju in uporabi grafične knjižnice GLUT, je razloženo v literaturi [1], ki se nahaja na domači strani LECAD-a.

  5. Rešitev naloge
  6. Enostaven model hiše je zgrajen iz kvadra in tristrane prizme, ki je položena na kvader tako, da predstavlja streho hiše. Tako kvader kot tudi prizma se morata izrisati skladno z vhodnimi podatki.

    Kvader sestavimo iz šestih ploskev, od katerih so nasprotne ploskve paroma dimenzijsko enake. To pomeni, da sta enaki sprednja in zadnja ploskev (višina x širina), leva in desna ploskev (višina x dolžina), ter spodnja in zgornja ploskev (širina x dolžina). Torej mora program risati tri dimenzijsko različne pravokotnike, ki jih najenostavneje sestavimo skupaj v kvader tako, da postavimo koordinatni sistem v težišče bodočega kvadra in ga potem rotiramo okrog x oziroma y osi, ter transliramo po z osi. Pravokotnike vedno rišemo v x-y ravnini. Nekoliko bolj enostaven primer kocke je razložen v literaturi [1].

    Slika kvadra

    Slika1: Kvader

    Sedaj ko imamo kvader izrisan, se lahko lotimo strehe. Privzemimo, da je kot naklona strehe vedno alfa = pi/6 [rad]. Če označimo s h najvišjo točko slemena, potem lahko izračunamo:

    h = (s/2) * tg(alfa)

    Pri tem je s širina hiše.

    Program je zasnovan tako, da postavi streho vedno vzdolž daljše dimenzije hiše. Torej velja zgornja enačba le v primeru, ko je dolžina daljša od širine, v nasprotnem primeru pa velja enačba:

    h = (d/2) * tg(alfa)

    Pri čemer je d dolžina hiše.

    Za začetek vzemimo, da je fasada rumene barve, kritina pa rdeče. Tako se odločimo predvsem zardi lepšega prikaza zaporedja operacij, ter boljše prostorske predstave. Kako so barve vnesene v model, bo razloženo kasneje.

    Izrisa strehe se lotimo tako, da premaknemo izhodišče koordinatnega sistema s težišča kvadra v najvišjo točko slemena (translacija za h po y-osi). Nato le še zarotiramo K.S. v ravnino nagiba strehe in izrišemo šestkotnik, ki predstavlja polovico strehe. Podobno izrišemo tudi drugi krak strehe. Tako dobimo hišo z odprtim ostrešjem, zaenkrat še brez čopov.

    Slika hiše z odprtim ostrešjem

    Slika2: Hiša z odprtim ostrešjem

    Hiša z zaprtim ostrešjem nastane, ko na prednji in zadnji strani hiše narišemo trikotnika z nagibom v barvi kritine, ki predstavljata čope, ter trapeza v barvi fasade, ki predstavljata podstrešni steni. Risanje trikotnikov in večkotnikov v prostoru je razloženo v literaturi [1].

    Slika hiše s čopi in zaprtim ostrešjem

    Slika3: Hiša s čopi in zaprtim ostrešjem

    Izrisa oken se lotimo s podobno logiko glede orientacije hiše kot pri strehi. Recimo da bo imela naša hiša dve okni na čelni strani (pročelju), ter vrata in okno na vidni bočni strani. Z uporabo IF zanke pri pogoju d > s dosežemo željeni učinek. Lokacijo ter velikost oken in vrat definiramo po vizualnem estetskem okusu glede na vhodne parametre d, s, in v.

    Slika hiše s čopi ter z okni in vrati

    Slika4: Hiša s čopi ter z okni in vrati

    Preostane nam samo še rešitev problema vnosa barv. To najbolj elegantno rešimo na ta način, da definiramo dva trikomponentna vaktorja f in k, ki bosta podajala informacijo o barvi fasade in barvi kritine. Željeno barvo dobimo z uporabo RGB barvne sheme. Barvi fasade in kritine sta torej v programu vnaprej opredeljeni in ju lahko popravlajmo v DATA stavku. V programu tako uporabimo naslednji sklop stavkov:

    real f(3), k(3)
    data f /1,1,0/, k /1,0,0/
    call fglColor3f(f(1), f(2), f(3))
    call fglColor3f(k(1), k(2), k(3))

    Končna slika hiše

    Slika5: Hiša s čopi kot jo izriše program

    Programsko kodo si lahko ogledate tukaj:

    hisa.f

    Program deluje v okenskem okolju Microsoft Windows in ga je mogoče preizkusiti tukaj:

    hisa.exe

    Seveda pa program ne more delovati brez GLUT knjižnice, oziroma datoteke glut32.dll, ki ga v skompresirani obliki lahko dobite tukaj:

    glut32.zip

  7. Literatura
  8. 1
    L. Kos.
    Računalniška grafika.
    Skripta-predloge za vaje pri RPK ( opengl-intro.pdf ). LECAD, 9.april 2002.

    2
    J. Petrišič
    Fortran.
    Fakulteta za strojništvo, Ljubljana 1986.

    nazaj na vrh


    Damjan Čelič
    damjan.celic@kiss.uni-lj.si

    2002-06-24