ID3DXSprite Depth Sorting

Started by
1 comment, last by Zeke 16 years, 11 months ago
I am drawing a bunch of sprites to the screen, is there anyway I can control the order they are drawn without giving each one a z value? For e.g. I have a background image of a game board and a marker that is moving around said board. I draw the background first, then the marker. But sometimes the background is drawn first, which is what I want, but sometimes the marker is drawn first and then the background is drawn obscuring it, even though ive checked to make sure the call to ID3DXSprite::Draw is done for the background first every time. I can get around this by giving each sprite its own z position and making sure the marker has a z position in front of the background. But it seems daft having z values of 1,2,3,4... when they are all flat images and all I really need to do is make sure the "top" sprites are drawn after the "bottom" sprites. Any ideas?
Just my thoughts take them as you will. "People spend too much time thinking about the past, whatever else it is, its gone"-Mel Gibson, Man Without A Face
Advertisement
Interesting.

I've never had this issue occur when I used sprites. Are you sure you have the depth buffer turned off? You might be experiencing some Z fighting otherwise...

The solution you've come up with is pretty typical in most sprite engines. You simply give each sprite a draw priority(a Z value in your case) and then draw from back to front. There's nothing really wrong with your approach but I can see why you might find this solution annoying.

Turns out ID3DXSprite's Begin method also accepts a flag of "D3DXSPRITE_SORT_DEPTH_BACKTOFRONT" so you can make sure that your sprites are being drawn in the correct order if you are using a Z value.

But, yea, make sure your depth buffer (D3DRS_ZBUFFER is the render state flag I believe, just set it to false through SetRenderState) is disabled and see if that helps.
Thanks for the info ChaosPhoenix, ive got the depth buffer turned on but I need it on because im mixing 2d sprites and 3d objects. Come to think of it, I only noticed the problem once I turned it on (I got the 2d stuff working first so didnt have the depth buffer turned on).

But ill have to put up with giving each sprite a z value even if it does seem a bit odd. As long as there isnt anything wrong with doing that :)

Cheers
Just my thoughts take them as you will. "People spend too much time thinking about the past, whatever else it is, its gone"-Mel Gibson, Man Without A Face

This topic is closed to new replies.

Advertisement