|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
10.12.2006, 6:29 | #1 |
Novi član
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
DirectX u C#, kako odraditi fading na sprite-u?
Kao sto pise u naslovu, treba da postignem fading efekat slike u C# i DirectX-u, kako to da uradim tj. koji metod da koristim ...?
U WinForms sam uspeo da postignem Fade efekat (preko image attribute-a), ali mi se jpeg slike sporo prikazuju pa sam iz tog razloga pokusao u DirectX-u, ali tamo ne mogu da provalim kako da odradim transparency na slici... |
10.12.2006, 9:27 | #2 | |
Starosedelac
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Citat:
Ako mislis na sporo smenjivanje slika, jednostavno ih ubaci u neku kolekciju, i odatle iscrtavaj pomocu GDI+ ... |
|
11.12.2006, 1:09 | #3 | |
Novi član
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Citat:
Ma znam da treba inicijalizovati i sve ostalo, to sam vec uradio i prikazuje mi sliku, ali imam jos jedan problem kako da ucitam pravu velicinu slike, posto sprajtovi zahtevaju da sirina i visina budu stepen dvojke (npr. slika je 1024x862, a u sprite-u pise 1024x1024). Znaci kako da otkrijem pravu velicinu i (vaznije) kako da odradim transparency (tj. da sliku prikazujem poluprovidnu)? |
|
11.12.2006, 9:45 | #4 |
Starosedelac
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
OK, da krenemo od nule...posto pojma nemam koji si metod koristio, a cini mi se da nisi onaj koji treba... ...paz' sad...
Kod:
private Texture spriteTexture; // tekstura koju renderujes private Sprite sprite; // ... private Rectangle textureSize; //struktura koja cuva velicinu teksture *** //device -- graficki uredjaj koji se koristi za crtanje. //kreira teksturu spriteTexture = TextureLoader.FromFile(device, @"..\..\image.bmp"); using (Surface s = spriteTexture.GetSurfaceLevel(0)) { SurfaceDescription desc = s.Description; //ovako se odredjuje velicina, koja ne mora da bude stepen dvojke. textureSize = new Rectangle(0, 0, desc.Width, desc.Height); } sprite = new Sprite(device); //napravi klasu u kojoj ce da se drzi pozicija spritea...ili sta vec. //render sprite.Begin (SpriteFlags.AlphaBlend); //ako postoji neka lista, upotrebi foreach... sprite.Draw(spriteTexture, textureSize, [vektor centra], [pozicija], [boja]); sprite.End(); ...ovo vazi samo ako tekstura koju ucitavas ima alpha informaciju. ...ako ti treba dinamicno menjanje transparencije, palo mi je na pamet da to moze da se odradi preko shadera, ali nemam pojma kako bi to radilo za crtanje spriteova...I'll see what i can do... |
12.12.2006, 10:16 | #5 |
Novi član
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Ok ovako, to sam uradio, ono sto meni treba je dinamicko menjanje transparencije. Ovo je deo koda koji sam do sad odradio:
#region Promenljive private Device device = null; int mX, mY; private Microsoft.DirectX.Direct3D.Font font; public const int ScreenWidth = 1024; public const int ScreenHeight = 768; private Texture spriteTexture; private Sprite sprite; private Rectangle textureSize; System.Collections.ArrayList ar = new System.Collections.ArrayList(); #endregion public void InitializeGraphics() { // Create our device device = setDevice(); // Create our texture spriteTexture = TextureLoader.FromFile(device, @"..\..\slika.jpg"); using (Surface s = spriteTexture.GetSurfaceLevel(0)) { SurfaceDescription desc = s.Description; textureSize = new Rectangle(0, 0, desc.Width, desc.Height); } sprite = new Sprite(device); // Create our fonts font = new Direct3D.Font(device, new System.Drawing.Font("Arial", 12.0f, FontStyle.Regular)); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { device.Clear(ClearFlags.Target, System.Drawing.Color.CornflowerBlue, 1.0f, 0); device.BeginScene(); sprite.Begin(SpriteFlags.AlphaBlend); ImageInformation ii = TextureLoader.ImageInformationFromFile(@"..\..\sli ka.jpg"); float w = ((float)ScreenWidth / ii.Width); float h = ((float)ScreenHeight / ii.Height); float scale = (w > h) ? h : w; int widthOfImage = (int)(ii.Width * scale); int heightOfImage = (int)(ii.Height * scale); //sprite.Draw(spriteTexture, textureSize, //new Vector3(0, 0, 0), new Vector3(10, 10, 1), Color.White); sprite.Draw2D(spriteTexture, Rectangle.Empty, new Rectangle(0, 0,widthOfImage - 15, heightOfImage -15), new Point(10,10), Color.White); sprite.End(); font.DrawText(null, string.Format("X: {0} Y: {1}", mX, mY), new Rectangle(5, 5, 0, 0), DrawTextFormat.NoClip, Color.Black); font.DrawText(null, string.Format("Texture: W {0} H: {1}", textureSize.Size.Width, textureSize.Size.Height), new Rectangle(5, 25, 0, 0), DrawTextFormat.NoClip, Color.Black); device.EndScene(); device.Present(); this.Invalidate(); } Gledao sam dokumentaciju i bio sam na par sajtova, ali nisam uspeo da pronadjem kako da odradim transparency tj. da postignem fading efekat na teksturi... Sto se velicine teksture tice, problem je u tome sto mi SurfaceDescription (tj. spriteTexture.GetSurfaceLevel(x)) ne vraca tacnu velicinu sliku vec stavlja najblizu vrednost koja je stepen 2 i veca je od prave vrednosti slike... p.s. Kako stavis kod da ti bude posebnom delu tj. da ima scroll bar? |
12.12.2006, 11:32 | #6 |
Starosedelac
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
istio kod koji sam i ja koristio
zaboravi na ovo...imam ideju, pa ako ti se svidja... ...da se svaki sprite iscrvava pomocu 4 vertexa, to bi ti dalo kontrolu nad transparencijom, kao i svim drugim opcijama, pod uslovom da se renderuje pomocu shadera, probacu da odratim ovo, ne bi trebalo da bude problem... upotrebi code tag, znak "#" (pise "umetni Code tag") |
13.12.2006, 2:11 | #7 |
Novi član
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Sad ne mogu da se setim, posto sam to gledao pre jedno mesec-dva, pa sam i tada negde procitao za varijantu preko 4 vertexa, ali znam da mi se nesto nije svidela ta varijanta (da li je sporija od ove ili nesto tako...). Pa bih radije resio preko sprite-ova jer mi je to nekako logicnije (ipak za to su oni i napravljeni (2D))...
Ali ako ne znas preko sprite-ova, onda je dobrodosla bilo koja varijanta (naravno da radi )... Hvala ti u svakom slucaju na trudu! |
13.12.2006, 21:56 | #8 |
Starosedelac
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
hmmm...nisam siguran, trebalo bi da postizu slicnu brzinu iscrtavanja...
jedino sta mi pada na pamet je DirectDraw, ali pojma nemam kako bi se to odradilo...ili GDI+... ipak, 4 vertexa mi se cine kao najlogicnija opcija. |
14.12.2006, 19:43 | #9 |
Član
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Kod:
sprite.Draw(spriteTexture, textureSize, [vektor centra], [pozicija], [boja]); |
15.12.2006, 3:55 | #10 |
Novi član
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Nisam, ali deluje mi da moze da upali... Probacu sutra pa vam javljam jel uspelo.
|
15.12.2006, 11:43 | #11 | |
Starosedelac
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Citat:
|
|
16.12.2006, 18:05 | #12 |
Novi član
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
Probao sam i kao sto je MG rekao RADI
HVALA TI!!! |
17.12.2006, 16:27 | #13 |
Starosedelac
|
Re: DirectX u C#, kako odraditi fading na sprite-u?
...ipak, ja bih se drzao shadera ... efekti su efekti
|
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Kako podesiti ISDN da radi na 128 kbps | jaba.hut | Internet usluge | 7 | 31.5.2007 11:54 |
kako kao fizicko lice naplatiti oglase na sajtu | dm@ricn | Internet tehnologije | 6 | 28.12.2006 21:54 |
Kako spakovati DivX film da stane na flash 512mb? | Ladowina | Video/TV softver | 6 | 30.1.2006 20:37 |
kako da posaljem mail na svoj tel? | Vorador | Aparati i oprema | 10 | 24.1.2006 21:12 |
Kako da obrisem DirectX? | alien | Operativni sistemi | 11 | 10.1.2006 19:14 |