Jump to content

Visualizzare una singola porzione di una texture (script)


Vittorio Bing
 Share

You are about to reply to a thread that has been inactive for 4606 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Salve. Sto ralizzando una specie di "proiettore" che visualizza una serie di immagini presi da una texture suddivisa in righe e colonne. Ammettiamo di avere 9 immagini nella texture suddivise in 3 immagini per riga e quindi 3 righe. Riesco a visualizzare correttamente, impostando da script Ripetizioni per faccia orizzontale e verticale, una singola immagine ben dimensionata sulla faccia di un cubo, ma non riesco a impostare l'offset orizzontale e verticale per visualizzare la "cella" che desidero. In pratica mi servirebbero due funzioni:

 

float offsetH( integer numImg, integer numRow, integer numCol )



float offsetV( integer numImg, integer numRow, integer numCol )

 

L'offset va da -1 a 1, quindi ha un range di 2 unità. Ho tentato di risolvere con una semplice proporzione, ma mi sfugge qualcosa, non riesco a centrare la cella nella faccia del cubo

Link to comment
Share on other sites

  • 1 month later...

Ciao :matte-motes-bashful-cute-2:

Prima osservazione

Quando  una texture viene applicata ad una faccia essa si  "stira", se è il  caso, in modo da distribuirsi completamente su  tutta la faccia. Questo  può determinare delle deformazioni della texture quando  ad esempio  si  applica una texture di  forma rettangolare su una faccia  quadrata o  viceversa.
Ovviamente si  interviene di  solito modificando il numero  di  ripetizioni e/o l'offset
Perciò in primo luogo  io  adatterei  la texture alle proporzioni  del prim su cui  va applicata.
Perciò nel tuo  caso se organizzi le texture in una matrice di  3x3, ciascuna di  uguali  dimensioni e di  forma ad esempio quadrata, anche la faccia  del prim su cui applicarla dovrebbe essere quadrata. Tutto  questo  per evitare complicazioni

Seconda osservazione
Poichè come visto in precedenza sullla faccia viene mostrata tutta tutta la texture nel tuo  caso  dovrai agire sulle ripetizioni orizzontali e verticali  in modo che l'immagine venga divisa nel  numero  delle parti che la compongono. Nel tuo caso  le ripetizioni sia orizzontali  che verticali dovranno  essere 0.333

Terza osservazione
C'è un errore logico nelle funzioni  che hai  messo come esempio
float offsetH( integer numImg, integer numRow, integer numCol )
Con " integer numImg" vorresti richiamere una delle 9 immagini  della matrice, ma ciò  è impossibile perchè la immagine è unica anche se formata da 9 parti diverse.
A mio avviso,  l'unica cosa che puoi  usare è: llOffsetTexture(float horizontal, float vertical, integer side) dove ovviamente "side" è il  numero della faccia su cui vuoi  applicare la texture (se è per tutte, puoi  mettere ALL SIDES)
I valori float per l'offset, come correttamente hai  indicato vanno  da -1 a 1
Tieni  presente che con offest 0,0 e  con le ripetizioni orizzontali  e verticali  pari a 0.333, la parte di immagine che vedi  è  quella "centrale" vale a dire quella che sta nella seconda riga e seconda colonna della tua matrice 3x3

Con offset orizzontale pari a 0.333 sposti nel verso  positivo (verso destra) l'immagine di 1/3 e ovviamente -0.333 nel verso  negativo
Osserva che 0.667 è  equivalente a -0.333 e analogamente -0.667 equivale come spostamento a 0.333

Lo  stesso  vale per l'offset verticale dove il verso  positivo è verso l'alto.

 

Domanda: se devi  cambiare le texture su  un prim perchè  semplicemente non carichi 9  texture diverse da proiettare in sequenza?

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 4606 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...