Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sprites png providnost (DirectX, Net)

[es] :: 3D programiranje :: Sprites png providnost (DirectX, Net)

[ Pregleda: 2615 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Sprites png providnost (DirectX, Net)06.01.2010. u 09:00 - pre 173 meseci
Poz svima i sretna nova godina.

Nesto se bas i ne snalazim u DirectX-u tj tek sam poceo ali evo problema sa kojime ne uspevam da izadjem na kraj vec nedeju dana.

Imam u programu 3D objekte (uvezeni kao x) koji koriste png da se definise stepen providnosti (kao alpha) i to funkcionise super.
Takodje ispred tih objekata imam sprites kojima je isto uz png definisana providnosti, sto takodje radi super(barem sprite u odnosu na sprite).

Ako su dva sprajta jedan ispred drugog, providnost radi dobro.

Problem je sto se iza sprajtova ne vide 3D objekti osim ako png na tom delu nije potpuno providan, na svim mestima gde su nijanse providnosti 3D objekat se ne vidi.

Sprajtovi su definisani sa:
Code:
mainSprite = New Direct3D.Sprite(D3Ddev)
        ColorKeyVal = Color.FromArgb(255, 255, 255, 255) 
        mainSpriteTexture = TextureLoader.FromFile(D3Ddev, "Maska.png", 800, 600, D3DX.Default, Usage.None, Format.Unknown, Pool.Default, Filter.Point, Filter.Point, ColorKeyVal.ToArgb)

a crtaju se sa:
Code:
 mainSprite.Begin(SpriteFlags.AlphaBlend)
        mainSprite.Draw2D(mainSpriteTexture, New Point(0, 0), 0, New Point(0, 0), Color.White)
        mainSprite.End()

Inicijalizacija DirectX-a je(baren bitan deo):
Code:
 D3Ddev.RenderState.ZBufferEnable = True
        D3Ddev.RenderState.FillMode = FillMode.Solid
        D3Ddev.RenderState.Lighting = True       
        D3Ddev.SamplerState(0).MinFilter = TextureFilter.Point
        D3Ddev.SamplerState(0).MagFilter = TextureFilter.Linear

        D3Ddev.RenderState.AlphaBlendEnable = True
        D3Ddev.RenderState.SourceBlend = Blend.SourceAlpha
        D3Ddev.RenderState.DestinationBlend = Blend.InvSourceAlpha

Program je u VB-u, mada bi i u C# trebalo da bude isto.

Nadam se da sam uspeo da objasnim problem.
Unapred hvala
Hear all, trust nothing!
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
*.guerrilla-games.com.

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Sprites png providnost (DirectX, Net)06.01.2010. u 09:19 - pre 173 meseci
Citat:
bobby63
Code:
 D3Ddev.RenderState.ZBufferEnable = True


Ovde ti je problem, u pitanju je "dubina" sprajtova i objekata.
Neki piksel koji nije potpuno providan ce upisati neku vrednost u Z buffer i posle toga sve što se nalazi iza toga više neće biti vidljivo.
Najjednostavnije rešenje je da sortiraš objekte i da ih crtaš od najdaljeg ka najbližem.
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: Sprites png providnost (DirectX, Net)06.01.2010. u 09:45 - pre 173 meseci
Hvala na super brzom odgovoru.

Da da, to je tacno, sa iskljucenim z bufferom providnost radi kako treba mada unosi na tone drugih problema.

Stavio sam sada da se z buffer ukljucuje na pocetku petlje (pre crtanja 3D objekata) i iskljucuje pre crtanja sprajtova i to radi ok.

Jos jednom puno hvala.
Hear all, trust nothing!
 
Odgovor na temu

[es] :: 3D programiranje :: Sprites png providnost (DirectX, Net)

[ Pregleda: 2615 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.