RAYTRACING, COME GODO :-) Corso di Ray-Tracing per principianti Parte 3/7 di Alfonso Martone (alfmar) Abbiamo parlato nei precedenti articoli di un po' di tutto tranne che del linguaggio... prima di passare definitivamente al linguaggio di POVray, vorrei fare un paio di osservazioni per far passare un po' di paura a quelli che cominciano con "ma io non so compilare". Il dramma di tutti i programmi forniti in sorgente e' il tremendo "errore durante la compilazione" perche' compilatori diversi hanno abitudini (ottimizzazioni, standard, etc) diverse. POV per fortuna non e' cosi'. Due anni fa lo compilai sotto DOS (con il Borland C++ 2.0) senza problemi; uscirono una marea di "Warning:..." a video, ma mi genero' l'EXE senza troppa fatica. Stessa cosa per Linux e Gnu C/C++ (GCC 2.6.3 e GCC 2.5.8), anzi qui ricordo di aver avuto neppure un warning, segno che POV e' stato scritto in C "puro e semplice", senza usare stranezze che vanno bene su un determinato compilatore e male su tutti gli altri - come aneddoto racconto sempre che il MASM 5.1 della Microsoft era talmente bacato da costringere il team TASM della Borland ad implementare un comando "MASM51" che emulava gli stessi bug :-). Il guaio e' che non si tratta di un aneddoto ma della verita'! Dicevo: *facile* da compilare. Basta masticare un minimo di inglese e saper editare un file ascii - non serve nessuna modifica al codice, neppure ridefinire qualche #include file di configurazione. Basta solo rinominare unixconf.h in config.h e lanciare il makefile adatto (rinominare unix.mak in Makefile). Basta ovviamente avere compilatore e librerie su disco, il compilatore dopo non serve piu' e quindi potete pure buttarlo. Se qualcuno avesse *davvero* problemi, posso fornire il mio eseguibile o al limite ricompilarlo io (sempre pero' quello sotto Linux, per il DOS non ho da tempo un compilatore decente, ci potro' provare quando ce l'avro'). Qualcuno si potra' lagnare che l'interfaccia utente e' testuale, ma per un programma che vi costa 5 secondi lanciarlo e ore e ore (quando non giorni e giorni) di attesa per l'output, chiedere qualcosa piu' di tanto e' come chiedere di sprecare risorse senza motivo... cercatevi piuttosto un programma che visualizzi bene le schermate in truecolor o perlomeno a 32000 colori, che e' la cosa piu' importante. Veniamo finalmente al linguaggetto di POV (era ora). Il manuale e' abbastanza chiaro (e qui potrei pure smettere di scrivere), pero' io non mi sono mai fidato troppo dei manuali, per cui vediamo direttamente "su strada" come si comporta, e poi ci andiamo a guardare pure il manuale per vedere cos'altro si puo' fare. Citero' spesso i file di #include (colors.inc, textures.inc, etc) perche' contengono un sacco di roba gia' pronta e gia' tarata al millimetro, il che ci risparmiera' prove ed esperimenti (per esempio gia' possiamo definire oggetti di "vetro", "bronzo", "marmo", "legno", etc - chi non mastica l'inglese si procuri un dizionarietto perche' parlero' di "glass", "wood", etc). Dicevamo del primo esempio: #include "colors.inc" camera { location <0, 2, -3> look_at <0, 1, 2> } sphere { <0, 1, 2>, 2 texture { Bronze_Texture } } light_source { <2, 4, -3> color White } I primi esperimenti che possiamo fare su questo sono... - spostare la telecamera piu' dietro: vedremo la pallina piu' piccola, provate a mettere la telecamera a <0, 2, -10> ( unita' in meno sull'asse delle z, cioe' telecamera spostata dal video verso di noi): vedrete la pallina con il raggio ridotto a circa meta'; con un po' di conti (che per motivi di sonno non vi faccio :-) scopriremo che e' esattamente quello che doveva succedere perche' abbiamo aumentato la distanza della telecamera dal centro della sfera (prima era 5, cioe' da -3 a +2, dopo era 12, cioe' da -10 a +2, dunque circa il doppio della distanza diventa circa meta' della grandezza); - colorazione (intendo "texture") - al posto della Bronze_Texture, proviamo qualcuna a caso, tipo:White_Marble un marmo bianco/grigio/nero delizioso Pinkalabaster pare un marmo sgrigiato, come i piani di lavoro delle cucine DMFWood1 legno scuro, che delizia Glass vetro, trasparente ma non troppo Brass_Valley metallico con sfumature, pare materia grezza Per motivi di fretta ho provato solo Brass_Valley e Glass. Nel primo caso ci appare una specie di pianetoide con una colorazione difficile da descrivere (intorno al marmoreo), che dal modo in cui riflette la luce ci sembra metallico. Nel secondo caso, sorpresa! Il vetro lascia passare la luce e si vedono solo gli "spicchi" di luce sopra e sotto (e' l'effetto "phong" che vedremo nei prossimi articoli); per il resto e' vetro purissimo, dunque odiosamente trasparente, la luce si perde nel vuoto e rimane un po' nei due punti (agli antipodi tra loro) e sul bordo esterno in alto a destra. Provare per credere! - cambiare la posizione o il colore della luce. Questo non lo faccio perche' sto morendo di sonno, fatelo voi come "compiti per casa":-) Nel prossimo articolo scrivo un altro messaggio, stavolta parleremo di altri oggetti perche' di sfere ne abbiamo le tasche piene :-)