概述
昨天前天实现了三角形光栅化算法,然而在邻近三角形之间出现了裂缝,于是弄了一天,后来,查看了《3D游戏编程大师技巧》的源码的示例,一看,他那没有裂缝,我这代码是按照书本的思路去实现的,经过一翻挣扎把它的代码移植到自己的代码,再经过一翻大修改,F5调试运行,结果仍然有裂缝!我觉得奇怪了,于是再对照了一遍代码,原来还有一个编译开关,于是又把另一编译开关所在的代码复制过来,然后再修改,在修改过的过程中遇到了不少的问题,先是变量的命名,然后就是有些变量没改,导致出现了很奇怪的错误,经过一翻纠正,我怀着兴奋的心情按F5,结果裂缝的问题解决了!
//使用快速版本有裂缝
#if ( (RASTERIZER_MODE==RASTERIZER_FAST) || (RASTERIZER_MODE==RASTERIZER_FASTEST) )
// perform y clipping
//if (y0 < min_clip_y)
if (y0 < TOP_BORDER_SCR)
{
// compute new xs and ys
xs = xs+dx_left*(-y0+TOP_BORDER_SCR);
xe = xe+dx_right*(-y0+TOP_BORDER_SCR);
// reset y0
y0 = TOP_BORDER_SCR;
} // end if top is off screen
if (y2 > BTM_BORDER_SCR)
y2 = BTM_BORDER_SCR;
// make sure top left fill convention is observed
iy1 = ceil(y0);
iy3 = ceil(y2)-1;
#endif
这是有裂缝的版本
//使用了精确计算的版本,没裂缝
//#if (RASTERIZER_MODE==RASTERIZER_ACCURATE)
// perform y clipping
if (y0 < TOP_BORDER_SCR)
{
// compute new xs and ys
xs = xs+dx_left*(-y0+TOP_BORDER_SCR);
xe = xe+dx_right*(-y0+TOP_BORDER_SCR);
// reset y0
y0 = TOP_BORDER_SCR;
// make sure top left fill convention is observed
iy1 = y0;
} // end if top is off screen
else
{
// make sure top left fill convention is observed
iy1 = ceil(y0);
// bump xs and xe appropriately
xs = xs+dx_left*(iy1-y0);
xe = xe+dx_right*(iy1-y0);
} // end else
if (y2 > BTM_BORDER_SCR)
{
// clip y
y2 = BTM_BORDER_SCR;
// make sure top left fill convention is observed
iy3 = y2-1;
} // end if
else
{
// make sure top left fill convention is observed
iy3 = ceil(y2)-1;
} // end else
//#endif
这是无裂缝版本
最后
以上就是陶醉冷风为你收集整理的3D软引擎之三角形光栅化的全部内容,希望文章能够帮你解决3D软引擎之三角形光栅化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复