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

Pristup i menjanje mesh-ovog vertex buffer-a

[es] :: 3D programiranje :: Pristup i menjanje mesh-ovog vertex buffer-a

[ Pregleda: 2738 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 00:46 - pre 236 meseci
Mesh se ucitava iz fajla (taj deo mi je sasvim jasan), zatim uzimam vertex buffer funkcijom GetVertexBuffer, ali problem je u tome sto nikad ne znam u kom formatu se nalaze vertexi u baferu (neka kombinacija FVF flagova). Meni je bitno samo da mogu da menjam x,y i z koordinatu svakog vertexa. Ostale podatke ne zelim da menjam. Kako bih to mogao da uradim? Kada znam koji je format vertexa onda mi je lako...
Code:

CUSTOM_FVF* Data;

VertexBuffer->Lock( 0, 0, &Data )

i onda neka petlja...
{
    Data.X = 5;
    Data.Y = 6;
    Data.Z = 7;
    ++Data;
}

VertexBuffer->Unlock();

Kako ovo uraditi kad ne znam format u vertex bufferu?
 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 01:11 - pre 236 meseci
Nisam baš ukapirao. Kako koristiš vertexe za koje ne znaš šta sve sadrže? Treba FVFormat da prilagodiš svojim potrebama, zar ne? Ako ti trebaju 3 kordinate, stavićeš D3DFVF_XYZ, ako ti ne trebaju texture stavićeš D3DFVF_TEX0, ako radiš sa svetlima pa ti trebaju normale, ubaciš i D3DFVF_NORMAL.

Sam određuješ kombinaciju FVF flagova na osnovu potreba svoje aplikacije, zar ne?
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 02:00 - pre 236 meseci
Problem je sto kada se mesh ucita u vertex bufferu moze biti i podaci o texturama, o boji, normale, itd..., ali nista od toga ne mora uvek da bude. Sigurno je samo da ce biti X, Y i Z koordinate. Posto ja necu praviti fajlove koje cu ucitavati ne znam kako ce biti snimljeni i u kom formatu ce se naci podaci u bufferu kada ih DX3D ucita.
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
*.vdial.verat.net.

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 11:02 - pre 236 meseci
Ako pravis neku jednostavnu transformaciju, najlakse je da to uradis preko vertex shader-a. Mada onda moras da vodis racuna i o ostatku transformacija (WVP).
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 13:01 - pre 236 meseci
Ono sto radim je sledece:

1. ucitam mesh iz x fajla
2. izmenjam pozicije vertexa (dodam noise, wave ili neki drugi efekat)
3. snimim mesh u x fajl sa izmenjanim pozicijama vertexa (normale mi za sad nisu bitne)

Znaci u programu necu nista iscrtavati... bice samo skala koja pokazuje dokle je stiglo sa obradom podataka.

Ne znam da li vertex shader moze da mi pomogne za ovo?
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.vdial.verat.net.

ICQ: 208550327


+14 Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a28.11.2004. u 00:39 - pre 236 meseci
Lepo je znati binarnu aritmetiku...

(Umesto *pData dalje u tekstu koristicu CUSTOM_FVF)

// ne znam tacno kako su definisane ove vrednosti u datoteci DirectX, ali i ovo ce da posluzi

D3DFVF_XYZ = 00000001
D3DFVF_NORMAL = 00000010

1) CUSTOM_FVF |= D3DFVF_XYZ
1) CUSTOM_FVF |= D3DFVF_NORMAL

Ovaj operator "|" postavlja neke bitove na jedinice.

na pocetku CUSTOM_FVF je bio npr: 00000000 ( neka bude 8-bitni )
Posle operacije 1) on je npr. postavljen na 00000001 , a posle 2) na 00000010 ( pretpostavljamo da je vrednost D3DFVF_XYZ = 00000001, a D3DFVF_NORMAL = 00000010 )

( Savetujem ti da pogledas malo binarnu aritmetiku AND, OR, NOT, ... )

E sada, ono sto tebi treba...

Hocemo da ispitamo da li CUSTOM_FVF sadrzi informacije o normalama, tj. da li je drugi bit ukljucen.

Koristimo operator & (AND iliti "i")

Da vidimo prvo binarno:

if( 00000011 & 00000010 ) da li je drugi bit postavljen na 1
-> CUSTOM_FVF sadrzi podatke o normalama!!!

Vazan je ovaj operator "&" jer on sluzi za proveru stanja dok "|" sluzi za postavljanje bitova na jedinicu ( ovde necu da ulazim u to kako rade AND, OR operatori. Vidi negde na Google ako nista drugo ... )

U DirectX biblioteci je D3DFVF_NORMAL vec definisana konstanta koja ima neku vrednost slicnu ovoj binarnoj ( mogu biti i hex. brojevi ).

Znaci, ne moras da vodis racuna o nulama i jedinicama vec su tu konstante da olaksaju stvar.

Na kraju, resenje tvog problema koje uzima u obzir sve ovo do sada receno:

BOOL bHasNormals

--------------------------
if (CUSTOM_FVF & D3DFVF_NORMAL)
bHasNormals = TRUE;

Isto je i za koordinate i ostalo.

Ovo je veoma mocan pristup baratanja sa stanjima programa.
NPR. mogli su da koncipiraju DirectX datoteku i ovako:

BOOL bNormals
BOOL bVertices
...

pa da proveravas na ovaj nacin

if(CUSTOM_FVF->bNormals) bla bla

Ali ova metoda sa setovanjem bitova je mocnija.
Ne znam koliko sa bio jasan ( jesam malo iskomplikovao ) ali vazno je da znas ovo na kraju za dalji rad tvog programa...
EOF
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a28.11.2004. u 02:30 - pre 236 meseci
Sreca moja pa znam binarnu aritmetiku... bez toga bi bilo tesko praviti programcice u asembleru :)
U tom slucaju bih trebao da napravim poseban struct za svaku mogucnost i da u odnosu na osnovu tipa FVF koji su u baferu izaberem odgovarajuci struct sto mi bas i nije neko zglavno resenje.
Meni nije problem da pronadjem u kom formatu su podaci u baferu i da odredim velicinu svakog podatka nego da odredim poziciju svakog sledeceg elementa u memoriji kada Lock-ujem bufer. Hteo bih da podesim prvih 3*sizeof(float) bajtova za jedan element i onda da predjem na sladeci. Mozda bi mi bilo bolje da ovo pitanje postavim u C/C++ forumu. Ipak oni bolje znaju kako se radi sa C++.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a28.11.2004. u 03:30 - pre 236 meseci
Wow!!! :)
Pomogli su mi na C++ forumu. Sad je potrebno da imam samo jedan struct koji sadrzi x,y i z koordinate (float), velicinu elementa za odredjeni FVF i da dobijem pointer kada Lock-ujem bufer. Pointer cast-ujem u pointer na struct koji sadrzi x,y i z, podesim te podatke, zatim pointer cast-ujem u *char i pomerim ga za velicinu elementa i onda izpocetka.
 
Odgovor na temu

[es] :: 3D programiranje :: Pristup i menjanje mesh-ovog vertex buffer-a

[ Pregleda: 2738 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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