您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 计算机图形学基础大作业_陈立人
计算机图形学基础大作业茶壶的造型与渲染计算机图形学基础大作业茶壶的造型与渲染陈立人2014011205一、实验简介本小组的作业借鉴了老师布置的参考作业,并在此基础上做了一定拓展。本小组有三位同学:王舒鹤同学主要负责了矢量字库部分的工作;刘怀宇同学主要研究了光线追踪算法;我主要负责了茶壶的造型和渲染工作。二、实验内容1.茶壶框架的绘制基于文献What,TeapotAgain?,根据给出的控制点,用三次贝塞尔曲线差值出茶壶四个部分的轮廓线。计算机图形学基础大作业茶壶的造型与渲染Figure1茶壶轮廓线其中,壶嘴和壶盖部分的三维造型通过对轮廓线的旋转得到;把手和壶嘴部分是根据论文中给出的控制点的深度信息,用贝塞尔曲面造型得到。得到的茶壶模型是一系列的点。我将茶壶模型定义为四个曲面的集合,每曲面由一系列的小四边形组成,每个点用齐次坐标表示。通过对曲面的投影变化,得到了茶壶在视平面内的投影。基于Bresenham算法,画出了茶壶的网格线。计算机图形学基础大作业茶壶的造型与渲染Figure2三维茶壶的网格表示2.三维茶壶的光照渲染起先,使用Phong模型对茶壶上每个三角形平面进行上色,每一个小三角形的光强一致。基于Phong光照模型计算出环境光、漫发射光、镜面反射光以及总的光强,然后利用多边形扫面线填充算法在视平面上所对应的投影位置着色,并用ZBuffer算法实现三维物体的消隐。着色效果不是很理想,曲面上高光部分马赫带效应严重,壶表面不光滑。Figure3Phong光照模型为了改善着色效果,参考了Gouraud平滑着色法,通过差值的方法让曲面上光照强度连续变化。取相邻四个平面的法向量平均值作为曲面上点的法向量,再由Phong计算出该点的光照强度。Gouraud方法采用了双线性差值即通过三个控制点对三角形面进行线性差值,与之不同的是我们采用了仿射变换—用四个控制点对一个四边形面进行线性差值。由于二维平面上四个点到四个点的线性映射是过定的,因此该线性映射通过矩阵求伪逆得到。计算机图形学基础大作业茶壶的造型与渲染Figure4平滑后的茶壶模型由上图可见,通过差值后得到的光照模型效果明显更优。3.曲面的纹理映射基于已经实现的仿射变化,我们能在曲面与纹理的图片之间建立映射关系。为了演示效果,我们在壶身上提上了照片。在纹理映射时,我们遍历视平面上的每个点,然后通过投影变换得到其在纹理图片中的位置,然后将纹理的RGB值作为系数与基本光照值相乘,最终得到该点的亮度。Figure5纹理映射后的茶壶表面计算机图形学基础大作业茶壶的造型与渲染Figure6纹理映射的局部由于是对视平面内的像素进行遍历,所以纹理的分辨率只受原图分辨率的限制。但如果原图分辨率过高,那么相当于隔若干行和若干列对原图进行采样,反而会显得不自然。在后续工作中,可以根据大致的显示比例对原图进行高斯平滑后再进行采样。4.茶壶表面的立体字造型与显示对立体字的构型分三个步骤:首先是基于图片提取出字的轮廓,该部分工作是由王舒鹤同学完成的,对轮廓的提取不仅需要知道轮廓的位置,还需要知道轮廓的方向,即字体在轮廓线的哪一边,尤其是对于有空心部分的字体。轮廓线的方向决定了立体字侧面的内外方向。第二步是对立体字侧面进行造型。将立体字侧面看成一个柱体,在第一步中提取出轮廓后,将其映射到茶壶表面,即得到了这个柱体的底面的坐标。然后将曲面上各控制点沿其法向量拉伸后,即可得到立体字的另一个面的所有点。然后将拉伸前后的点放在一起即得到了立体字的侧面。第三部是绘制立体字的顶面。将原曲面上各控制点沿法向量拉伸后,在新的曲面上进行计算机图形学基础大作业茶壶的造型与渲染纹理映射。需注意的是,只对有字的部分着色。着色完成后,立体字顶面也就绘制好了。Figure7立体字造型由上图可见,立体字整体效果明显,侧面也有光照渐变。但立体字还是有一些小瑕疵。可能原因是没有处理好各种边界和极限情况,导致图片局部的光照强度和深度出现异常数值。5.人脸识别与图像自动裁剪老师提示我可以把照片贴在茶壶上,于是我在纹理部分把它实现了。为了增强趣味性,我加入了这个人脸识别模块,用来自动的识别并裁剪出人脸部分,贴在茶壶上。人脸识别的关键代码参考了MATLABvisiontoolbox的FaceTrackingWebcamExample.m。该人脸识别模块是基于KLT算法提取图片中特征点来实现的人脸的跟踪;通过对比前后两帧中的变换关系,即可估计出目标的位移。最后通过仿射变化将图形旋转并平移,得到脸部图像。计算机图形学基础大作业茶壶的造型与渲染Figure8人脸识别与自动裁剪6.GUI界面的编写为了更方便地展示本小组的工作,我们编写了图形界面。打开potGUI.m文件,按F5运行,出现的是茶壶绘制的主界面。按上下左右方向键能旋转茶壶;按wsad四个键能平移茶壶位置;按qe两个键能让视点前进或后退。Figure9茶壶主界面主界面下放有四个键:单击‘Detail’键会显示茶壶造型的基本轮廓线,如Figure1;单击计算机图形学基础大作业茶壶的造型与渲染‘Render’键会对茶壶进行光照渲染,如Figure4;单击‘Texture’键会在茶壶表面进行纹理映射和立体字的绘制,结果如Figure7;单击‘Face’键进入头像采集界面,如下图:Figure10头像采集界面在预览窗口下方有三个按键:单击‘Clear’键能重新提取特征点,用来刷新人脸识别结果;单击‘Capture’键能采集图像,预览效果如Figure8所示;单击‘Exit’键可退出界面,回到主界面。若你在该窗口中至少采集了一张照片,那么在你退出之后会将最后一次采集的照片贴在茶壶上。注:计算机图形学基础大作业茶壶的造型与渲染1)光照渲染和纹理映射都需要一定的运行时间(大概10秒左右),单击按键后,当按键显示Waiting时请勿点击其他按键。2)在运行纹理映射或采集人脸图像前需要至少运行一次光照渲染,此时光照渲染的按键为Waiting状态,请耐心等待。3)在头像采集界面中,请通过单击Exit按键退出,而非通过单击窗口的关闭按钮,否则可能导致该进程无法正常终止。三、实验总结与感想本次实验中,自己理解并在matlab上手动实现了Bezier曲线算法,Bresenham算法,多边形扫描填充算法,Phong光照模型,ZBuffer算法等计算机图形学中的经典算法,在自己写这些算法的过程中加深了对这些算法的思想与精髓的理解。除了算法本身,在这次作业中,我也进一步锻炼了我的调试能力,我还对代码运行速度进行了优化,第一个版本的光照渲染需要运行一分钟左右,通过代码计时工具,我对耗时较多的部分进行了简化,最终把渲染时间降到了10秒左右。整体而言,我对本次实验的结果比较满意。另一方面,本次实验也有一些还可以改进或拓展的方向:为了计算简便,我没有实现视景体裁剪的步骤,如果空间内物体数量较多,视野范围较小,那么我写的光照模型可能运算速度会打不少折扣;由于自己写的代码难免有一些bug,渲染出的模型在一些边界区域还是会出一些问题,比如较暗的边界上中有一个亮点。还有一个问题是创新性不是很强。诚然,这部分关于茶壶的工作是图形学中最最基础也是最最经典的部分,要达到创新的境界还有很长的路要走。最后,感谢老师的悉心指导!计算机图形学基础大作业茶壶的造型与渲染四、附录代码清单:bresLine.mBresenham算法画直线facedetect.m人脸识别及图像裁剪gridView.m茶壶的网格线显示interpolation.m基于仿射变换的差值lightPoint.m计算控制点光照强度normVector.m计算控制点处的法向量phong.mPhong光照模型potGUI.m总体GUI界面projection.m视平面投影render.mplaner的光照渲染renderSurf.m渲染单个曲面renderSurfaces.m渲染多个曲面renderSurfT.m曲面纹理映射renderVerticalText.m生成立体字rotateModel.m旋转模型sideface.m生成立体字侧面stretchSurf.m将曲面沿法向拉伸teapotModel.m生成茶壶模型translateModel.m平移模型计算机图形学基础大作业茶壶的造型与渲染五、参考文献[1]BlinnJF.What,teapotsagain[J].IEEEComputerGraphicsandApplications,1987,7(9):61-63.[2]PhongBT.Illuminationforcomputergeneratedpictures[J].CommunicationsoftheACM,1975,18(6):311-317.[3]ShiJ,TomasiC.Goodfeaturestotrack[C]//ComputerVisionandPatternRecognition,1994.ProceedingsCVPR'94.,1994IEEEComputerSocietyConferenceon.IEEE,1994:593-600.
本文标题:计算机图形学基础大作业_陈立人
链接地址:https://www.777doc.com/doc-2042697 .html