.[ ČeskéHry.cz ].
VertexShader v DirectX

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 8. srpen 2009, 17:50:51    Předmět: VertexShader v DirectX Odpovědět s citátem

Ahoj,
snažím se dojít na to jak používat VertexShader v DirectX ale asi (určitě) dělám něco špatně a nemůžu dojít na to co. Myslím, že nejlépe pomůže část kodu...

Assembler VertexShaderu - měl by jen prohodit souřadnice, nic složitého (mimochodem zkoušel jsem pár zdrojáků již napsaných):

kód:
vs.1.0
dcl_position v0
mov r1.x, v0.y
mov r1.y, v0.z
mov r1.z, - v0.x
mov r1.w, v0.w
mov oPos, r1


Vytvoření VertexShaderu (s tím není problém, funguje správně):

kód:
IDirect3D9 * D3D;
IDirect3DDevice9 * D3DD;
ID3DXMesh * D3DM;
IDirect3DVertexShader9 * D3DVS;
ID3DXBuffer * D3DB;
...
D3DXAssembleShaderFromFile( "vertexshader.vs", 0, 0, 0, &D3DB, 0 );
D3DD -> CreateVertexShader( ( DWORD * ) D3DB, &D3DVS );
...



Použití při renderování:

kód:
...
D3DD -> BeginScene();
D3DD -> SetVertexShader( D3DVS );
D3DM -> DrawSubset( 0 );
D3DD -> EndScene();
D3DD -> Present( 0, 0, 0, 0 );
...



Klasicky kreslím mesh konvičky, problém je v tom že mi ve scéně onen VertexShader prostě nic nedělá a nedaří se mi dojít na to proč.

Díky za rady...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 8. srpen 2009, 19:07:30    Předmět: Odpovědět s citátem

2 veci:

1. Kontroluj si error code KAZDEJ dx funkcie a oddebuguj si to, urcite budes prekvapeny
2. Zapni si Debug verziu DLLiek directu v Control Panel a nastav si vyssiu intenzitu vystupov
3. Sedi ti format (FVF) ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 8. srpen 2009, 19:42:54    Předmět: Odpovědět s citátem

VladR napsal:

1. Kontroluj si error code KAZDEJ dx funkcie a oddebuguj si to, urcite budes prekvapeny

Chyby kontroluju, právě proto, že jsem při běhu programu nepřišl na žádnou chybu a kvůli přehlednosti jsem to sem vložil bez debugu...

VladR napsal:

2. Zapni si Debug verziu DLLiek directu v Control Panel a nastav si vyssiu intenzitu vystupov

Tohle jsem nějak nepobral, nemohl bys mi to líp popsat? Smile

VladR napsal:

3. Sedi ti format (FVF) ?

Vzhledem k tomu, že zkouším VertexShader poprve tak jsem chtěl aby to bylo co nejjednodušší, takže reneruju konvičku z D3DXCreateTeapot, která má co já vím (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE, ale FVF v tomto případě nenastavuju), nedošel jsem ale na to jaký vliv by to na můj problém mělo?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 9. srpen 2009, 01:27:54    Předmět: Odpovědět s citátem

Ach jo, konečně jsem na to došel, měls pravdu, i když to zrovna moc nechápu. Very Happy

Testoval jsem D3DXAssembleShaderFromFile a pak SetVertexShader a protože tyto dvě metody byly úspěšně provedeny, neřešil jsem metodu CreateVertexShader (která je volána "mezi nimi").

Nechápu sice jak může CreateVertexShader vyhodit chybu a následně SetVertexShader chybu nevyhodit (i když to nefunguje)...

Problém byl tady:
kód:
D3DD -> CreateVertexShader( ( DWORD * ) D3DB, &D3DVS ); //chyba
D3DD -> CreateVertexShader( ( DWORD * ) D3DB -> GetBufferPointer(), &D3DVS ); //správně


Díky za radu Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Khaj



Založen: 16. 01. 2008
Příspěvky: 49

PříspěvekZaslal: 9. srpen 2009, 08:45:59    Předmět: Odpovědět s citátem

Ahoj, brzy pochopíš Wink
I. D3DD -> CreateVertexShader(..., &D3DVS );
Pokud nastane chyba, tak DSDVS se nastaví na NULL.

II. Volání
D3DD -> CreateVertexShader( ..., NULL);//s parametrem NULL
je samozřejmě správně a vypne shadery a zapne FFP.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 9. srpen 2009, 12:25:36    Předmět: Odpovědět s citátem

Ahoj, už je mi to jasný (předpokládal jsem, že když CreateVertexShader neprojde tak nezmění D3DVS (který jsem měl nedefinovaný, takže by mi to pěkně vyhodilo error Very Happy )).

Aspoň už jsem se poučil a už vím, že musím debugovat fakt všechny metody. Smile

Já jsem původně i špatně pochopil princip VertexShaderu, ale s mojí angličtinou aní není čemu se divit... Myslel jsem si, že na vertexy se nejdřív provede transformace ve Fixed Pipeline a pak až pomocí VertexShaderu upravím vertexy. Nikde jsem se nedočetl opak a tak jsem na to přišel až když jsem to zkoušel...

Pokud to teda dobře chápu, jakmile zapnu před vykreslováním VertexShader tak všechno co nastavím ve Fixed Pipeline (SetTransform) prostě nebude na vykreslované vrcholy použito a půjde to pouze přes VertexShader?

Díky Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 9. srpen 2009, 13:25:14    Předmět: Odpovědět s citátem

Z FFP ti zostane predovsetkym nastavenie render states.

Akakolvek praca s vertexami (transform/lighing) uz ale bude robena cez ten Shader.

Inak, preco sa chces trapit s DX8 a assemblerovskymi shadermi ? Dnes uz mozes pohodlne pracovat s HLSL, na ktorych debugovanie/editovanie su podstatne lepsie tooly.

Ale ked uz sa trapis s ASM shdermi, tak si aspon stiahni nejaku starsiu verziu NVSDK browseru, kde si mozes postupne prechadzat vsetky efekty a pozerat ako to robili.

Rozhodne si stiahni tieto PDFka, ktore su poslednymi dobrymi kniznymi verziami zaoberajucimi sa ASM shadermi : http://tog.acm.org/resources/shaderx/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna