我是靠谱客的博主 陶醉冷风,最近开发中收集的这篇文章主要介绍3D软引擎之三角形光栅化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

昨天前天实现了三角形光栅化算法,然而在邻近三角形之间出现了裂缝,于是弄了一天,后来,查看了《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软引擎之三角形光栅化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部