怎么样解决3D 地形、天空盒等网格模型出现缝隙的问题

当我们在编写地形、BOX或者天空盒等的网格与网格连接处常常会看到有的地方会出现一条缝隙之类的,这个要怎么解决呢?其实不难,还记得学过的DirectX提供的纹理寻址里面的镜像纹理寻址、重叠纹理寻址、边框颜色纹理寻址、一次镜像纹理寻址、夹取纹理寻址,这里我把纹理寻址的枚举类型写出来,看不懂就去查查SDK;

typedef enum D3DTEXTUREADDRESS
{
    D3DTADDRESS_WRAP = 1,
    D3DTADDRESS_MIRROR = 2,
    D3DTADDRESS_CLAMP = 3,
    D3DTADDRESS_BORDER = 4,
    D3DTADDRESS_MIRRORONCE = 5,
    D3DTADDRESS_FORCE_DWORD = 0x7fffffff,
} D3DTEXTUREADDRESS, *LPD3DTEXTUREADDRESS;

 

当我们要消除出现的缝隙的时候,只要在画网格或模型之前加上纹理寻址就能解决问题,比如说:我现在要在Render()函数里画一个天空盒子:

void SkyBox::Render()
{
 // 各个子集绘制各个纹理
 for(int i=0; i<6; i++)
 {
  s_pD3DDevice->SetTexture(0, g_pTexture[i]);            // 灵活顶点格式
  s_pMesh->DrawSubset(i);                 // 属性绘制
 }
}

这里我是用的Mesh做的一个天空盒子,为了要消除将会出现的缝隙,只需在画之前(即在DrawSubset)加入纹理寻址就行了:

void SkyBox::Render()
{
 // 各个子集绘制各个纹理
 for(int i=0; i<6; i++)
 {
 s_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);
  s_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);
  s_pD3DDevice->SetTexture(0, g_pTexture[i]);            // 灵活顶点格式
  s_pMesh->DrawSubset(i);                 // 属性绘制
 }
}

这里我加入的纹理寻址是一次镜像,因为这里即将出现的缝隙仅仅是一条白线,所以加入一次镜像即可,当然,出现的情况的不同,就加入不同的纹理寻址,一般加入一次镜像应该就没问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值