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

昨天前天实现了三角形光栅化算法,然而在邻近三角形之间出现了裂缝,于是弄了一天,后来,查看了《3D游戏编程大师技巧》的源码的示例,一看,他那没有裂缝,我这代码是按照书本的思路去实现的,经过一翻挣扎把它的代码移植到自己的代码,再经过一翻大修改,F5调试运行,结果仍然有裂缝!我觉得奇怪了,于是再对照了一遍代码,原来还有一个编译开关,于是又把另一编译开关所在的代码复制过来,然后再修改,在修改过的过程中遇到了不少的问题,先是变量的命名,然后就是有些变量没改,导致出现了很奇怪的错误,经过一翻纠正,我怀着兴奋的心情按F5,结果裂缝的问题解决了!



//使用快速版本有裂缝

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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


这是有裂缝的版本



//使用了精确计算的版本,没裂缝

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//#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软引擎之三角形光栅化内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部