“问题五十五:怎么用ray tracing画Utah teapot (bicubic bezier patches)”原文链接:
http://blog.csdn.net/libing_zeng/article/details/54565443
当时输出的图形,着实对不起观众。
再次贴图如下:
这个图形对应的参数信息:将每一个patch分成80*80个小曲面片,耗时14779s。
花费了这么长时间,但是输出的图形是这个鬼样子。
后面,准备使用三角形细分bicubic bezier patches时,发现:
数据有点点“异常”。
如果直接根据patches数组中的数据到vertices数组中获取顶点数据,拿到的顶点数据其实是“错位的”。
正确的做法应该是:先将patches数组中的所有数据的值都“减1”。
在代码中对应修改如下:
修改数据后的输出图形:
红色框标注的是修改后的图形;其他3个是修改前的图形。仅从耗时来看,修改后输出图形所需时间要少得多。
看看修改后的图形:
前一个是单patch分成4*4个小曲面片,耗时74s;
前一个是单patch分成16*16个小曲面片,耗时285s;
尽管,还是有不少噪声点,但是效果勉强可以接受。
完整代码链接:http://download.csdn.net/detail/libing_zeng/9804197
后面,我们会通过三角形细分的方式来trace这个图形,效果当然会更好。