[lnkForumImage]
Download FREE Software.

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


 

Forums >

it.comp.giochi.sviluppo

Quadtree terreno

bros

22/12/2010 18:29:23

Ho applicato il quadtree ad un terreno mediante ricorsione. Il terreno ha
un vertex buffer (array contenente tutti i vertici del terreno) e un
indexbuffer (array contenente gli indici dell'array precedente, ogni tre
elementi formano un triangolo).
Ho aggiunto il frustum culling in modo da velocizzare il rendering ma ho
un problema: non so come renderizzare soltanto i nodi (blocchi di terreno
creati con il quadtree) visibili con UNA SOLA invocazione della funzione
(si chiama DrawIndexedPrimitives per chi conosce Directx). Non ci
sarebbero problemi se invocassi la funzione per ogni nodo ma non sarebbe
efficiente.

Il problema è che i blocchi di terreno visibili potrebbero non formare una
figura regolare, ecco un esempio:

********
****
****

Pensate agli asterischi come i blocchi di terreno visibili (visti
dall'alto, scusate ma non trovo altri modi per spiegarlo). Se i blocchi
visibili formassero sempre un quadrato o un rettangolo mi basterebbe
aggiungere un offset all'indexbuffer come parametro della funzione
DrawIndexedPrimitives ma nel caso che ho appena mostrato non è possibile
(a causa dell'ordine degli indici nell'index buffer: nel caso che ho
mostrato gli indici dell'indexbuffer non si troverebbero in zone contigue
nell'array...).

Grazie in anticipo.

--

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


3 Risposte

(Matteo Perenzoni)

24/12/2010 16:44:37

0

On 22 Dic, 19:29, b...@mailinator.com (Toty_) wrote:
> Ho applicato il quadtree ad un terreno mediante ricorsione. Il terreno ha
> un vertex buffer (array contenente tutti i vertici del terreno) e un
> indexbuffer (array contenente gli indici dell'array precedente, ogni tre
> elementi formano un triangolo).
> Ho aggiunto il frustum culling in modo da velocizzare il rendering ma ho
> un problema: non so come renderizzare soltanto i nodi (blocchi di terreno
> creati con il quadtree) visibili con UNA SOLA invocazione della funzione
> (si chiama DrawIndexedPrimitives per chi conosce Directx). Non ci
> sarebbero problemi se invocassi la funzione per ogni nodo ma non sarebbe
> efficiente.
>
> Il problema è che i blocchi di terreno visibili potrebbero non formare una
> figura regolare, ecco un esempio:
>
> ********
> ****
> ****
>
> Pensate agli asterischi come i blocchi di terreno visibili (visti
> dall'alto, scusate ma non trovo altri modi per spiegarlo). Se i blocchi
> visibili formassero sempre un quadrato o un rettangolo mi basterebbe
> aggiungere un offset all'indexbuffer come parametro della funzione
> DrawIndexedPrimitives ma nel caso che ho appena mostrato non è possibile
> (a causa dell'ordine degli indici nell'index buffer: nel caso che ho
> mostrato gli indici dell'indexbuffer non si troverebbero in zone contigue
> nell'array...).
>
> Grazie in anticipo.
>
> --
>
> questo articolo e` stato inviato via web dal servizio gratuitohttp://www.newsland.it/n... gli abusi ad ab...@newsland.it

Innanzitutto buone feste!

Poi, fossi in te preparerei un array di indici da riempire man mano
che percorro l'albero, e passerei quello alla fine della ricorsione.
(se ho capito la domanda!)
--
Matteo
http://fuzzware.alte...
"A man with a new idea is a crank until the idea succeds" - M. Twain

bros

26/12/2010 12:49:25

0

Matteo Perenzoni ha scritto:

> On 22 Dic, 19:29, b...@mailinator.com (Toty_) wrote:
> > Ho applicato il quadtree ad un terreno mediante ricorsione. Il terreno ha
> > un vertex buffer (array contenente tutti i vertici del terreno) e un
> > indexbuffer (array contenente gli indici dell'array precedente, ogni tre
> > elementi formano un triangolo).
> > Ho aggiunto il frustum culling in modo da velocizzare il rendering ma ho
> > un problema: non so come renderizzare soltanto i nodi (blocchi di terreno
> > creati con il quadtree) visibili con UNA SOLA invocazione della funzione
> > (si chiama DrawIndexedPrimitives per chi conosce Directx). Non ci
> > sarebbero problemi se invocassi la funzione per ogni nodo ma non sarebbe
> > efficiente.
> >
> > Il problema è che i blocchi di terreno visibili potrebbero non formare una
> > figura regolare, ecco un esempio:
> >
> > ********
> > ****
> > ****
> >
> > Pensate agli asterischi come i blocchi di terreno visibili (visti
> > dall'alto, scusate ma non trovo altri modi per spiegarlo). Se i blocchi
> > visibili formassero sempre un quadrato o un rettangolo mi basterebbe
> > aggiungere un offset all'indexbuffer come parametro della funzione
> > DrawIndexedPrimitives ma nel caso che ho appena mostrato non è possibile
> > (a causa dell'ordine degli indici nell'index buffer: nel caso che ho
> > mostrato gli indici dell'indexbuffer non si troverebbero in zone contigue
> > nell'array...).
> >
> > Grazie in anticipo.
> >
> > --
> >
> > questo articolo e` stato inviato via web dal servizio
gratuitohttp://www.newsland.it/n... gli abusi ad ab...@newsland.it

> Innanzitutto buone feste!

> Poi, fossi in te preparerei un array di indici da riempire man mano
> che percorro l'albero, e passerei quello alla fine della ricorsione.
> (se ho capito la domanda!)
> --
> Matteo
> http://fuzzware.alte...
> "A man with a new idea is a crank until the idea succeds" - M. Twain

Buone feste anche a te e grazie per avermi risposto!

Mi chiedevo se la ricorsione fosse l'unico modo per percorrere l'albero.
L'ho usata all'inizio per creare l'intero albero ma per percorrerlo non ci
sono altri metodi? Forse mi sbaglio, ma visto che devo percorrere l'albero
ad ogni fotogramma, la ricorsione non è poco efficiente?

--

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


(Matteo Perenzoni)

27/12/2010 20:44:40

0

On 26 Dic, 13:49, b...@mailinator.com (Toty_) wrote:
> Mi chiedevo se la ricorsione fosse l'unico modo per percorrere l'albero.
> L'ho usata all'inizio per creare l'intero albero ma per percorrerlo non ci
> sono altri metodi? Forse mi sbaglio, ma visto che devo percorrere l'albero
> ad ogni fotogramma, la ricorsione non poco efficiente?

No, la ricorsione va benissimo: usi solo un po' di stack ma se sfrutti
bene i passaggi per riferimento o per puntatore è efficiente. Con un
po' di impegno dovresti riuscire ad implementarla anche con un while,
ma la cosa si complica grandemente per tenere il conto di dove sei.
Ovviamente, se vuoi sfruttare a pieno il quadtree devi accumulare i
triangoli da renderizzare in un array (pre-creato e di dimensione
sufficiente) e poi fare il rendering tutto di un colpo.
--
Matteo
http://fuzzware.alte...
"A man with a new idea is a crank until the idea succeds" - M. Twain