WPF e il 3D (sesta parte)

Indice degli articoli su WPF e il 3D

I pennelli di WPF

Per colorare un cubo di Rosso abbiamo assegnato al nostro modello 3D (creato in precedenza) il materiale DiffuseMaterial con la proprietà Brush impostata a Red tramite codice XAML.

DiffuseMaterialBrush

Così facendo dietro le quinte è stato utilizzato il pennello predefinito Brushes.Red che altro non è che un Brush (parola che in italiano si può tradurre letteralmente in pennello) di tipo SolidColorBrush (colore uniforme) con la proprietà Color impostata su Red. Avremmo potuto scrivere anche il seguente codice XAML per ottenere lo stesso risultato:

DiffuseMaterialSolidColorBrush

Scrivendo il codice in quest’ultima forma è possibile sostituire il tipo SolidColorBrush con qualsiasi pennello, vediamo quali WPF ci fornisce:

SolidColorBrush come abbiamo visto ci permette di colorare con un colore a tinta unita
LinearGradientBrush permette di colorare con sfumature lineari
ImageBrush permette di disegnare un’immagine
RadialGradientBrush permette di colorare con sfumature radiali
DrawingBrush permette di disegnare un disegno 2D (o un oggetto Drawing)
VisualBrush   permette di disegnare un oggetto visualizzabile (o un oggetto Visual)
I pennelli sono ordinati dal più al meno performante.

WPF è estremamente coerente e permette di utilizzare su oggetti sia 2D sia 3D tutti i pennelli.

Blend 
Tramite Expression Blend è possibile impostare visualmente qualsiasi pennello e vederne un anteprima applicata sull’oggetto anche se tridimensionale

 

Coloriamo oggetti 3D coi pennelli

L’uso di pennelli avanzati pone il problema di mappare eventuali immagini 2D (chiamate texture) sulle superfici tridimensionali, per risolverlo dobbiamo inserire delle coordinate chiamate TextureCoordinates nelle nostre geometrie.

Ad esempio il seguente pennello LinearGradientBrush genera un gradiente dal bianco al nero passando per il rosso:

LinearGradientBrush

Per colorare un cubo col gradiente di esempio oltre ad impostarlo come materiale (vedere I pennelli di WPF ad inizio articolo) dobbiamo provvedere a mappare ogni punto alle corrispondenti coordinate della texture che come possiamo notare utilizzano il sistema di riferimento 2D. La mappatura si concretizza tramite la proprietà TextureCoordinates della geometria MeshGeometry3D

texture TextureCoordinates

Il codice XAML per brevità è relativo alla sola faccia centrale del cubo

Print | posted on martedì 23 giugno 2009 02:43

Comments on this post

# re: WPF e il 3D (sesta parte)

Requesting Gravatar...
Bravo!! Complimenti per la chiarezza... spero scriverai altri articoli sull'argomento:)
Left by Francesco on lug 04, 2009 1:55

# re: WPF e il 3D (sesta parte)

Requesting Gravatar...
Mi sembra ci sia un errore nelle TextureCoordinates.. in base alla geometria immessa i valori per la prima faccia centrale dovrebbero essere "1,1 0.5,0.5 0,0 0.5,0.5"
Left by marco on nov 13, 2009 2:29

# re: WPF e il 3D (sesta parte)

Requesting Gravatar...
Ciao Marco, non vedo alcun errore, nell'esempio della faccia centrale viene creato un quadrato composto da 2 triangoli senza utilizzare indici ma ripetendo ove necessario ogni posizione. Ad ogni punto viene poi associata una coordinata di texture e per un totale di 6 posizioni devono esistere 6 coordinate di texture (naturalmente a punti uguali corrispondono coordinate di texture uguali).
L'immagine a sinistra del codice XAML riassume in modo visuale come vengono mappati i vari punti.
Se l'argomento non è chiaro se vuoi posso approfondire nel prossimo articolo le texture.
Left by Leonardo on nov 13, 2009 9:07

# WPF e il 3D (settima parte)

Requesting Gravatar...
WPF e il 3D (settima parte)
Left by Il blog di Leonardo on feb 19, 2010 5:32

Your comment:

 (will show your gravatar)
 
Please add 3 and 1 and type the answer here: