Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 13. srpen 2007, 09:30:54 Předmět: DirectX, oddělení vertexů, normál a coordinátů |
|
|
Zdravím,
dělám engine v directx i opengl bez předchozích znalostí directx a narazil jsem na věc, která mě dosti udivila. Opravdu nelze v directx nastavit zvlášť pointer na vrcholy, normály a texturové coordináty? Jinak jak je to s používáním funkce DrawIndexedPrimitiveUP, někde jsem četl že by se moc používat neměla, ale zdroj byl dosti pochybný.
KlapauciusK |
|
Návrat nahoru |
|
 |
Lando
Založen: 29. 07. 2007 Příspěvky: 33 Bydliště: Cestice
|
Zaslal: 13. srpen 2007, 10:13:06 Předmět: |
|
|
myslim ze jde pouzit vice datovych streamu, kde v jednom jsou pozice, v druhem normaly atd. ale nikdy jsem to nezkousel.
DrawPrimitiveUP se da pouzivat uplne normalne. Jeji nevyhoda spociva v tom, ze data o vrcholech se pri vykreslovani berou ze systemove pameti -> prenaseji se na grafickou kartu a to zpomaluje vykreslovani |
|
Návrat nahoru |
|
 |
Weny Sky

Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 13. srpen 2007, 10:25:44 Předmět: |
|
|
Zkus se jeste zamyslet jestli opravdu potrebujes ukazatele na vrcholy, texturove koordinaty .... Jestli to co potrebujes udelat nejde resit nejak uplne jinak, elegantneji a hlavne min narocneji |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 13. srpen 2007, 10:40:24 Předmět: |
|
|
Ukazatel na vrcholy potřebuji kvůli animacím. Navíc engine který dělám bude zároveň pro DirectX a zároveň pro OpenGL, potřebuji aby vykreslování souřadnic bylo jednotné. Pokud máš nápad na elegantnější řešení tak ho rád uvítám. Nemám v tom moc zkušeností. |
|
Návrat nahoru |
|
 |
MePHyst0
Založen: 28. 07. 2007 Příspěvky: 85 Bydliště: SVK/CZK
|
Zaslal: 13. srpen 2007, 10:42:03 Předmět: |
|
|
samozrejme ze to ide, je to ale trosku zlozitejsie, zdaleka to neni take trivialne nadherne ako v opengl. v skratke musis si spravit vertex declaration, v tomto si pri kazdom elemente(pozicia,tex coord,farba,whatever) definujes stream z ktoreho sa data beru a offset do tohto streamu. ak si si vsimol tak pri device->setstreasoource mas index streamu, to je ten index na ktory sa odkazujes vo vertex declaration. v priaxi to vyzera tak ze si spravis buffery zvlast pre kazdy element a cez vertex declaration to pozliepas,a potom sa mozu prist veci ako zarovnanie na vertex cache liny,kompresia elementov a pod. |
|
Návrat nahoru |
|
 |
Weny Sky

Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 13. srpen 2007, 11:00:03 Předmět: |
|
|
klapauciusk napsal: |
Pokud máš nápad na elegantnější řešení tak ho rád uvítám. |
Mozna se pletu, ale resenim by snad mohl byt vertex shader, ne? |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 13. srpen 2007, 11:20:10 Předmět: |
|
|
Se shaderama jsem zatím nedělal, chceš říc že bych všechny data posílal přímo do vertex shader:) To mě nenapadlo. Díky. To bude asi nejlepší řešení. |
|
Návrat nahoru |
|
 |
vassa
Založen: 15. 08. 2007 Příspěvky: 7 Bydliště: Kolín
|
Zaslal: 15. srpen 2007, 08:13:36 Předmět: |
|
|
No jestli chces aby tvuj Engine při vykreslovani běhal rychle použival bych Vertex Buffry, a z nich to vykresloval. Můžeš je sice vytvářet a plnit během vykreslování ale to kapku spožďuje, ale na druhou stranu jde o to kolik objektů budes muset maximálně animovat. Vertex buffer se plní pomocí ukazatele na pole s vertexama. A jestli myslíž tvoj animaci tak že pouze budeš měnit polohu nebo rotovat, dělal bych to přes shadery, pouze v posilání různejch matic. Ale asi používáš jinej druh animace ale nevim jakej takže zatim nevim ... |
|
Návrat nahoru |
|
 |
vassa
Založen: 15. 08. 2007 Příspěvky: 7 Bydliště: Kolín
|
Zaslal: 15. srpen 2007, 08:22:23 Předmět: |
|
|
A co se týče těch odělenejch koordinátů, postupně bych si pro každý tvoje pole koordinátů (poloha, texturová souřadnice ...) vytvořil jeden Vertex buffer, ve vertex declaration přes vertex element bych popsal strukturu posilanejch dat, jednotlivejm částem bych přiřadil streamy. Před vykreslováním bych do jednotlivejch streamu přes SetStreamSource nastavim danej Vertex buffer a vykresloval, ale asi pres shadery nevim jestli to jde jinak. Jestli používáš indexy pro vykreslování tak ještě musis udělat Index Buffer. Nevim kolik Direct maximálně povoluje streamů.
Jestliže bys to udělal tak jak jsem to popsal tak bys vždycky znova plnil Vertex buffer s pozicema bodů a ostatní nemusíš znova plnit protože se nemění, ale to je jasný  |
|
Návrat nahoru |
|
 |
|