.[ ČeskéHry.cz ].
Load .x file

 
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
andy



Založen: 20. 09. 2007
Příspěvky: 54

PříspěvekZaslal: 20. září 2007, 13:01:59    Předmět: Load .x file Odpovědět s citátem

Mám problém s prekladom tohto riadku kódu vo funkcii nacitania suboru .x
g_pTexture = new IDirect3DTexture9*[g_NumMaterials];

Vypisuje mi to tuto chybu:
cannot allocate an object of type `IDirect3DTexture9'
because the following virtual functions are abstract:

Ide o to že mi nechce vytvoriť pole premenných IDirect3DTexture9. Pole materialov vytvorilo, len s texturami je problem. Neviete náhodov kde by mohol byť problem. dik
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 20. září 2007, 14:06:22    Předmět: Odpovědět s citátem

IDirect3DTexture je interface, což je abstraktní třída => nelze vytvořit její instanci pomocí IDirect3DTexture *t = new IDirect3DTexture(); Proto ani nejde udělat pole těchto objektů.

Ty potřebuješ pole ukazatelů na IDirect3DTexture, to půjde vytvořit bez problémů, a po jeho vytvoření si každý ukazatel nastavíš na nově vytvořenou instanci textury (a tu vytvoříš tak, jak se standardně v D3D textury vytvářejí).

Takže bys měl mít něco jako
kód:

IDirect3DTexture **pole = new IDirect3DTexture*[3];

for (int i .... ) {
 pole[i] = Direct3D vytvor texturu(...);
}

_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 20. září 2007, 14:58:13    Předmět: Odpovědět s citátem

Pro vytvoreni textury se pouziva metoda IDirect3DDevice9::CreateTexture, viz dokumentace nebo tutorialy v DX SDK.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
andy



Založen: 20. 09. 2007
Příspěvky: 54

PříspěvekZaslal: 21. září 2007, 14:32:52    Předmět: Odpovědět s citátem

Fajn dik na to by som asi neprisiel, kedže doteraz som vytvaral premenne textur iba s jednou hviezdickou
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
krkovicka



Založen: 24. 11. 2007
Příspěvky: 14

PříspěvekZaslal: 28. listopad 2007, 13:25:51    Předmět: vykresleni .x modelu pomoci shaderu Odpovědět s citátem

jak napovida titulek, mam nasledujici problem s vykreslenim modelu. Model je slozen radove ze stovek casti. na kazde casti muze byt natazena jina textura a material muze mit jine vlastnosti, ale nemusi. Napriklad listnaty strom se sklada z nekolika set listu a nekolika desitek casti kmene. Mam tedy stovky casti, dva druhy materialu a prislusne textury. A ted to co mne zajima:

- zatim to mam tak ze mam v shaderu jen texture,diffuse,ambient,specular a pred kazdou casti nastavim pomoci setvalue tyto parametry, nedoslo mi ale ze to prepisuju v pameti graficky karty a cely objekt se pak na konci vykresli s hodnotami parametru kterejma sem to prepsal naposled(vysledne strom je pak celej zelenej, vetne kmene), ve skutecnosti se to zrejme nevykresluje po prikazu drawsubset(), ale az na konci OnPaint()

- mam mit v shaderu jen texture,diffuse,ambient,specular a pro kazdou cast inicializovat novej shader? tj asi blbost co?

- mam to vykreslovat tak, ze napred seradim jednotlivy casti a nastavim do shaderu neco jako texture1, texture2, .., textureN, materialDiff1...N, materialAmb1..N, materialSpec1..N(pro vsechny druhy casti zvlast) a nasledne vykreslim pomoci jednoho shaderu vsechny casti. Tohle mne ted napadlo jako reseni, ale prijde mi to trochu krkolomny a nerad bych se doto poustel, pokud exituje elegantnejsi reseni.
jestli jsou moje dosavadni poznatky uplne mimo skutecnost, tak mne prosim opravte/poradte, diky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
krkovicka



Založen: 24. 11. 2007
Příspěvky: 14

PříspěvekZaslal: 28. listopad 2007, 13:32:21    Předmět: Odpovědět s citátem

jen doplnuji ze pouzivam Manged Dx9, C#, shader 2.0
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: 28. listopad 2007, 15:29:49    Předmět: Re: vykresleni .x modelu pomoci shaderu Odpovědět s citátem

krkovicka napsal:
- zatim to mam tak ze mam v shaderu jen texture,diffuse,ambient,specular a pred kazdou casti nastavim pomoci setvalue tyto parametry, nedoslo mi ale ze to prepisuju v pameti graficky karty a cely objekt se pak na konci vykresli s hodnotami parametru kterejma sem to prepsal naposled(vysledne strom je pak celej zelenej, vetne kmene), ve skutecnosti se to zrejme nevykresluje po prikazu drawsubset(), ale az na konci OnPaint()
Vykreslování pomocí efektů se dělává tak, že iteruješ pro všechny subsety v meshi a v každé této iteraci nastavíš parametry efektu (SetValue...) a provedeš vykreslení (typicky pomocí DrawSubset).

krkovicka napsal:
- mam mit v shaderu jen texture,diffuse,ambient,specular a pro kazdou cast inicializovat novej shader? tj asi blbost co?
To že máš v efektu jednotlivý textury je v pořádku, tak to má být. Nějak ale nevím, co myslíš tou inicializací Sad

krkovicka napsal:
- mam to vykreslovat tak, ze napred seradim jednotlivy casti a nastavim do shaderu neco jako texture1, texture2, .., textureN, materialDiff1...N, materialAmb1..N, materialSpec1..N(pro vsechny druhy casti zvlast) a nasledne vykreslim pomoci jednoho shaderu vsechny casti. Tohle mne ted napadlo jako reseni, ale prijde mi to trochu krkolomny a nerad bych se doto poustel, pokud exituje elegantnejsi reseni.
jestli jsou moje dosavadni poznatky uplne mimo skutecnost, tak mne prosim opravte/poradte, diky
Z hlediska efektivity by bylo lepší předgenerovat si ten mesh tak, aby měl co nejmíň subsetů, tj. sloučit subsety se stejnýma textura, materiálama atd. Následně pak provádíš vykreslování jak jsem psal výše, tj. pro každý subset začneš efekt, nastavíš parametry, pro každý pass efektu vykreslíš subset, ukončíš pass, ukončíš efekt.

Kostra kódu by vypadala teda nějak takhle:
kód:
foreach mesh
   foreach subset in mesh
      effect.Technique = subset.Material.Technique
      effect.Begin
      effect.SetValue(...)
      foreach pass in effect
         pass.Begin // effect.BeginPass(pass)
         subset.draw // mesh.DrawSubset(subset)
         pass.End // effect.EndPass
      effect.End

Z hlediska efektivity pak obecně těžko říct, podle čeho je nejlepší řadit (textury, efekty, ...) - o tom bylo napsáno hodně paperů. Mně se třeba kdysi osvědčilo na jednom projektu řadit podle textur, takže můžeš zkusit třeba to Wink Pak si musíš pamatovat, jakou texturu jsi nastavoval jako poslední a pokud je ta, kterou bys chtěl nastavit jako další, shodná s tou poslední uloženou, tak už tu texturu znova nenastavovat. Tj. udělat si takovou vlastní cache. Teď mě napadá, že tuhle cache je vhodný mít pro většinu parametrů, které se posílají do gr. karty. Akorát se pak musí vybrat vhodný způsob řazení, aby se tahle cache využila...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
krkovicka



Založen: 24. 11. 2007
Příspěvky: 14

PříspěvekZaslal: 28. listopad 2007, 15:39:58    Předmět: Odpovědět s citátem

super,
uz chapu to begin effect a pass. Slouceni meshu zni skvele, do toho jdu. diky za vycerpavajici odpoved
Razz
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