其他分享
首页 > 其他分享> > 计算机图形学实验

计算机图形学实验

作者:互联网

文章目录

实验介绍

实验背景

大二学期的计算机图形学课程,内容包含扫描转换算法裁剪算法图形变换三维图形投影和消隐曲线和曲面;从完成情况来看虽算不上十分出色,但也花了很多时间和精力,代码必然存在一些冗余、不足和待改进之处,故公开和大家交流和参考

编程环境

实验内容

实验一 —— 扫描转换算法

(●’◡’●)效果展示
实验题1-1:绘制任意斜率的直线
实验题1-3:用中点画圆法画圆
实验题1-4:中点画圆法画椭圆
实验题1-5:中点画圆法画圆弧
实验题1-7:具有宽度的直线
实验题1-8:具有宽度的圆和椭圆

实验一中的代码并未进行优化,从截图可以看出,UI界面不够友好(毕竟刚学习这门课),操作起来比后面的实验更复杂


实验二 —— 裁剪算法

(●’◡’●)效果展示
实验题2-1:Cohen-Sutherland算法实现直线段裁剪
实验题2-2:Liang-Barsky算法实现直线段裁剪
实验题2-5:综合算法实现多边形裁剪(自创)

多边形裁剪:该算法实现了对任意多边形的裁剪,程序中设置多边形的顶点为固定的9个。算法上的实现分为三步:


实验三 —— 图形变换

(●’◡’●)效果展示
实验题3-2:实现多步复合变换,并显示动画效果
实验题3-3:任意直线的对称变换

不足之处:各种二维变换在数学上理论上都能得到结果,但实现在程序里难免有舍入,会导致一些四边形放大倍数时,四边形的同一边可能有错位


实验四 —— 三维图形投影和消隐

(●’◡’●)效果展示
实验题4-4和4-5:完成图形绕某一坐标轴旋转(包括三视图和正等轴测图)

为了完成正十二面体的旋转,作者查了很多资料,最终得以实现,是一件很有趣的事情,如下是源码中坐标对应的点,如有需要可以参考
在这里插入图片描述

不足之处:由于作者采用的消隐算法是外法线消隐算法,此算法只对凸多面体有效,这是该消隐算法的局限;且该消隐算法是按照每个面的边数都相等的多面体来具体实现的,于是对于由三角形和四边形等组成的混合型多面体无法在原有算法中实现,若有需要还得进一步修改


实验五 —— 曲线和曲面

(●’◡’●)效果展示
实验题5-2绘制Bezier曲线
实验题5-4绘制B样条曲面

存在问题:Bezier曲线的代码中对点采用递归方式计算,当增加一个点时,需要对之前已经计算过的低阶Bezier函数重新进行计算,使得空间消耗和时间消耗增加(当时并未进行优化)。所以当点越来越多时,程序运行速度会大大降低,甚至可能程序崩溃(当有10几个点时)


实验源码

本实验部分内容可通过资源下载,包含Bezier曲线和B样条曲面正十二面体旋转——外法线消隐直线和多边形裁剪

通过GitHub免费下载完整源码,click here

标签:多边形,计算机,消隐,裁剪,图形学,算法,实验,线段
来源: https://blog.csdn.net/weixin_42815846/article/details/113099023