Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 10.12.2006, 6:29   #1
pajics
Novi član
 
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom 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...
pajics je offline   Odgovor sa citatom ove poruke
Stara 10.12.2006, 9:27   #2
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: DirectX u C#, kako odraditi fading na sprite-u?

Citat:
pajics kaže:
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...
sa DX-om ne mozes jednostavno da 'prikazes' sliku, prvo treba inicijalizovati device, setovati formate...bla, bla... sta koristis, Direct3D ili DirectDraw?

Ako mislis na sporo smenjivanje slika, jednostavno ih ubaci u neku kolekciju, i odatle iscrtavaj pomocu GDI+ ...
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 11.12.2006, 1:09   #3
pajics
Novi član
 
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: DirectX u C#, kako odraditi fading na sprite-u?

Citat:
MG-RAY kaže:
sa DX-om ne mozes jednostavno da 'prikazes' sliku, prvo treba inicijalizovati device, setovati formate...bla, bla... sta koristis, Direct3D ili DirectDraw?

Ako mislis na sporo smenjivanje slika, jednostavno ih ubaci u neku kolekciju, i odatle iscrtavaj pomocu GDI+ ...
Direct3D, znao sam da sam nesto zaboravio da napisem

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)?
pajics je offline   Odgovor sa citatom ove poruke
Stara 11.12.2006, 9:45   #4
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom 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();
ako hoces, poslacu ti ceo code...

...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...
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 12.12.2006, 10:16   #5
pajics
Novi član
 
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom 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?
pajics je offline   Odgovor sa citatom ove poruke
Stara 12.12.2006, 11:32   #6
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom 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")
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 13.12.2006, 2:11   #7
pajics
Novi član
 
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom 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!
pajics je offline   Odgovor sa citatom ove poruke
Stara 13.12.2006, 21:56   #8
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom 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.
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 14.12.2006, 19:43   #9
quick
Član
 
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: DirectX u C#, kako odraditi fading na sprite-u?

Kod:
sprite.Draw(spriteTexture, textureSize, [vektor centra], [pozicija], [boja]);
jesi li probao da stavis [boja] parametar sa alfa vrijednoscu manjom od 1?
quick je offline   Odgovor sa citatom ove poruke
Stara 15.12.2006, 3:55   #10
pajics
Novi član
 
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom 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.
pajics je offline   Odgovor sa citatom ove poruke
Stara 15.12.2006, 11:43   #11
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: DirectX u C#, kako odraditi fading na sprite-u?

Citat:
quick kaže:
Kod:
sprite.Draw(spriteTexture, textureSize, [vektor centra], [pozicija], [boja]);
jesi li probao da stavis [boja] parametar sa alfa vrijednoscu manjom od 1?
izgleda da si u pravu...radi.
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 16.12.2006, 18:05   #12
pajics
Novi član
 
Član od: 10.12.2006.
Poruke: 15
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: DirectX u C#, kako odraditi fading na sprite-u?

Probao sam i kao sto je MG rekao RADI

HVALA TI!!!
pajics je offline   Odgovor sa citatom ove poruke
Stara 17.12.2006, 16:27   #13
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: DirectX u C#, kako odraditi fading na sprite-u?

...ipak, ja bih se drzao shadera ... efekti su efekti
MG-RAY je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


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


Sva vremena su po Griniču +2 h. Sada je 17:07.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com