游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1755|回复: 0

D3D UV 对不齐的问题!求大神帮忙!

[复制链接]

1

主题

2

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2013-5-24 08:35:57 | 显示全部楼层 |阅读模式
本帖最后由 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);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-14 15:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表