|
|
发表于 2004-11-17 15:19:00
|
显示全部楼层
Re:初学D3D,请教纹理间的缝隙问题[配图]
整理了一下思路,解释一下原因:拿一个1D texture来比喻。设其为256x1大小。则linear会取两个texel进行采样。
1:纹理坐标映射规定,针对上面的纹理,0.0映射到纹理空间的-0.5,而1.0映射到255.5。
所以如果纹理使用warp,则1.0处要采样texture中第1个texel和最后一个texel,然后以权重0.5进行混合。那么显然混合出来的颜色不是想要的颜色,也就是会出现边界处的失真。
证据:如果你把1.0改为511/512的话这种现象就会消失。同样,纹理坐标0.0处也会失真,你改为1/512的话这种失真就会消失。
2:使用clamp的话则1.0处需要采样的texel为两个第256个texel,所以不会出现失真。
这就是linear的边界失真,也就是说,如果你想让一个quad贴上一张纹理的话且该纹理的纹理寻址使用warp的话,四角的纹理坐标不要定为(0.0,0.0),(1.0,0.0),(0.0,1.0),(1.0,1.0),而应该分别是(0.5/texture width,0.5/texture height),(0.5/texture width,1-0.5/texture height),(1-0.5/texture width,0.5/texture height),(1-0.5/texture width,1-0.5/texture height)
至于msaa产生的纹理边界失真,和这个从原理上有区别,那是由于subpixel中心与msaa下该subpixel所属pixel的纹理采样中心之间的偏移造成的。 |
|