.[ ČeskéHry.cz ].
2D Bitmap

 
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: 14. únor 2009, 20:01:02    Předmět: 2D Bitmap Odpovědět s citátem

Zdravím,

chtěl bych se zeptat jak nejlepe vykreslovat jen nějakou část z 2D obrázků. Jako jeden nápad, mě napadl pomocí effektu, dále jsem četl něco o maskách, ale nějak nevím co a jak.

Potřeby vždy vykreslit část, ale jedná se o nějaký mnohoúhelník..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 14. únor 2009, 20:12:25    Předmět: Odpovědět s citátem

Nejako mi, a asi nielen mne, nie je jasne, co tym myslis. Skus upresnit platformu atd...
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Juraj



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

PříspěvekZaslal: 14. únor 2009, 20:28:12    Předmět: Odpovědět s citátem

Mám prostě celý obrátek ukazatele života. Potřebuji vždy vykreslit jen část podle toho kolik bude mít daný hráč hp. Ale potřebuji vykreslovat jen čast ovšem do elipsy, nikoliv do čtverce..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 14. únor 2009, 20:37:23    Předmět: Odpovědět s citátem

Asi napriklad maskou, napriklad stencilovou...
http://www.opengl.org/wiki/Stencil_Mask

Priblizny postup:
Zapnes zapis do stencil buffera
Vykreslis masku (elipsu), tj tam kde je elipsa budu jednotky, inde nuly
Zapnes stencil test tak, aby sa vykreslili len pixely, kde je stencil 1
Vykreslis tvoj obdlznik ([left,top],[health_percent*width,height]) na miesto elipsy
Vypnes stencil test

Tak isto by sa to malo dat spravit aj s depth bufferom. Kod pre Microsoft si musis dohladat.

Edit: Netusim, ci chces OpenGL, DirectX, x86 ASM, uplne vseobecne riesenie alebo nieco ine, tak som si vybral OpenGL Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.


Naposledy upravil pcmaster dne 14. únor 2009, 21:05:50, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 14. únor 2009, 21:01:12    Předmět: Odpovědět s citátem

Šlo by to udělat i alpha testem nebo s blendingem, pokud si předgeneruješ alpha kanál. A dokonce i procedurálně (tzn. bez textury) v shaderu, pokud se tvar toho ukazatele dá popsat matematicky (tzn. kruhem nebo elipsou). V podstatě se dá použít cokoliv, kde je možnost zahazovat pixely.

BTW neviděl jsem nikde, že se to týká OpenGL, ale vzhledem k sekci se to týká nějakého 3D API asi. Wink
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Juraj



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

PříspěvekZaslal: 14. únor 2009, 21:12:07    Předmět: Odpovědět s citátem

pcmaster napsal:
Asi napriklad maskou, napriklad stencilovou...
http://www.opengl.org/wiki/Stencil_Mask

Priblizny postup:
Zapnes zapis do stencil buffera
Vykreslis masku (elipsu), tj tam kde je elipsa budu jednotky, inde nuly
Zapnes stencil test tak, aby sa vykreslili len pixely, kde je stencil 1
Vykreslis tvoj obdlznik ([left,top],[health_percent*width,height]) na miesto elipsy
Vypnes stencil test

Tak isto by sa to malo dat spravit aj s depth bufferom. Kod pre Microsoft si musis dohladat.

Edit: Netusim, ci chces OpenGL, DirectX, x86 ASM, uplne vseobecne riesenie alebo nieco ine, tak som si vybral OpenGL Smile

Syntaxi si najdu sám, to je nejmenší problém když vím co mám hledat. Díky moc mi to pomohlo Very Happy
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: 15. únor 2009, 11:50:51    Předmět: Odpovědět s citátem

Tak nyní už bych potřeboval trochu poradit i s kodem. Nalezl jsem jen nějaké skoro funkční programy a tohle z nich extrahoval a upravil. Už opravdu nevím co by mitam mohlo chybět..

kód:

            //Enable the stencil
            GraphicsDevice.RenderState.ColorWriteChannels = ColorWriteChannels.None;
            GraphicsDevice.RenderState.StencilEnable = true;
            GraphicsDevice.RenderState.StencilFunction = CompareFunction.Always;
            GraphicsDevice.RenderState.StencilPass = StencilOperation.Replace;
            GraphicsDevice.RenderState.StencilFail = StencilOperation.Keep;
            GraphicsDevice.RenderState.ReferenceStencil = 1;

            Vector2[] v = new Vector2[] { new Vector2(0, 0), new Vector2(0, 100), new Vector2(100, 100), new Vector2(100, 0) };
            //Render a square to it to use it as the buffer. Is this right?
            RenderPolygon(v, 100, 100, 0, 0, 0);

            //Then turn off the stencil I guess....
            GraphicsDevice.RenderState.ColorWriteChannels = ColorWriteChannels.All;
            GraphicsDevice.RenderState.StencilEnable = true;
            GraphicsDevice.RenderState.ReferenceStencil = 1;
            GraphicsDevice.RenderState.StencilFunction = CompareFunction.Equal;
            GraphicsDevice.RenderState.StencilPass = StencilOperation.Keep;

            //Render the texture I want to get stenciled. It should just draw it in the triangle region, but it doesn't
            RenderTexture(this.tx2d, 0, 0, 0, 0, 0);
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: 16. únor 2009, 18:16:25    Předmět: Odpovědět s citátem

Vyřešeno, chýbělo mi

kód:
....graphicsDeviceManager.PreferredDepthStencilFormat = DepthFormat.Depth24;


takovou hloupost a tolik času Smile

ps: třeba to někomu pmůže
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
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