[lnkForumImage]
Download FREE Software.

Confronta i prezzi di migliaia di prodotti.
News Forum Italiano
 Home | Login | Registrati | Ricerca 


 

Forums >

it.comp.giochi.sviluppo

Aggiornamento frustum

bros

25/01/2011 10:14:35

Salve, per questioni di efficienza vorrei sapere se c'è un modo per
aggiornare il view frustum della camera ad ogni frame anziché ricrearlo
ogni volta che muovo la visuale.
Infatti, ad ogni frame devo ricalcolare la matrice View*Projection e
creare le normali dei sei piani del frustum da questa matrice. Credo sia
uno spreco dal punto di vista computazionale ricreare tutto ogni volta.
Sarebbe meglio creare il frustum solo la prima volta (nel primo frame) e
poi aggiornarlo solamente (con pochi passi) in basse alle
rotazioni/traslazioni della visuale. C'è un modo per farlo?

--

questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsla... segnala gli abusi ad abuse@newsland.it


3 Risposte

Gianpaolo Ingegneri

25/01/2011 14:59:33

0


"Toty_" <bros@mailinator.com> ha scritto nel messaggio
news:ihm6vt$d07$1@news.newsland.it...
> Salve, per questioni di efficienza vorrei sapere se c'è un modo per
> aggiornare il view frustum della camera ad ogni frame anziché ricrearlo
> ogni volta che muovo la visuale.
> Infatti, ad ogni frame devo ricalcolare la matrice View*Projection e
> creare le normali dei sei piani del frustum da questa matrice. Credo sia
> uno spreco dal punto di vista computazionale ricreare tutto ogni volta.
> Sarebbe meglio creare il frustum solo la prima volta (nel primo frame) e
> poi aggiornarlo solamente (con pochi passi) in basse alle
> rotazioni/traslazioni della visuale. C'è un modo per farlo?

Il problema non esiste. Puoi creare la matrice Projection solo una volta
eppoi aggiornare le trasformazioni della visuale facendo il prodotto
View*Projection, ma non devi mica creare Projection ogni volta che cambi
View visto che sono due matrici distinte e separate.


bros

25/01/2011 17:24:52

0

Gianpaolo Ingegneri ha scritto:

> "Toty_" <bros@mailinator.com> ha scritto nel messaggio
> news:ihm6vt$d07$1@news.newsland.it...
> > Salve, per questioni di efficienza vorrei sapere se c'è un modo per
> > aggiornare il view frustum della camera ad ogni frame anziché ricrearlo
> > ogni volta che muovo la visuale.
> > Infatti, ad ogni frame devo ricalcolare la matrice View*Projection e
> > creare le normali dei sei piani del frustum da questa matrice. Credo sia
> > uno spreco dal punto di vista computazionale ricreare tutto ogni volta.
> > Sarebbe meglio creare il frustum solo la prima volta (nel primo frame) e
> > poi aggiornarlo solamente (con pochi passi) in basse alle
> > rotazioni/traslazioni della visuale. C'è un modo per farlo?

> Il problema non esiste. Puoi creare la matrice Projection solo una volta
> eppoi aggiornare le trasformazioni della visuale facendo il prodotto
> View*Projection, ma non devi mica creare Projection ogni volta che cambi
> View visto che sono due matrici distinte e separate.

Scusa, mi sono spiegato male. Io faccio proprio View*Projection (come hai
detto tu, e non tocco le due singole matrici) ad ogni frame, però mi
calcolo anche le normali dei 6 piani (mi servono per il culling) usando le
informazioni della matrice View*Projection. Chiedevo se c'era un modo più
efficiente per aggiornare le normali dei piani (ad ogni frame) e, magari,
non dover moltiplicare ogni volta View con Projection.

--

questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsla... segnala gli abusi ad abuse@newsland.it


Gianpaolo Ingegneri

25/01/2011 19:14:34

0


> Scusa, mi sono spiegato male. Io faccio proprio View*Projection (come hai
> detto tu, e non tocco le due singole matrici) ad ogni frame, però mi
> calcolo anche le normali dei 6 piani (mi servono per il culling) usando le
> informazioni della matrice View*Projection. Chiedevo se c'era un modo più
> efficiente per aggiornare le normali dei piani (ad ogni frame) e, magari,
> non dover moltiplicare ogni volta View con Projection.
>

Visto che non ho capito bene l'esigenza, ragiono in modo molto astratto. Se
questi ipotetici 6 piani variano con il variare della matrice
View*Projection allora devi calcolare ogni volta le normali. La
moltiplicazione tra matrici devi farla solo 1 volta per frame, il che non mi
sembra poi così dispendioso. Se la tua esigenza è nello specifico la
trasformazione di una normale facendo uso di una matrice allora devi fare
così:

//m44 è la matrice di trasformazione

CMatrix3X m33 = CMatrix3X(m44.val[0], m44.val[1], m44.val[2],
m44.val[4], m44.val[5], m44.val[6],
m44.val[8], m44.val[9], m44.val[10]);

transformedNormal = m33 * normal;

Come puoi vedere in questo modo ti risparmi il calcolo di tutte le normali
dei rispettivi poligoni trasformati. Ovviamente la matrice m33 non la
calcoli per ogni piano, ma solo una volta per frame, così come tutte le
altre matrici. Anche se non dovessi aver centrato il tuo problema nello
specifico, considera che non esistono altri strumenti matematici per
lavorare con poligoni e normali, spero di averti aiutato.