Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 19. březen 2008, 15:33:58 Předmět: Effect v directX |
|
|
Předem všechny zdravím a doufám že mě za mé zvědavé dotazy nezlinčujete
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 |
|
Návrat nahoru |
|
|
Deluxe
Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 19. březen 2008, 17:52:07 Předmět: |
|
|
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 19. březen 2008, 18:02:30 Předmět: |
|
|
Takže s DX a effecty jsem dělal (CreateEffect, effect.Start atd.), konkrétně od jednoduchých vibrací až po použití odporu Ale vzhledem k povaze dotazu to nejspíš nebude to samé _________________
|
|
Návrat nahoru |
|
|
Quiark
Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 19. březen 2008, 20:12:23 Předmět: |
|
|
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 _________________ Mám strach |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 19. březen 2008, 20:26:02 Předmět: |
|
|
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 19. březen 2008, 20:58:56 Předmět: |
|
|
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 |
Jj, to vím, a naopak mě překvapilo, že se stejný pojem používá i jinde A závadějící bych to nenazval, spíš podněcující a inspirativní otázkou _________________
|
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 19. březen 2008, 21:04:45 Předmět: |
|
|
Já bych dal Memovi několikadenní podněcující a inspirativní ban za offtopic |
|
Návrat nahoru |
|
|
am!go
Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 19. březen 2008, 21:31:11 Předmět: |
|
|
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 |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 21. březen 2008, 18:33:09 Předmět: |
|
|
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 |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 21. březen 2008, 18:55:08 Předmět: |
|
|
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 |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 3. duben 2008, 13:53:50 Předmět: |
|
|
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 3. duben 2008, 14:11:54 Předmět: |
|
|
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í _________________
|
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 3. duben 2008, 20:50:51 Předmět: |
|
|
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 |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 6. duben 2008, 12:04:33 Předmět: |
|
|
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 6. duben 2008, 14:04:35 Předmět: |
|
|
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 |
|
|
|