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: 908 | Odgovora: 7 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1401
82.208.201.*

ICQ: 246436949


Profil

icon Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 00:46

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?
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
27.11.2004. u 00:46 

Milos Stojanovic
Belgrade

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

ICQ: 282954730
Sajt: www.sietf.org


Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 01:11
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
♪♫♪
27.11.2004. u 01:11 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1401
82.208.201.*

ICQ: 246436949


Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 02:00
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.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
27.11.2004. u 02:00 

tosa

Moderator
Član broj: 1811
Poruke: 1247
*.vdial.verat.net.



Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 11:02
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).

Soylent green: over 6 billion served!
27.11.2004. u 11:02 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1401
82.208.201.*

ICQ: 246436949


Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a27.11.2004. u 13:01
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?
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
27.11.2004. u 13:01 

glorius
Damir Nikolic
Developer, Seavus D.O.O.
YU

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



Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a28.11.2004. u 00:39
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
28.11.2004. u 00:39 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1401
82.208.201.*

ICQ: 246436949


Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a28.11.2004. u 02:30
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++.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
28.11.2004. u 02:30 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1401
82.208.201.*

ICQ: 246436949


Profil

icon Re: Pristup i menjanje mesh-ovog vertex buffer-a28.11.2004. u 03:30
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.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
28.11.2004. u 03:30 

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

[ Pregleda: 908 | Odgovora: 7 ]

Postavi temu Odgovori

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