.[ ČeskéHry.cz ].
Alpha Blending, Bump-mapping

 
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
SUK



Založen: 14. 11. 2007
Příspěvky: 93
Bydliště: /dev/null

PříspěvekZaslal: 12. srpen 2008, 16:35:33    Předmět: Alpha Blending, Bump-mapping Odpovědět s citátem

Zdravim, tak zase jdu otravovat Smile
Tentokrat dva dotazy, oboje jsem googlil vskutku dlouho, prepisoval jsem i z c++ - ale vzdy jen to, co jsem tak nejak chapal/tusil co to muze delat.

Zacnu tim alpha blendingem - chtel jsem puvodne jenom point sprity co by mely otaznicek a zbytek byl pruhlednej. Nakonec jsem to predelal na celej ctverec v prostoru aby se mi lip testovalo, ale stejne jsem nedospel k nicemu. Obrazky jsou render, alphatextura, textura:

Zarucene poznate ze to asi neni to co chci - kdyz je alphamapa bila, tak je to cely ruzovy a ty dva otaznicky, kdyz je cerna, tak je to cerny. Proste misto aby to zpruhlednelo, tak to akorat jde k cerne barve.
Rozhodne asi budete chtit videt kod:

kód:
                this.dev.RenderState.AlphaBlendEnable = true;
                this.dev.RenderState.ZBufferWriteEnable = false;
                this.dev.RenderState.AlphaSourceBlend = Blend.SourceAlpha;
                this.dev.RenderState.AlphaDestinationBlend = Blend.InvSourceAlpha;
               
                //stage 0
                this.dev.SetTexture(0, sprtex);
                this.dev.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.Modulate);
                this.dev.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                this.dev.SetTextureStageState(0, TextureStageStates.ColorArgument2, (int)TextureArgument.Diffuse);
                //stage 1
                this.dev.SetTexture(1, spralpha);
                this.dev.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.Modulate);
                this.dev.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                this.dev.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.Current);
                //alpha
                this.dev.SetTextureStageState(1, TextureStageStates.AlphaOperation, (int)TextureOperation.BlendTextureAlpha);
                this.dev.SetTextureStageState(1, TextureStageStates.AlphaArgument1, (int)TextureArgument.TextureColor);
                this.dev.SetTextureStageState(1, TextureStageStates.AlphaArgument2, (int)TextureArgument.Current);
Pak uz jenom vykresluju primitiva, ve FVF mam Normal, Position, Texture2, by melo byt OK. Ale nejak netusim, co musim udelat, aby to uz bylo sakra pruhledny. Pokud pomuzete, budu opravdu vdecnej Smile


Dalsi co me zajima, tady kod ani hazet nebudu, je bump-mapping. Nasel jsem zase hromadu tutoru, ale z niceho jsem si nezvladnul nic vzit (teda az na jeden, jenze ten nereagoval na pohyb svetla, bylo to porad staticky). Nemate nekdo nejakej tutor (cz,sk,en) kde by bylo dobre popsano co vsechno je potreba "zaridit" aby to "fungovalo"? Tusim jak to nejak funguje (normalovy/height mapy atd), ale uz nevim, jak to dostat do DX. Co do jazyka, je mi to jedno, do C# si prelozim snad vse od Visual Basicu a Delphi po C++ ...

Diky moc za odpovedi Smile
A pokud se me na neco budete nekdo ptat, nenadavejte ze neodpovidam, prijdu sem az v nedeli nebo v pondeli, do te doby jsem pryc. Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky Yahoo Messenger MSN Messenger
Augi



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

PříspěvekZaslal: 12. srpen 2008, 19:48:43    Předmět: Odpovědět s citátem

V tom Tvém kódu vidím několik zádrhelů:
- nenastavuješ způsob výpočtu alphy pro stage 0
- nevypínáš stage 2
- ve stage 0 pracuješ s barvou materiálu nebo vertexu (záleží na nastavení render states) - to je ok?

Já jsem s alphou vždy pracoval tak, že jsem měl texturu s alpha kanálem, takže mi stačila jedna textura a i jedna texturovací stage:
- ColorOperation na SelectArgument1
- ColorArgument1 na TextureColor
- AlphaOperation na SelectArgument1
- AlphaArgument1 na TextureAlpha
- operace pro barvu i alphu pro stage 1 vypnout

Pokud máš dvě textury, přičemž jedna nese info o alphě, tak bych zkusil něco takového:
- stage 0:
- ColorOperation na SelectArgument1
- ColorArgument1 na TextureColor
- AlphaOperation na Current (nebo Disabled?)
- jako texturu nastavit normální texturu
- stage 1:
- ColorOperation na Current
- AlphaOperation na SelectArgument1
- AlphaArgument1 na TextureColor
- jako texturu nastavit normální texturu
- jako texturu nastavit texturu s alpha kanálem

V DX jsem už delší dobu nedělal, ale snad to aspoň trošku pomůže...
Ve čtvrtek odlétám na 12 dní pryč, takže taky nebudu moc reagovat Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
SUK



Založen: 14. 11. 2007
Příspěvky: 93
Bydliště: /dev/null

PříspěvekZaslal: 4. září 2008, 20:02:41    Předmět: Odpovědět s citátem

VYRESENO!!! (reseni na konci, puvodni dotaz tu necham, co kdyby se nekdy hodil)

pisu sem asi uz po ctvrty tak snad to tentokrat odeslu.

vsechno co jsi mi radil jsem zkosuel, googlil jsem, pouzival cizi kod a vsechno mozny, delal jsem blbosti metodou pokus/omyl ale - zadna alpha nebyla ani znat. Ted mam texturu s alpha kanalem (kdyz to hodim do opery, zobrazi se opravdu pruhledna). Ale v programu proste pruhledna neni...
Zkusil jsem dat SourceAlpha na Zero (coz pokud dobre chapu by melo zpusobit ze se vlastne nic nevykresli) - vykresli se vsechno. Ten kod dole (textura t je tenhle obrazek:
(to aby bylo videt ze i tu se zobrazi nejaka pruhlednost).

A jeste kod:

kód:

                #region Point sprite region



                this.dev.RenderState.AlphaBlendEnable = true;
                this.dev.RenderState.AlphaSourceBlend = Blend.SourceAlpha;
                this.dev.RenderState.AlphaDestinationBlend = Blend.InvSourceAlpha;

                this.dev.RenderState.PointSpriteEnable = true;
                this.dev.RenderState.ZBufferWriteEnable = false;
                this.dev.RenderState.PointScaleEnable = true;

                this.dev.VertexFormat = VertexSprite.Format;
                this.dev.SetStreamSource(0, spritebuffer, 0);
                this.dev.SetTexture(0, t);
                this.dev.DrawPrimitives(PrimitiveType.PointList, 0, 2);


               
                this.dev.RenderState.AlphaBlendEnable = false;
                this.dev.RenderState.PointSpriteEnable = false;
                this.dev.RenderState.ZBufferWriteEnable = true;
                #endregion



jestli me nekdo poradite, budu vam vazne vecnej a kdyz prijedete do hradce, vas treba pozvu na pifko. Jenom hlavne at uz to mam z krku. Jinak zkousel jsem i nastavovat A8R8G8B8 forat backbufferu a hodit to i na fullscreen - zadnej rozdil (jak jsem predpokladal). Zkousel jsem texturu nacitat s tim ze to je A8R8G8B8 - zase nic. Nastavoval jsem vertexum alphu 0.5 - zase nic. Vazne uz nevim co s tim... prijdu si jak debil co neumi opsat kus kodu...
(jinak mi v ostatnich vecech alpha chodi naprosto normalne (hry, kompletni binarky odjinud a podobne. Kdyz nakopiruju/opisu podstatny veci (hledam v kodu vetsinou naprosto kazdou blbost) nejede to.).



Reseni:Nauc se cist SUKu, je tam AlphaSourceBlend a DestinationBlend ... ne AlphaDestinationBlend... bleh...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky Yahoo Messenger MSN Messenger
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