首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

封装了一个函数用于ID3DXSprite进行2D绘制,但画出的位置总是不对,求解?解决办法

2012-04-11 
封装了一个函数用于ID3DXSprite进行2D绘制,但画出的位置总是不对,求解?奇怪了 为什么我用下面的函数画2D图

封装了一个函数用于ID3DXSprite进行2D绘制,但画出的位置总是不对,求解?
奇怪了 为什么我用下面的函数画2D图像
最后图像确实是拉伸了,但输出的XY坐标位置总是有偏差?
如果来源区域宽度高度和目标区域宽度高度相等(即不拉伸)
则一切正常,一拉伸就有问题?求解

--------------------------------------------
bool CDirect3DGraphicsCtrl::DrawSprite2D( 
  int dx,//目标窗口中的X座标
  int dy,//目标窗口中的Y座标
  int dw,//目标窗口中的宽度
  int dh,//目标窗口中的高度
  int sx,//来源tex纹理中的X座标
  int sy,//来源tex纹理中的Y座标
  int sw,//来源tex纹理中的宽度
  int sh,//来源tex纹理中的高度
  IDirect3DDevice9* device,
  ID3DXSprite* sprite,
  IDirect3DTexture9* tex,//已生成的纹理
  bool trans,
D3DCOLOR c)
{
HRESULT rs;

D3DXMATRIX oldview;
D3DXMATRIX oldworld;

D3DXMATRIX matrix;
D3DXMatrixIdentity( &matrix );

device->GetTransform( D3DTS_WORLD,&oldworld );
device->GetTransform( D3DTS_VIEW,&oldview);

device->SetTransform( D3DTS_WORLD,&matrix );
device->SetTransform( D3DTS_VIEW,&matrix );

//--------------------------分析图像拉伸值----------------------
float x=1.0f,y=1.0f,z=1.0f;
x=(float)dw/sw;
y=(float)dh/sh;
::D3DXMatrixScaling(&matrix,x,y,z);
//--------------------------

RECT src;
::SetRect(&src,sx,sy,sx+sw,sy+sh);
if( trans )
{
sprite->Begin( D3DXSPRITE_ALPHABLEND );
}
else
{
sprite->Begin( 0 );
}
  //把纹理中的子区域画在指定的屏幕坐标上

sprite->SetTransform(&matrix);
rs=sprite->Draw(tex,&src,0,&D3DXVECTOR3(dx,dy,0),c );
sprite->End();
device->SetTransform( D3DTS_WORLD,&oldworld );
device->SetTransform( D3DTS_VIEW,&oldview );
if (rs==S_OK)
{
return true;
}
else
{
return false;
}
}

[解决办法]
参考一下这个代码:http://www.codesampler.com/dx9src/dx9src_8.htm#dx9_d3dxsprite

热点排行