Strange Sprite Behaviour

Started by
3 comments, last by BMW 10 years, 9 months ago

I am loading a texture which is 458 x 50 pixels and drawing it as part of the HUD using Direct3D sprites.

However it seems to be scaling the sprite up a bit. Is this because of the texture size? Does it need to be a factor of 2?

This is the code I am using to draw the sprite:


if(g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) == D3D_OK)
{
	D3DXVECTOR3 pos;
	pos.x = (float)((SCREEN_WIDTH / 2) - 229);
	pos.y = (float)SCREEN_HEIGHT - 60.0f;
	pos.z = 0.0f;
	g_pSprite->Draw(g_pTexture, NULL, NULL, &pos, 0xFFFFFFFF);
	g_pSprite->End();
}

The above code should centre the sprite, however it does not. Also, part of the sprite is being cut off by the bottom of the screen, but this shouldn't happen if it is 50 pixels high.

Advertisement

try this:

 
// draw a sprite. x,y are screen coords of the UL corner.
void Zdrawsprite(int texID,int x,int y,float sx,float sy)
{
D3DXVECTOR3 position;
D3DXMATRIX m;
D3DXMatrixScaling(&m,sx,sy,1.0f);
Zsprite->SetTransform(&m);
position.x=(float)x/sx;
position.y=(float)y/sy;
position.z=0;
Zsprite->Draw(Ztex[texID].tex,NULL,NULL,&position,0xFFFFFFFF);
}
 
 

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

powers of two should not be an issue, its should just draw slower. the fastest draw would be done with multiple 256x256 sprites at scale = 1.0. say two of them, that extend off the right and bottom of the screen. even faster may be changing the hud size to powers of 2, where the width is an exact multiple of the height. then you could use square power of two sized sprites, and not draw anything off the edge of the screen. but a couple clipped 256x256's may still be faster. in the end, the performance hit from one 458x50 sprite should not be that bad. start with the simple implementation, optimize if necessary.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php


However it seems to be scaling the sprite up a bit. Is this because of the texture size? Does it need to be a factor of 2?

It likely needs to be a power of 2. Try resizing the texture to 512x64 (you can leave the actual sprite image in the upper 458x50 of the texture) and specifying a 458x50 source rectangle in the Draw call.


However it seems to be scaling the sprite up a bit. Is this because of the texture size? Does it need to be a factor of 2?

It likely needs to be a power of 2. Try resizing the texture to 512x64 (you can leave the actual sprite image in the upper 458x50 of the texture) and specifying a 458x50 source rectangle in the Draw call.

Yup, that works fine. Thanks everyone!

And yeah, I meant power of 2 not factor.

This topic is closed to new replies.

Advertisement