texture parte seconda

di Marco Leoncini, in WPF,

ieri ho iniziato a parlare a grandi linee delle Texture e delle coordinate necessarie per applicarle correttamente.
ritornando a casa, ho avuto modo di rivedere il codice che avevo preparato per l'esempio, e renderelo più facile da capire e più facile da spiegare per me.
per Texture intendo un immagine, opportunamente ripetuta ed affiancata, al fine di ricoprire e conferire così alla geometria "nuda" un look più realistico ed accattivante.
per gli esempi utilizzeremo una semplice textute, con un griglia con lo 0.0 nell'origine del sistema di coordinate GDI.

e una semplice geometria di cui ho evidenziato le coordinate dei vertici e il contorno, l'asse verde rappresenta le coordinate positive X, quello rosso la Y e quello nero la Z

imposteremo la proprietà TextureCoordinates="0,0 1,0 1,1 0,1" corrispondenti ad una coppia di coordinate U V (una per ogni vertice), con valori compresi tra 0 e 1, valori inferiori o maggiori portano alla creazioni da particolari effetti tutti da sperimentare :).

nel disegno, ho leggermente scostato la Bitmap per rendere più chiaro, che attribuendo al vertice A le coordinate UV pari a 0,0 faremo coincidere l'origine del sistema di coordinate GDI in quel punto, in senzo orario (importante) attribuiamo le coordinate hai rimaneti vertici B 1,0 C 1,1 e D 0,1
il codice XAML completo è il seguente:

<GeometryModel3D>
<GeometryModel3D.Material>
<BrushMaterial>
<BrushMaterial.Brush>
<ImageBrush
Viewport="0,0,0.5,1"
ViewportUnits="Absolute"
TileMode="None"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ImageSource="griglia.gif"> 
</ImageBrush>
</BrushMaterial.Brush>
</BrushMaterial>
</GeometryModel3D.Material>
<GeometryModel3D.Geometry>
<MeshGeometry3D 
Positions="0.5,0,0.5 3,0,0.5 3,0,2 0.5,0,2" 
Normals="0,1,0 0,1,0 0,1,0 0,1,0 " 
TriangleIndices="0 1 2 2 3 0 " 
TextureCoordinates="0,0 1,0 1,1 0,1"/>
</GeometryModel3D.Geometry>
</GeometryModel3D>

ecco il risultato:

nel pennello abbiamo impostato la proprietà TileMode a None, evitanto così che la bitmap fosse ripetuta per comprire l'intera superficie della geometria, cambiando valore della proprietà (un enumeratore) e impostando valori differenti per Viewpor (la dimensione del Tile rispetto al "contenitore"):

Viewport="0,0,0.5,1"
ViewportUnits="Absolute"
TileMode="Tile"


Viewport="0,0,0.5,0.5"
ViewportUnits="Absolute"
TileMode="Tile"


Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese