Mallien luominen

Kun sinun tarvitsee piirtää suuria malleja, on melkoista ajanhaaskausta kutsua kaikkia erilaisia piirtofunktioita yhä uudelleen ja uudelleen joka askeleella. Tämän välttämiseksi voit luoda malleja. Malli koostuu useasta piirrettävästä primitiivistä ja muodosta. Kun malli on luotu, voit piirtää sen eri paikkoihin yhdellä funktiokutsulla. Malleja voi myös ladata tiedostosta ja tallentaa tiedostoihin.

Ennen erilaisten funktioiden esittelyä on mainittava yksi tärkeä asia: tekstuurien käsittely. Kuten aiemmin mainittiin, tekstuurit otetaan kuvista ja taustoista. Tekstuurien indeksit voivat vaihdella ajan myötä. Tästä syystä mallit eivät sisällä lainkaan tekstuuritietoa. Vain mallia piirtäessäsi voit määrittää tekstuurin. Jos tarvitset montaa tekstuuria, sinun on joko yhdistettävä ne yhdeksi (ja oltava tarkkana koordinaattien kanssa) tai käyttää useita malleja. Tämän etu on, että voit piirtää saman mallin helposti eri tekstuureilla.

Mallien luomiseen, lataamiseen ja tallentamiseen voit käyttää seuraavia funktioita:

d3d_model_create() Luo uuden mallin ja palauttaa sen indeksin. Tätä indeksiä käytetään kaikissa muissa malleja käsittelevissä funktioissa.
d3d_model_destroy(ind) Tuhoaa mallin, jolla on annettu indeksi, ja vapauttaa sen varaaman muistin.
d3d_model_clear(ind) Tyhjentää mallin, jolla on annettu indeksi, poistaen kaikki siihen lisätyt primitiivit.
d3d_model_save(ind,fname) Tallentaa mallin määritetyn nimiseen tiedostoon.
d3d_model_load(ind,fname) Lataa mallin määritetyn nimisestä tiedostosta.
d3d_model_draw(ind,x,y,z,texid) Piirtää mallin sijaintiin (x,y,z). texid on tekstuuri, jota on käytettävä. Käytä arvoa -1, jos et halua käyttää tekstuuria. Jos haluat kiertää tai skaalata mallia, voit käyttää aiemmin mainittuja muodonmuutoskeinoja.

Jokaiselle primitiivifunktiolle on oma vastineensa sen lisäämiseksi malliin. Funktioilla on samat argumentit kuin aiemmin, paitsi että jokaisella on ensimmäisenä argumenttina mallin indeksi ja että tekstuuritietoja ei syötetä.

d3d_model_primitive_begin(ind,kind) Lisää malliin määritetyn tyyppisen primitiivin: pr_pointlist, pr_linelist, pr_linestrip,pr_trianglelist,pr_trianglestrip tai pr_trianglefan.
d3d_model_vertex(ind,x,y,z) Lisää verteksin (x,y,z) malliin.
d3d_model_vertex_color(ind,x,y,z,col,alpha) Lisää verteksin (x,y,z) malliin käyttäen sen omaa väri- ja läpinäkyvyysarvoa.
d3d_model_vertex_texture(ind,x,y,z,xtex,ytex) Lisää verteksin (x,y,z) malliin ja liittää siihen tekstuurin sijainnin (xtex,ytex).
d3d_model_vertex_texture_color(ind,x,y,z,xtex,ytex,col,alpha) Lisää verteksin (x,y,z) malliin määritetyillä tekstuuri- ja väriarvoilla.
d3d_model_vertex_normal(ind,x,y,z,nx,ny,nz) Lisää verteksin (x,y,z) malliin normaalivektorilla (nx,ny,nz).
d3d_model_vertex_normal_color(ind,x,y,z,nx,ny,nz,col,alpha) Lisää verteksin (x,y,z) malliin normaalivektorilla (nx,ny,nz) käyttäen sen omaa väri- ja läpinäkyvyysarvoa.
d3d_model_vertex_normal_texture(ind,x,y,z,nx,ny,nz,xtex,ytex) Lisää verteksin (x,y,z) malliin normaalivektorilla (nx,ny,nz) määritetyllä tekstuurin sijainnilla.
d3d_model_vertex_normal_texture_color(ind,x,y,z,nx,ny,nz,xtex,ytex,col,alpha) Lisää verteksin (x,y,z) malliin normaalivektorilla (nx,ny,nz) määritetyillä tekstuuri- ja väriarvoilla.
d3d_model_primitive_end(ind) Lopettaa malliin lisättävän primitiivin kuvailun.

Primitiivien lisäksi voit myös lisätä malleihin perusmuotoja. Jälleen kerran funktiot näyttävät melkein samoilta, mutta mallin indeksin kanssa ja ilman tekstuuritietoja:

d3d_model_block(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat) Lisää malliin laatikkomuodon.
d3d_model_cylinder(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,closed,steps) Lisää malliin lieriömuodon.
d3d_model_cone(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,closed,steps) Lisää malliin kartiomuodon.
d3d_model_ellipsoid(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,steps) Lisää malliin ellipsoidimuodon.
d3d_model_wall(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat) Lisää malliin seinämuodon.
d3d_model_floor(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat) Lisää malliin lattiamuodon.

Mallien käyttäminen voi nopeuttaa huomattavasti 3D-peliesi grafiikoita ja niitä kannattaa käyttää aina, kun se on mahdollista.