| Documentazione di Blender Volume I - Guida Utente: Ultima modifica 5 Settembre 2005 | ||
|---|---|---|
| Indietro | Capitolo 27. Il Sistema di Plugin di Blender | Avanti |
A partire da Blender v2.31
#include <plugin.h>
Ogni plugin di Blender dovrebbe includere questa file di intestazione, che contiene tutte le strutture e definizioni necessarie per lavorare in modo appropriato con Blender.
char name[]="Tiles";
Una stringa di caratteri contenente il nome del plugin, questo valore apparirà nel titolo della texture nella Pulsantiera della Texture.
#define NR_TYPES 2 char stnames[NR_TYPES][16]= {"Square", "Deformed"};
Ai plugin è consentito avere un sottotipo diverso per piccole variazioni dell'algoritmo - per esempio la texture di default della nebbia in Blender ha i sotto tipi "Default"e "Color".
NR_STYPES dovrebbe essere definito come il numero di sottotipi richiesti dal plugin, e si dovrebbe fornire un nome per ciascun sottotipo. Ogni plugin dovrebbe avere almeno 1 sottotipo col relativo nome.
VarStruct varstr[]= {...};
varstr contiene tutte le informazioni necessarie a Blender per mostrare i pulsanti per il plugin. I pulsanti per i plugin possono essere numerici per dati in ingresso o testo per i commenti o altre informazioni. I plugin sono limitati ad un massimo di 32 variabili.
Ciascuna voce della struttura VarStruct consiste in un tipo, un nome, l'informazione di un intervallo ed un 'tool tip'.
Il tipo definisce il tipo per ciascuna voce del pulsante, ed il modo di mostrare il pulsante. Per i pulsanti numerici tale valore dovrebbe essere una combinazione (OR) di INT o FLO per il formato del numero e NUM, NUMSLI, o TOG, per il tipo di pulsante. I pulsanti testo dovrebbero avere un tipo LABEL.
Il nome è quello che apparirà sul (o accanto al) pulsante. Il limite è 15 caratteri.
L'informazione dell'intervallo consiste di tre numeri a virgola mobile che definiscono i valori di default, del minimo ed il massimo del pulsante. Per pulsanti TOG il minimo è lo stato di premuto ed il massimo è lo stato di non-premuto.
Il 'tool tip' è una stringa che apparirà (se l'utente ha i 'tool tip' attivati) quando il mouse è sopra tale pulsante. Ha un limite di 80 caratteri, e se non utilizzato, dovrebbe essere una stringa NULLA ("").
typedef struct Cast {...};
La struttura Cast viene usata nella chiamata alla funzione doit, ed è un modo per semplificare l'accesso ai dati di ciascun plugin.
Cast dovrebbe contenere, nell'ordine, un intero o un float per ogni pulsante definito nella varstr, inclusi i pulsanti testo. Di solito questi dovrebbero avere lo stesso nome dei pulsanti per semplificare i riferimenti.
float result[8];
L'array result viene usato per passare informazioni e riceverle dal plugin. i valori di result sono mappati come segue:
Indice di Result | Significato | Intervallo |
result[0] | valore dell'Intensità [Intensity] | da 0.0 a 1.0 |
result[1] | valore del colore Rosso [Red] | da 0.0 a 1.0 |
result[2] | valore del colore Verde [Green] | da 0.0 a 1.0 |
result[3] | valore del colore Blu [Blue] | da 0.0 a 1.0 |
result[4] | valore del colore Alfa [Alpha] | da 0.0 a 1.0 |
result[5] | valore dello scostamento della normale X | da -1.0 a 1.0 |
result[6] | valore dello scostamento della normale Y | da -1.0 a 1.0 |
result[7] | valore dello scostamento della normale Z | da -1.0 a 1.0 |
Il plugin dovrebbe sempre restituire un valore di intensità. La restituzione dell'RGB o della normale sono facoltative e dovrebbero essere indicate dal flag di ritorno doit() "1" (RGB) o "2" (Normale).
Prima che venga chiamato il plugin, Blender include la normale del rendering attuale in result[5], result[6] e result[7].
float cfra
Il valore cfra viene impostato da Blender al valore attuale prima di qualsiasi passo del rendering. Tale valore è un numero di frame +/- .5 a seconda delle impostazioni del campo.
plugin_tex_doit prototype
La funzione plugin_tex_doit dovrebbe essere prototipizzata per essere utilizzata dalla funzione getinfo. Non è necessario cambiare questa linea.
plugin_tex_getversion
Questa funzione deve essere presente in ciascun plugin affinché sia caricato correttamente. Non la si dovrebbe cambiare.
plugin_but_changed
Questa funzione viene usata per passare le informazioni sui pulsanti dell'interfaccia che l'utente modifica. La maggior parte dei plugin non dovrebbe aver necessità di usare tale funzione, solo quando l'interfaccia consente all'utente di modificare qualche variabile che forza il plugin a rifare il calcolo (per esempio una tabella hash random ).
plugin_init
Se necessario i plugin possono utilizzare questa funzione per inizializzare i dati interni. NOTA: Questa funzione di init può essere chiamata più volte se viene copiato lo stesso plugin di texture. In questa funzione non inizializza i dati globali specifici di una singola istanza di plugin.
plugin_getinfo
Questa funzione viene chiamata per comunicare delle informazioni a Blender. Non dovrebbe essere necessario modificarla.
plugin_tex_doit
La funzione doit è responsabile della restituzione delle informazioni sul pixel richiesto a Blender.
Gli Argomenti
int stype
Questo è il numero del sottotipo selezionato, vedere le voci precedenti NR_TYPES e char stypes.
Cast *cast
La struttura Cast che contiene i dati del plugin, vedere la voce precedente Cast.
float *texvec
Questo è un puntatore a 3 float, che sono le coordinate per cui si deve restituire un valore della texture.
float *dxt float *dyt
Se questi puntatori sono non-NULL essi puntano a due vettori (due array di tre float) che definiscono la dimensione del valore della texture richiesto nello spazio del pixel. Essi sono non-NULL solo quando è attivato l'OSA, e vengono usati per calcolare l'antiscalettatura [anti aliasing] appropriata.
La funzione doit dovrebbe riempire l'array del risultato e restituire 0, 1, 2, o 3 a seconda di quali valori siano stati inseriti. La funzione doit dovrebbe sempre inserire un valore di intensità. Se la funzione inserisce il valore di un colore dovrebbe restituire 1, se la funzione inserisce il valore di una normale dovrebbe restituire 2, se la funzione inserisce tutto dovrebbe restituire 3.
Interazione tra Texture e Materiale
Blender è piuttosto diverso dalla maggior parte dei pacchetti 3D nella separazione logica tra texture e materiali. In Blender le texture sono oggetti che restituiscono certi valori, generatori di segnali infatti. I materiali controllano la mappatura delle texture negli oggetti, riguarda chi, quanto, in che modo, ecc. I plugin ben progettati dovrebbero includere solo le variabili che riguardano il segnale restituito non la sua mappatura. I pulsanti per controllare il dimensionamento, la gamma di valori, gli assi, ecc. è meglio includerli solo quando rendono la texture più facile da usare (nel caso del pulsante del dimensionamento nel plugin Tiles) o quando velocizzano il calcolo (i sottotipi Intensity/Color/Bump nel plugin Clouds2). Altrimenti la Pulsantiera del Materiale rende ridondanti tali pulsanti, e l'interfaccia diventa inutilmente complessa.