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

Nekoliko pitanja u vezi DirectX-a!

[es] :: 3D programiranje :: Nekoliko pitanja u vezi DirectX-a!

[ Pregleda: 3102 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milas

Član broj: 29337
Poruke: 588
*.ptt.yu.



+3 Profil

icon Nekoliko pitanja u vezi DirectX-a!16.08.2004. u 19:09 - pre 238 meseci
Imao bih nekoliko pocetnickih pitanja u vezi DirectX-a.

1. Ako je definisan Vertex ovako:

Code:
 struct Vertex
{
    float  _x,  _y,  _z;
    float _nx, _ny, _nz;
    static const DWORD FVF;
};


i onda ako popunim Vertex Buffer sa ovim verteksima
Code:
// popuni bafere sa podacima kocke
Vertex* verteksi;
VertexBuffer->Lock(0, 0, (void**) &verteksi, 0);
    // prednja strana
    verteksi[0] = Vertex(-1.0f, 0.0f, -1.0f, 0.0f, 0.707f, -0.707f);
    verteksi[1] = Vertex( 0.0f, 1.0f, 0.0f, 0.0f, 0.707f, -0.707f);
...

i onda kada zelim da crtam to radim ovako:
Code:
Device->SetStreamSource(0, VB, 0, sizeof(Vertex));
Device->SetFVF(Vertex::FVF);
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);

Pitanje je kako DrawPrimitive zna sta se nalazi u strukturi Vertex i kako to koristi. Inace ovaj primer je iz knjige i nije mi bas jasno zasto koristi ove promenljive _nx, _ny i _nz, a to koristi za crtanje jednostavne piramide ?

2. Zasto je ovo
Code:
D3DX_PI * 0.5f
jednako 90 stepeni ?

3. Da li neko moze malo bolje mi objasni funkcije D3DXMatrixLookAtLH i D3DXMatrixPerspectiveFovLH?


 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

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

ICQ: 208550327


+14 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!16.08.2004. u 20:20 - pre 238 meseci
Cao.

1)
Zasto je D3DX_PI * 0.5f ?
Hmm... Matematika ti nije bas najbolja strana.
D3DX_PI je PI u matematici.
PI = 3.141592653589 itd Predstavlja ugao u radijanima.
Ugao u stepenima se dobija kada se ugao u radijanima pomnozi sa 180 i podeli sa 3.1415... to jest sa PI.
Znaci PI*180/PI = 180 stepeni a PI*0.5f je u stvari (PI/2)*180/PI = 90 stepeni!

2)
D3DXMatrixLookAtLH:

D3DXMATRIX* D3DXMatrixLookAtLH(
D3DXMATRIX* pOut,
const D3DXVECTOR3* pEye,
const D3DXVECTOR3* pAt,
const D3DXVECTOR3* pUp
);

pOut - "popunjava" rezultujucu matricu
pEye - Vektor koji definise gde se nalazi "oko" kamere
pAt - Vektor koji definise gde je uperen vektor kamere
pUp - Vektor koji je obicno (0, 1, 0) i oznacava orijentaciju kamere. (0, 1, 0) znaci da je gornji deo kamere po y osi. Nisam bas nesto ovo objasnio ali neka te ovaj parametar ne zamara i neka bude (0, 1, 0).

D3DXMatrixPerspectiveFovLH:

D3DXMATRIX* D3DXMatrixPerspectiveFovLH(
D3DXMATRIX* pOut,
float fovy,
float aspect,
float zn,
float zf
);


Ako si neki put radio u 3D MAX-u video si opcije za kameru 30mm, 50mm, 200mm itd. E to je FOV ( koji je parametar ove f-je - fovy). FOV - Field of View i on je u radijanima ( oni su ti sada malo jasniji ).

aspect je odnos izmedju duzine i sirine ekrana. NPR bioskopski ekran je 16:9 i njegov aspect je 16/9 = 1.777. Ekran rezolucije 800*600: njegov aspect je 800/600 = 1.333. Experimentisi sa ovim vrednostima i dobijaces suzenje slike ili tako nesto.

zn - near clip-plane:
zf - far clip-plane:

Scena ima svoju dubinu relativno na kameru. Sve sto je izmedju vrednosti zn i zf ce se renderovati. NPR: Napravis sferu i zadas koj koordinate (0, 0, 100). Ako stavis zn = 1.0f i zf = 200 sfera je u opsegu kamere i bice renderovana ali ako stavis za poziciju sfere (0, 0, 1000) ona se nece renderovati. Pogledaj malo SDK help ako ti knjiga ne pomaze mada bi mogao da mi kazes gde si nabavio knjigu.

Pixel po pixel ... Out of memory!

EOF
 
Odgovor na temu

milas

Član broj: 29337
Poruke: 588
*.ptt.yu.



+3 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!16.08.2004. u 21:14 - pre 238 meseci
Hvala na odgovoru!
Knjiga je "DirectX 9 - programiranje grafike i igara", pisac je Tom Miler, a izdavac Kompjuter biblioteka Cacak. Inace radi se o Managed DicrectX-u u jeziku C#.
 
Odgovor na temu

Nothingman

Član broj: 31375
Poruke: 308
*.teol.net



+112 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!16.08.2004. u 21:37 - pre 238 meseci
Citat:

Pitanje je kako DrawPrimitive zna sta se nalazi u strukturi Vertex i kako to koristi. Inace ovaj primer je iz knjige i nije mi bas jasno zasto koristi ove promenljive _nx, _ny i _nz, a to koristi za crtanje jednostavne piramide ?


Nisam nikada radio u D3D ali pretpostavljam da nx,ny i nz prestavljaju normalni vektor(svaki vertex bi trebao da ima po jedan) koji se koristi kod osvetljenja. Covek koji je pisao knjigu verovatno od pocetka zeli da u strukturi vertex obezbedi prostor za te normale jer zna da ce mu kasnije trebati.
Koliko vidim iz koda koji si postavio ti si pre poziva funkcije pozvao i neku funkciju setstreamsource u kojoj si kao parametar predao velicinu strukture vertex. Znaci sada posto directx zna kolika je velicina te strukture vise nema nikakvih problema da funkcija drawprimitive nju koristi za renderovanje. Posto si joj rekao da zelis da crta trouglove ona sada jednostavno moze da iz svake pojedinacne strukture u listi koristi recimo prvih 12 bajta za x,y i z a onda da inkrementira pointer za velicinu te strukture i tako dodje do sledecih x,y,i z(novih 12 bajta)...
Posto ja nemam pojma o DX ovo sto sam gore napisao uopste ne mora da bude tako ali samo sam ti hteo dati ideju kako je to moguce implementirati.

Q: Are there really any systems where
void main() doesn't work?
A: It has been reported that programs using void main() can crash.
Q: The book I've been using, _C Programing for the Compleat Idiot_,
always uses void main().
A: Perhaps its author counts himself among the target audience.
 
Odgovor na temu

Nothingman

Član broj: 31375
Poruke: 308
*.teol.net



+112 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!16.08.2004. u 21:48 - pre 238 meseci
Citat:

Knjiga je "DirectX 9 - programiranje grafike i igara", pisac je Tom Miler, a izdavac Kompjuter biblioteka Cacak. Inace radi se o Managed DicrectX-u u jeziku C#.


Kakva je knjiga? Jel se dobije cd sa nekim demoima na njoj? Koliko kosta? I za kraj kako si ti u LA dosao do nje? :)

Q: Are there really any systems where
void main() doesn't work?
A: It has been reported that programs using void main() can crash.
Q: The book I've been using, _C Programing for the Compleat Idiot_,
always uses void main().
A: Perhaps its author counts himself among the target audience.
 
Odgovor na temu

bokash

Član broj: 658
Poruke: 35
*.beotel.net

Sajt: bokash.co.yu


Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!16.08.2004. u 22:52 - pre 238 meseci

Citat:
Pitanje je kako DrawPrimitive zna sta se nalazi u strukturi Vertex i kako to koristi. Inace ovaj primer je iz knjige i nije mi bas jasno zasto koristi ove promenljive _nx, _ny i _nz, a to koristi za crtanje jednostavne piramide ?

Citat:
1. Ako je definisan Vertex ovako:

Code:
struct Vertex
{
float _x, _y, _z;
float _nx, _ny, _nz;
static const DWORD FVF;
};


Treba jos i ovo:
const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL;
Onda zna iz deklaracije velicinu vertexa, sta sadrzi i redosled.
A normali su za lightning i sl.
pozdrav od Borisa
 
Odgovor na temu

milas

Član broj: 29337
Poruke: 588
*.ptt.yu.



+3 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!17.08.2004. u 01:50 - pre 238 meseci
L.A. - Lazarevac, S&CG. Knjiga kosta 1000 din. i ima dosta demoa, kao i DirectX update summer 2003 SDK. Knjiga je vrlo dobra za pocetnike jer je i namenjena za nekoga ko samo zna osnove programiranja! Ali, ponovo kazem tu se radi sa Managed DirectX-om i u jeziku C#.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.microsoft.com



+18 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!17.08.2004. u 02:40 - pre 238 meseci
Hehe, ovo je vec drugi put. Obicno je L.A. = Los Angeles, a LA = Lazarevac. Razlika u tim tackicama je ogromna. :)

Normale moras da imas da bi strane piramide imale razlicitu boju, jer ako nema normale, onda bi cela piramida bila iste boje. To ne zvuci toliko lose, ali to u stvari znaci da bi svi pikseli u piramidi imali istu boju, i ne bi video onu ivicu piramide koja je okrenuta ka tebi. Drugim recima, u vecini slucajeva bi video jedan deformisan trougao.
 
Odgovor na temu

milas

Član broj: 29337
Poruke: 588
*.smin.sezampro.yu.



+3 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!23.08.2004. u 21:12 - pre 238 meseci
Imao bih jos nekoliko pocetnickih pitanja u vezi DirectX-a:

1. Sta znace sledece stvari:
Code:

IDirect3DDevice9->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
IDirect3DDevice9->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
IDirect3DDevice9->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);


i
Code:

IDirect3DDevice9->SetRenderState(D3DRS_ZWRITEENABLE, false);
IDirect3DDevice9->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
IDirect3DDevice9->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
IDirect3DDevice9->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
IDirect3DDevice9->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL);
IDirect3DDevice9->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_KEEP);
IDirect3DDevice9->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);

2. Kada je svetlo ovako usmereno:
Code:
D3DXVECTOR3 smerSvetla(0.707f, -0.707f, 0.707f);

gde se ono tacno nalazi u xyz prostoru?

3. Sta rade funkcije:

Code:
D3DXMatrixShadow
i
Code:
D3DXMatrixReflect


i sta predstavlja
Code:
D3DXPLANE
struktura ?

4. Sta znaci ova pozicija kamere (gde gleda):

Code:
D3DXVECTOR3 pozicija( cosf(ugao) * radius, 3.0f, sinf(ugao) * radius );
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
*.pandemicstudios.com

Sajt: https://github.com/bkarad..


+11 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!23.08.2004. u 21:33 - pre 238 meseci
Citat:
milas:
2. Kada je svetlo ovako usmereno:
Code:
D3DXVECTOR3 smerSvetla(0.707f, -0.707f, 0.707f);

gde se ono tacno nalazi u xyz prostoru?


Nigde. Ne možeš na osnovu smera da odrediš poziciju. Ako se radi o directional light onda ti je dovoljno da znaš samo smer jer pozicija nije bitna za izračunavanje osvetljenja. Podrazumeva se da je svetlo beskonačno udaljeno od objekta i zraci su paralelni.

Citat:
milas:
4. Sta znaci ova pozicija kamere (gde gleda):

Code:
D3DXVECTOR3 pozicija( cosf(ugao) * radius, 3.0f, sinf(ugao) * radius );


Opet nigde, jer ne možeš na osnovu jedne pozicije da odrediš smer. Moraš imati dve pozicije, tj. poziciju kamere (Eye) i poziciju gde kamera gleda (LookAt).

Trebao bi malo da prelistaš knjigu iz matematike. ;)

Odgovore na sva ostala pitanja možeš naći u DirectX SDK Help-u. directx9_c.chm fajl koji dobijaš uz DirectX 9 SDK.

Branimir

 
Odgovor na temu

milas

Član broj: 29337
Poruke: 588
*.smin.sezampro.yu.



+3 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!23.08.2004. u 22:18 - pre 238 meseci
Da li moze neko da mi odgovori na pitanja?!

Napomena: u ni jednom pitanju nisam trazio da mi neko kaze da to svetlo ili kamera gleda u 3.4,5.7,4.5 tacku, nego samo princip rada tih funkcija!!!
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
*.pandemicstudios.com

Sajt: https://github.com/bkarad..


+11 Profil

icon Re: Nekoliko pitanja u vezi DirectX-a!23.08.2004. u 22:57 - pre 238 meseci
Citat:

Napomena: u ni jednom pitanju nisam trazio da mi neko kaze da to svetlo ili kamera gleda u 3.4,5.7,4.5 tacku, nego samo princip rada tih funkcija!!!


Pitao si:

Citat:

2. Kada je svetlo ovako usmereno: gde se ono tacno nalazi u xyz prostoru?
4. Sta znaci ova pozicija kamere (gde gleda):


U Srpskom jeziku kada pitaš "gde se tačno nalazi" to znači da te interesuje pozicija, a kada pitaš "gde gleda" onda to znači da te interesuje smer. Odgovore na pitanja koja si postavio si dobio. Pitanja 2. i 4. nemaju veze sa funkcijama (osim sinf i cosf). U oba slučaja se radi o konstruktoru D3DXVECTOR3 klase.

Odgovori na ostala pitanja bi bili suvišni pored detaljne MSDN dokumentacije. RTFM!

Branimir

 
Odgovor na temu

[es] :: 3D programiranje :: Nekoliko pitanja u vezi DirectX-a!

[ Pregleda: 3102 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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