|
本帖最后由 kapaqi 于 2013-5-24 08:48 编辑
用正交投影,显示2D图片。图片大小创建的是2的n次方.
当我要切图片中的一部分的时候,出现了像素对不齐的问题。
我发现是UV精度问题,如果剪切点计算出来是个小数,不是少一像素就是多一像素。。。
求大神帮忙解决!!!
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1)
struct CUSTOMVERTEX {
float x, y, z, rhw;
DWORD color;
float tu,tv;
};
bool Image::draw(float dest_x, float dest_y, float src_x, float src_y, float width, float height, D3DCOLOR color ) {
D3DSURFACE_DESC desc;
_d3d_texture->GetLevelDesc(0, &desc);
//这里计算出来UV是个小数,要么多1像素要么少1像素。。。
double fix_x = src_x / desc.Width;
double fix_y = src_y / desc.Height;
double fix_width = width / desc.Width;
double fix_height = height / desc.Height;
CUSTOMVERTEX img_vertex[4] =
{
{dest_x+width, dest_y+0.0f, 0.5f, 1.0f, color, fix_x+fix_width, fix_y},
{dest_x+width, dest_y+height, 0.5f, 1.0f, color, fix_x+fix_width, fix_y + fix_height},
{dest_x+0.0f, dest_y+height, 0.5f, 1.0f, color, fix_x, fix_y + fix_height },
{dest_x+0.0f, dest_y+0.0f, 0.5f, 1.0f, color, fix_x, fix_y},
};
_d3d_device->SetFVF( D3DFVF_CUSTOMVERTEX );
_d3d_device->SetTexture(0, _d3d_texture);
_d3d_device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
_d3d_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
_d3d_device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
_d3d_device->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, img_vertex, sizeof(CUSTOMVERTEX) );
_d3d_device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
_d3d_device->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
} |
|