Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Koriscenje Vertex Arrays

[es] :: 3D programiranje :: Koriscenje Vertex Arrays

[ Pregleda: 1390 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
217.26.79.*

ICQ: 208550327


+14 Profil

icon Koriscenje Vertex Arrays11.08.2006. u 13:07 - pre 215 meseci
Veciti problem sa ovim vertex array-om.

Pomocu nekog exportera izvezem podatke o vertexima, normalama, tex coords, tangentama, ... i podatke o njihovim indexima.

Problem je sto se indexi vertexa ne slazu sa indexima normala, tex coordinata itd.

Zeleo bih da u array ubacim sve ove podatke i pomocu glDrawElements "izbacim" mesh.

Ovo je moguce uraditi na taj nacin sto cu pakovati vertexe, normale, ... pomocu face informacija i tako mogu dobiti identicne indexe za sve podatke.

Ali, postoji problem. Sve lepo radi ali sada array sadrzi podatke o dupliranim vertexima ( brojVertexa = brojNormala = ... = broj faceova*3 )

Takodje, ako hocu da manipulisem vertexima ( skinning, morphing ), moram da radim sa originalnim vertexima, pa da ih opet pakujem i predam vertex array.

Ima li elegantnijeg resenja?


EOF
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
195.252.90.*



Profil

icon Re: Koriscenje Vertex Arrays12.08.2006. u 10:15 - pre 215 meseci
Nazalost, mora bas tako kao sto si uradio, mada ti racunica br_vertexa = 3*br_trouglova nije tacna. Ako je geometrija "normalna" onda ce ti se pojaviti dupliranje vertexa samo na "shavovima" UV mapinga. U svakom slucaju model ce zauzimati 10-30% vise u odnosu na trentno stanje.

Kreiraj 2 "buffera". U jednom cuvaj vertexe (kao struktire pos, norm, col, texcoord, tangenta, binormala, ...) a u drugom baferu cuvaj niz trouglova, tj. indexe vertexa.
Code:

za svaki trougao T
  za svaki vertex V trougla T
  {
    sakupi sve atribute V (pos, norm, col, texcoord, ....) u novi vertex NV
    dodaj NV u niz, ali poroveri da li se takav vertex vec nalazi u nizu. ako se nalazi uzmi njegov index, a ako se ne nalazi, samo ga dodaj i vrati index
    ubaci index u novi trougao NT
  }
  ubaci NT u niz novih trouglova


Kada ovako "preradis" model mozes da ga iscrtas samo jednim pozivom glDrawElements. Inace, ovo nije idealan nacin jer bi trebalo voditi racuna o vertex cache-u pa ispremestati nke vertexe tako da se maksimalno iskoristi GPU vertex cache, ali to je vec druga tematika.

 
Odgovor na temu

[es] :: 3D programiranje :: Koriscenje Vertex Arrays

[ Pregleda: 1390 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.