Valaistus

Edelliä mainituilla funktioilla piirtämäsi näkymät näyttävär melko litteiltä, koska valaistus ei ole käytössä. Tasojen värit ovat samat niiden sijainnista huolimatta. Enemmän realistisuutta näkymiisi saat, jos sallit valaistuksen ja asetat valot oikeisiin paikkoihin. Hyvin valaistujen näkymien luominen ei ole helppoa, mutta efekti on todella hyvä.

Valaistuksen sallimiseen voit käyttää seuraavaa funktiota:

d3d_set_lighting(enable) Sallii tai kieltää valaistuksen käytön.

Valaistusta käytettäessä jokaiselle polygonin verteksille päätetään väri erikseen. Sitten niiden sisäisten pikselien väri päätetään näiden verteksien värien perusteella. Tämä voidaan tehdä kahdella tapaa: joko koko polygoni värjätään samalla värillä tai sitten väri liu'utetaan pehmeästi polygonin pinnalle. Oletuksena käytetään pehmeää varjostusta. Tämän voit vaihtaa käyttämällä seuraavaa funktiota:

d3d_set_shading(smooth) Asettaa, käytetäänkö pehmeää varjostusta vai ei.

Valaistuksen käyttämiseksi sinun on tottakai määritettävä valoja. On olemassa kahdenlaisia valoja: suuntavaloja (kuten aurinko) ja sijaintivaloja. Valolla on väri. (Tuki on vain hajautetulle valolle (diffuse light), ei pintaheijastuksia (specular reflection)). Seuraavien funktioiden avulla on mahdollista määritellä ja käyttää valoja:

d3d_light_define_direction(ind,dx,dy,dz,col) Määrittää suuntavalon. ind on valon indeksi (käytä pientä, positiivista arvoa). (dx,dy,dz) määrittävät valon suunnan. col on valon väri (useimmiten haluat käyttää väriä c_white). Tämä funktio ei kytke valoa päälle.
d3d_light_define_point(ind,x,y,z,range,col) Määrittää pistevalon. ind on valon indeksi (käytä pientä, positiivista arvoa). (x,y,z) määrittävät valon sijainnin. range määrittää, kuinka kauas valo yltää. Valon voimakkuus laskee tällä välillä. col on valon väri. Tämä funktio ei kytke valoa päälle.
d3d_light_enable(ind,enable) Kytkee valon päälle (true) tai pois päältä (false).

Tapa, jolla esine heijastaa valoa, riippuu valon suunnan ja pinnan normaalin, joka on suoraan pinnasta poispäin osoittava vektori, välisestä kulmasta. Tästä syystä valaistuja esineitä tehdessäsi sinun tulee määritellä verteksien sijaintien lisäksi myös niiden normaalit. Näiden neljän lisäfunktion avulla voit määritellä primitiivien verteksit:

d3d_vertex_normal(x,y,z,nx,ny,nz) Lisää verteksin (x,y,z) primitiiviin normaalivektorilla (nx,ny,nz).
d3d_vertex_normal_color(x,y,z,nx,ny,nz,col,alpha) Lisää verteksin (x,y,z) primitiiviin normaalivektorilla (nx,ny,nz) käyttäen sen omaa väri- ja läpinäkyvyysarvoa.
d3d_vertex_normal_texture(x,y,z,nx,ny,nz,xtex,ytex) Lisää verteksin (x,y,z) primitiiviin normaalivektorilla (nx,ny,nz), käyttäen sillä tekstuurin Add vertex (x,y,z) to the primitive, with normal vector (nx,ny,nz), sijaintia (xtex,ytex) ja sekoittaen siihen aiemmin määritetyt väri- ja läpinäkyvyysarvot.
d3d_vertex_normal_texture_color(x,y,z,nx,ny,nz,xtex,ytex,col,alpha) Lisää verteksin (x,y,z) primitiiviin normaalivektorilla (nx,ny,nz), käyttäen sillä tekstuurin sijaintia (xtex,ytex) ja sekoittaen siihen sen omat väri- ja läpinäkyvyysarvot.

Huomaa, että perusmuodoille, joita voit piiträä, normaalit asetetaan automaattisesti oikein.