.[ ČeskéHry.cz ].
Effect v directX
Jdi na stránku 1, 2  Další
 
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
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 19. březen 2008, 15:33:58    Předmět: Effect v directX Odpovědět s citátem

Předem všechny zdravím a doufám že mě za mé zvědavé dotazy nezlinčujete Laughing

Tak nyní jsem se opět dostal na rozcestí. Narazil jsem totiž v Directx na používání effectu. Jelikož nevím zda je to jediná možnots, zeptám se Vás.
Jde mi nyní o to, že bych chtěl na výškovou mapu vykreslit různé textury (dle výšky). Začal jsem tedy pátrat jak na to a narazil jsem na použití effectu. Nyní by mě zajímalo, zda je dobré používat effecty např pro nějaký game engine, proč ano, proč ne a jaké jsou vaše osobní zkušenosti s effecty.


ps: pokud víte o nějakém podrobném popisu co je to effect, jak ho napsat, klidně ho sem postněte, rád se na to podívám Idea
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 19. březen 2008, 17:52:07    Předmět: Odpovědět s citátem

Effect je v DirectX vlastne prostredek, jak pouzit shadery. Shader je maly program, ktery se spousti v GPU a nejak zpracovava data co do nej posles. Zklada se ze dvou casti Vertex a Pixel shader, vertex shader operuje nad vrcholy tj. muzes pomoci nej napriklad mnenit pozici vertexu, moznosti je samozrejmne mnohem vic. Pixel Shader operuje nad kazdym pixelem tj. urcuje jeho barvu, prichazi do nej data z Vertex Shaderu. V zakladnim DX pouzivas FFP tj. nastavis material, osvetleni a vypocet na graficke karte je porad stejny, ale pomoci shaderu si ten vypocet definujes sam. Shadery se deli do nekolika verzi, kazda karta muze mit jinou verzi, nebo nemusi Shadery podporovat vubec, ikdys v dnesni dobje je PS a VS 2.0 zkoro vsude. Proto kdys je chces pouzivat musis kontrolovat jestli danou verzi dana karta podporuje.

Takhle chapu shadery a effect v DX ja, je mozny ze nektery veci jsou spatne, nebo neuplne.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 19. březen 2008, 18:02:30    Předmět: Odpovědět s citátem

Takže s DX a effecty jsem dělal (CreateEffect, effect.Start atd.), konkrétně od jednoduchých vibrací až po použití odporu Wink Ale vzhledem k povaze dotazu to nejspíš nebude to samé Smile
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



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

PříspěvekZaslal: 19. březen 2008, 20:12:23    Předmět: Odpovědět s citátem

Mem: To bylo určitě v DirectInput force feedback. Teda ty to určitě víš, ale ostatní to vědět nemusí a z té tvé zavádějící odpovědi by mohli být zmateni Smile
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 19. březen 2008, 20:26:02    Předmět: Odpovědět s citátem

Co napsal Deluxe je pravda, ale jeho pohled je úzce zaměřen jen na použití shaderů. Přitom shadery lze použít i bez efektů a na druhou stranu je také možné používat efekty a přitom pracovat jen s fixed-function pipeline (tzn. nepoužívat shadery) - to prostým přiřazením NULLu. V těle passu je dále možné přiřadit nejen do VertexShader a PixelShader, ale také do všech ostatních render states (např. ZTest, ZFunction, AlphaBlendEnable atd.), což z efektů činí silný nástroj.

K Tvým otázkám:
- Použití efektu není jediná možnost, je to jen taková nadstavba (ostatně jako vše z D3DX).
- Použití efektů z vlastní zkušenosti doporučuji.
- Velmi podrobný popis efektů (snad i včetně tutorialu) najdeš klasicky v DX SDK.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 19. březen 2008, 20:58:56    Předmět: Odpovědět s citátem

Quiark napsal:
Mem: To bylo určitě v DirectInput force feedback. Teda ty to určitě víš, ale ostatní to vědět nemusí a z té tvé zavádějící odpovědi by mohli být zmateni Smile

Jj, to vím, a naopak mě překvapilo, že se stejný pojem používá i jinde Smile A závadějící bych to nenazval, spíš podněcující a inspirativní otázkou Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 19. březen 2008, 21:04:45    Předmět: Odpovědět s citátem

Já bych dal Memovi několikadenní podněcující a inspirativní ban za offtopic Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 19. březen 2008, 21:31:11    Předmět: Odpovědět s citátem

Jeste bych k tomu doplnil, ze u efektu se da taky nastavit víc technik a passu. Ted me nenapada nic jinyho nez treba ze se model vykresli jednou normalne a podruhy na to jako wireframed. Takovejch veci se da jednoduse v efektu docilit. Nebo muzou ty techniky slouzit jako ruzny provedeni danyho efektu pro ruzne vykonny pc.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 21. březen 2008, 18:33:09    Předmět: Odpovědět s citátem

Tak a nyní dotaz trochu z jiné části...
Pokud si effect načtu a použijiho, co se děje s effectem, konkrétně myslím jeslti se také nějak debuguje, nebo pouze načte...?
A záleží v jakém jazyku je napsaný, koukám na nějaký vzorový a přijde mi to jako C++, mohu poté tento effect použít v projektu který je psaný v jiném jazyku??


předem díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 21. březen 2008, 18:55:08    Předmět: Odpovědět s citátem

Efekt v souboru existuje ve dvou variantách - buď ve formě zdrojáku nebo ve formě binárky (MS dodává překladač pro effect files a také je možné effect file přeložit (tj. vytvořit binárku) programově pomocí D3DX). Z výše uvedeného vyplývá, že záleží, jak máš efekt uložen. Pokud v binární formě, tak se prostě jen načte. Pokud ve formě zdrojáku, tak se musí nejprve přeložit.

Jinak effect files se píší pomocí syntaxe plně popsané v DX SDK - tam je popsáno i HLSL (vyšší programovací jazyk pro psaní shaderů) a shader assembler - to jsou dvě možnosti, v čem psát shadery (přičemž doporučuji použít HLSL). Syntaxe HLSL i effect file samotného je opravdu inspirována programovacím jazykem C. V jakém jazyce programuješ aplikaci využívající DirectX (a potažmo effect files) nemá na syntaxi effect files žádný vliv.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 3. duben 2008, 13:53:50    Předmět: Odpovědět s citátem

Tak nyní bych měl dotaz trochu z jiného soudku, ale dalo by se to přirovnat k effectum...

Pokud mám nějakou 3D scénu a v ní x objektů, jak bude potřeba nasatvit základní osvetlení aby objekty byli osvětlné jako ve skutečnosti? Zatím používám jedno světlo, to mi však neostětlí celý objekt a i když nastavím stín tam kam světlo nedopadá, mám tam na daném oběktu úplnou tmu (černo). Myslím si že by tato strana měla být alespoň zčísti osvětlená i když na ní přímo světlo nejde..

Napadá mě přidat těchto světel více, 6 pro osvětlení celého objektu, jen aby nikdy nebyl černý a poté přidat jedno poslední světlo, se kterým by se dalo pohybovat (něco jako slunce). Nevím však zda se osvětlení od jednotlivých světel sčítá a dza je tento postu správný.

Díky za rady


abych byl přesnější, nyní mám světlo nastavené takto:


kód:
        id = 0
        dev.Lights(id).Type = LightType.Directional
        dev.Lights(id).Direction = New Vector3(15, -7, 18)       ' směr světla
        dev.Lights(id).Diffuse = Color.FromArgb(255, 255, 187)    ' barva světla
        dev.Lights(id).Specular = Color.FromArgb(127, 127, 81)    ' nasvícené plochy
        dev.Lights(id).Ambient = Color.FromArgb(178, 178, 178)    ' stín (tam, kam nejde světlo)
        dev.Lights(id).Enabled = True


Naposledy upravil Juraj dne 3. duben 2008, 16:19:47, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 3. duben 2008, 14:11:54    Předmět: Odpovědět s citátem

Tak v první řadě by sis asi měl nastavit nějaký Ambient Light pro celou scénu, to je právě takové to rozptýlené světlo, které osvětluje trochu všechno. Pro konkrétní osvětlení objektů je pak několik typů světel, Directional, Point, Spot... najdeš určitě ukázky i tutoriály. Jinak kvůli počítání světel v reálném čase je zvyšování jejich počtu cesta do pekla, nevím, kolik zvládají dnešní grafické karty, ale kdysi si pamatuju, že třeba 8 světel s hw akcelerací bylo maximum, a obecně se ty světelné efekty řeší jinak (stejně tak to hw světlo ti samozřejmě nevrhne žádný stín ale musíš si ho vypočítat sám a je na tobě, jak ho aplikuješ - černým polygonem, zápisem do lightmapy, ...). Ale s 3D grafikou nedělám takže to jsou jen takové obecné kydy na úvod které snad někdo zpřesní Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 3. duben 2008, 20:50:51    Předmět: Odpovědět s citátem

Je to jak píše Mem. Pro začátek bych zkusil použít jedno directional světlo - má rovnoběžné paprsky stejně jako Slunce. Dále si všimni toho, že u materiálu i u světla můžeš nastavit několik barev - ambientní (všudypřítomné, prakticky se jedná o pouhé přičtení, tedy to, co požaduješ Ty, aby ses vyhnul absolutní tmě), difuzní, spekulární a emitované. V DX SDK najdeš detailní popis těchto typů světel a jejich podíl na celkovém osvětlení (včetně přesného výpočtu).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 6. duben 2008, 12:04:33    Předmět: Odpovědět s citátem

Tak nejsem si jist zda-li tato moje otázka přesně ysihuje tento topick ale nechce se mi zakládat další..

Asi každý zná nějakou strategii, nějak nevím jak by se v DirectX vyvtořila nějaká ta nabídka, panel, kde se dají zakládat příkazy jednotkám, kde uvidíme jejich náhled a popis... To se vše vykresluje pomocí obrázků, objektů? Nebo jsou na to nějaké jiné funkce..

díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 6. duben 2008, 14:04:35    Předmět: Odpovědět s citátem

Ano, kreslí se to normálně ručně, je sice možnost zobrazit třeba dialogy přes GDI, ale to není moc použitelné a vypadalo by to i hnusně, nehledě na různé rozlišení, kdy ty bys měl GUI nechat v nějaké relativní velikosti k obrazovce
_________________
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 1, 2  Další
Strana 1 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