[ bobby63 @ 06.01.2010. 09:00 ] @
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
[ tosa @ 06.01.2010. 09:19 ] @
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.
[ bobby63 @ 06.01.2010. 09:45 ] @
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.