Jump to content

  • Log In with Google      Sign In   
  • Create Account


Strange Sprite Behaviour


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 BMW   Members   -  Reputation: 160

Like
0Likes
Like

Posted 14 July 2013 - 06:51 AM

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.


Edited by BMW, 14 July 2013 - 06:52 AM.


Sponsor:

#2 Norman Barrows   Crossbones+   -  Reputation: 2033

Like
1Likes
Like

Posted 15 July 2013 - 09:24 AM

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 1988"

 

rocklandsoftware.net

 


#3 Norman Barrows   Crossbones+   -  Reputation: 2033

Like
1Likes
Like

Posted 15 July 2013 - 09:36 AM

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 1988"

 

rocklandsoftware.net

 


#4 Dave Hunt   Crossbones+   -  Reputation: 2414

Like
1Likes
Like

Posted 15 July 2013 - 09:40 AM


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.



#5 BMW   Members   -  Reputation: 160

Like
0Likes
Like

Posted 15 July 2013 - 04:29 PM

 


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.


Edited by BMW, 15 July 2013 - 04:31 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS