.[ ČeskéHry.cz ].
D3D - 2D Světla pomocí ID3DXSprite ?
Jdi na stránku Předchozí  1, 2
 
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
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 15. květen 2009, 08:52:19    Předmět: Odpovědět s citátem

VladR napsal:
To je jasne, pokial to lockujes/unlockujes kazdy 1 frame.
To by bylo ještě v pohodě - on IMHO lockuje před každým vykreslením spritu Smile
Jinak konečně pěkný thread Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VladR



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

PříspěvekZaslal: 15. květen 2009, 08:54:59    Předmět: Odpovědět s citátem

Augi napsal:
VladR napsal:
To je jasne, pokial to lockujes/unlockujes kazdy 1 frame.
To by bylo ještě v pohodě - on IMHO lockuje před každým vykreslením spritu Smile
Uf, tak este len to by bol uplny masaker, ale je to dost pravdepodobne Smile

Augi napsal:

Jinak konečně pěkný thread Smile
jj, po dlhej dobe niekto, koho to ocividne bavi kodit gamesky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 15. květen 2009, 18:18:32    Předmět: Odpovědět s citátem

Augi:
Tak jsem vyzkoušel ten dynamický buffer, a hrál jsem si i s parametrem Flags u funkce Lock, no a zvýšil jsem fps tak o 100, ale stejně to je hodně pomalé oproti metodě DrawPrimitiveUP (kde mám o +300 fps více), protože ta se asi hodí více na časté vykreslovaní malého množství vertexů, u DrawPrimitive bych tipnul že to bude spíše dělané pro velké meshe apod.
Zkoušel jsem to i podle:
http://www.gamedev.net/reference/articles/article1946.asp

Jinak je pravda že jsem odemykal a zamykal ten vertex buffer pro každou textůru, protože nejenom že každou renderuji na jinou pozici ale každá má taky jiné rozměry... Taky mi to příjde trochu jako paradox, chci optimalizovat to renderovaní pomocí texture atlasu, takže se vyhnu častému volání SetTexture, ale zase musím odemykat a zamykat vertex buffer proto abych nastavit koordináty uv té textůry ?Smile

Ohledně výkonu, jsem jím trochu posedlý Smile Už v době kdy jsem kutil gamesy v GDI tak jsem psal funkce v assembleru spoledně s instrukční řadou MMX Smile v dnešní době to už asi nemá cenu, i když jsem nedávno psal i nějaký funkce pro instrukční řady SSE2 - 4, zejména pro rychlé kopírování a kryptovaní dat.

Augi, VladR, Ladis:
Tak mě napadlo, v jakém jazyce programujete hry ? Asi všichni tady jsou odkojení na C/C++ že ?Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 15. květen 2009, 19:07:14    Předmět: Odpovědět s citátem

tak vertex buffery su na to ze sa donich nasipe kopec dat a potom sa uz len rendruje. popripade sa tam sype po velkych datvkach.nie to menit po 4 vertexoch.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 15. květen 2009, 19:08:35    Předmět: Odpovědět s citátem

Jen malé zrychlení při přechodu od statického k dynamickému vykreslování jsem očekával. Pokud chceš dosáhnout vyššího výkonu, musíš se vyhnout tomu zamykání/odemykání vertex bufferu. Měl bys to udělat nějak tak, že si do vertex bufferu uložíš vertexy na nějaké normalizované pozici (třeba jakoby na čtverci o straně 1) a budeš s nima hýbat jen pomocí transformací. Ty se nastavují pomocí metody SetTransform: http://msdn.microsoft.com/en-us/library/bb174463(VS.85).aspx

Transformace se nastavuje zvlášť pro pozici vertexu a pro jednotlivé texturovací koordináty, viz http://msdn.microsoft.com/en-us/library/bb206269(VS.85).aspx

Ale ani tímto možná nedosáhneš maximální rychlosti. Pro maximální rychlost je třeba vykreslovat sprity po dávkách, tedy využít instancing (jak naznačuje nou). Ale postupně...nejdřív se nauč pořádně transformace Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 15. květen 2009, 19:56:03    Předmět: Odpovědět s citátem

No zas nema to cenu u takove hry komplikovat Wink. Je prece jedno, jestli ma 100 nebo 400 fps, kdyz i na tech 100 je to krasne hratelne (ale je dobre vedet pro pristi projekty o moznostech, to jo).

Augi napsal:
Takže jediné, co bych na Tvém místě udělal, by bylo to, že před vykreslením spritu bych otestoval, jestli jeho plocha nějak zasahuje do obrazovky. O nějaké ořezání půlky spritu se už myslím postará docela efektivně hardware sám při rasterizaci.

Presne tak, dnesni hw ti automaticky orezava polygony jen na viditelnou cast na obrazovce (a deje se tak v transformaci vrcholu, ne v rasterizaci polygonu). Pokud vim, tak jedna z poslednich grafik, ktera to nedelala (tj. resila to az v rastericaci), byl GF 4 MX - ten jeste prochazel u polygonu vsechny pixely - i mimo obrazovku - a testoval, zda dany pixel je videt (takze tam byl velky propad vykonu v zavislosti, o kolik pixelu polygon presahuje obrazovku).

Nouma napsal:
Tak mě napadlo, v jakém jazyce programujete hry? Asi všichni tady jsou odkojení na C/C++ že ? Smile

Podle projektu a okolnosti/prilezitosti. Drive vetsinou C, taky neco v C#, ted zas neco v C++. Jinak odkojen jsem na QBasicu, Pascalu a Delphi Wink.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 17. květen 2009, 19:06:25    Předmět: Odpovědět s citátem

Tak už jsem vykutil ty 2D světla a ty texturované obdelníky, dokonce mi narostl výkon když jsem zapnul ořezávání Smile

Chtěl jsem zkusit i ten instancing, celou dobu jsem se trápil s tím proč mi to nešlo, pak jsem zjistil že se vertexy rozlišují na ne/transformované a já používal právě tu druhou variantu, takže jakékoliv pokusy o SetTransform se neprojevily. (D3DFVF_XYZ / D3DFVF_XYZRHW)

Zajímalo by mě jak na 3D světla, chtěl bych třeba určitou část herní obrazovky více osvětlit.

Do formátu vertexu jsem přidal flag D3DFVF_SPECULAR, a upravil ten záznam o další barvu. Ta proměnná specular zřejmě znamená jaká barva se odrazí od toho vertexu když na něj dopadne světlo že ?Smile Hodnota 0 znamená že se odrazí barva toho světla ?

Ted by mě zajímalo jak vytvořit to světlo Smile
-Zapnul jsem si osvětlování -> SetRenderState(D3DRS_LIGHTING, 1);
-Nastavím si nějaký materiál ? SetMaterial(Material) ?
-Vytvořím si světlo?:

kód:
 
  light.Type:= D3DLIGHT_DIRECTIONAL;
  light.Diffuse.r:= 1.0;
  light.Diffuse.g:= 1.0;
  light.Diffuse.b:= 0.0;
  light.Ambient.r:= 1.0;

  vecDir:= D3DXVECTOR3(cos(Angle),0.0, sin(Angle));
  D3DXVec3Normalize(light.Direction, vecDir);
  light.Range:= 1000.0;


-Nastavím to světlo -> SetLight(0, light);
-Zapnu to světlo ->LightEnable(0, TRUE);

A nic všechno mi to bylo k ničemu protože žádné světlo nevidím Very Happy

Jinak ted trochu offtopic, chtěl jsem přidal nějaké zoomovaní do té 2D hry, povedlo se mi to zprovoznit, spíše by mě zajímalo jestli to dělám dobře protože se mi zdá že se ty textůry divně deformují...

kód:

D3DXMatrixOrthoOffCenterLH(matrix, Zoom, WindowWidth, WindowHeight, Zoom, 0, 1);
SetTransform(D3DTS_PROJECTION, matrix);


Proměnná zoom je hodnota o kterou se to má přiblížit, a pohybuje se od 0 do 200, kde vyšší hodnota celou scénu pixelizuje.


EDIT: Tak už se mi podařilo to osvětlovanání, zajímalo by mě alo proč mi to dělá tuto chybu:


[img=http://img269.imageshack.us/img269/2016/screenshot0o.th.png]


Kde se intenzita světla snižuje tak mi to dělá chybu s dlaždicemi (ty obdelníky jsou dlaždice)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
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
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
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