sabato 11 luglio 2009

Finestre di Scelta

Un altro passo nella costruzione dell'interfaccia del nuovo Now3D è l'implementazione delle finestre di scelta, utili all'aggiunta di varie tipologie di entità (es: oggetti, materiali, luci, ecc...).

Shader e Materiali
Le prime finestre di scelta implementate sono quelle per gli Shader e per i Materiali.
La logica di utilizzo di queste due finestre è molto simile. L'area superiore serve a scegliere tra le librerie di materiali (o shader) caricati in memoria, l'area inferiore serve invece a selezionare e caricare un file di tipo materiale (o shader) precedentemente salvato.
Mentre la finestra di scelta dei Materiali mostra tutti i materiali disponibili, la finestra di scelta degli shader mostra solamente gli shader compatibili con la tipologia di connessione richiesta. Quindi se provassimo ad aggiungere uno shader ad una connessione di input di tipo "colore", avremmo la scelta esclusiva tra shader che hanno tra le connessioni di output una connessione di tipo "colore".


Scelta MaterialiScelta Shader

giovedì 9 luglio 2009

File Materiali

Nuovo formato File
Eccomi di nuovo a parlare di XML. Sono passati quasi tre mesi dal mio ultimo post, ma non sono stato certamente rimasto con le mani in mano...anzi!
Volevo portare il formato xml anche nel salvataggio dei materiali, ma la difficoltà nell'applicare lo standard xml (ho sinceramente odiato l'xmlreader!), ha fatto allungare i tempi.
Però, come dico di solito in questi casi: "Ho vinto io!".
Ho dovuto rivedere leggermente il formato dei file introducendo nuovi namespace, una struttura "classes" per dichiarare i namespace utilizzati all'interno del file e una struttura standard "element" al cui interno incapsulare il vero e proprio xml da salvare.


Struttura Standard N3DXML


File Materiali
Così, una volta sciolti gli ultimi "nodi", ho potuto implementare il formato per il salvataggio dei materiali, compreso delle strutture utili a definire i BRDF e le Mappe.
E come per gli shader, grazie agli schemi associati ad ognuna di queste strutture ho potuto definire in automatico tutte le regole di caricamento del file.