计算机图形学课程设计
《虚拟时钟》
1.实验目的
- 掌握基本三维建模软件 Blender的基本建模方法。
- 掌握虚拟现实引擎 WorldViz Vizard呈现三维场景的方法。
- 掌握三维模型呈现软件Assimp预览三维模型的方法。
2.实验方法
2.1建模阶段
- 简要描述设计三维钟表表盘、表针的主要步骤并给出截图。
设计表盘: 首先设计外表盘。添加两个半径不同的圆柱体,使圆心重合、上表面重合,通过布尔修改器求差值操作获得外表盘,设置颜色为黑色。 再添加一个圆柱体,设置适当大小,使其正好放置在外表盘中间作为内表盘,两者几何中心重合,设置颜色为白色。 然后设计表盘刻度,其中0点,3点,6点及9点的刻度为圆柱体,其他时间刻度为长方体,调整合适大小,放置在实际钟表的相应刻度处,长方体刻度都集中指向圆心,刻度统一设置颜色为黑色。
三维时钟表盘和指针:
- 给出钟表刻度放置位置及角度的计算公式并解释。
以表盘中心为坐标原点,垂直向上为y轴,水平向左为x轴建立坐标系,设顺时针旋转为正,y轴正半轴偏转角度为0,一下角度都是相对于y轴正半轴的偏转角度。
只设计能整除5的刻度,共12个,其中0点、3点、6点及9点的圆柱体刻度分别放置在表盘的上右下左四个方向上,这4个刻度中每相邻两个之间有两个长方体刻度。
设表盘半径为r,表盘中心位于建模环境中三维坐标的中心点上,坐标为(0,0,0),0~11点刻度的偏转角度为α=i30度,相邻两个刻度之间角度差为30度。坐标为(rsin(α),0,r*cos(α)),因为表盘位于xOz平面内,所以y坐标均为0,只有x、z坐标有变化。
2.2呈现阶段
-
简要描述程序执行流程并给出钟表仿真的截图。
准备阶段:import所需的各种包,包括viz、、vizact、datetime、math。
加载资源:利用addChild()函数加载表盘、时针、分针和秒针的obj文件,并利用setPosition()函数设置每个组件的位置,使其呈现结果位于窗口内合适位置。为了使场景美观,使用addChild()函数加载天空盒文件“sky_day.osgb”。
编写定时器回调函数:利用Python的datetime类查询系统当前时间,记录小时、分针和秒数,然后计算相应表针的旋转角度,利用setEuler()函数更新表针的角度和位置。
设置定时器:利用vizact类中的ontimer()函数,vizact.ontimer(1,rotate),调用定时器回调函数rotate(),设置更新频率为每秒一次。 -
给出表针旋转角度的计算公式并解释。
h、m、s表示当前系统的小时数、分钟数和秒钟数。
时针: 初始位置为指向9点处。 小时数为h时偏转角h_r=(12-(h-9)%12)30,由于表盘上一小时为30度,所以要乘以30。设置欧拉角hourhand.setEuler(0,0,h_r),其中h_r为滚动角。
分针: 初始位置为指向0点处。 分钟数为m时偏转角m_r=-m6,由于表盘上一小格为6度,所以要乘以6。设置欧拉角minutehand.setEuler(0,0,m_r),其中m_r为滚动角。
秒针: 初始位置为指向1点处。 秒钟数为s时偏转角s_r=-(s-5)*6,由于表盘上一小格为6度,所以要乘以6。设置欧拉角secondhand.setEuler(0,0,s_r),其中s_r为滚动角。 -
给出表针相对于钟表圆心偏移的计算公式并解释。
在Blender里进行表针建模时,已经设置好表针相对于表盘的偏移,程序里不需要计算偏移公式。表盘位于xOz平面内,设置表针有不同的y坐标,x、z坐标相同,即可实现表针相对于表盘的偏移。
3.实验心得
通过本次课程设计,初步掌握了三维应用软件的基本开发流程。熟悉了利用三维建模软件Blender进行建模的操作,学会用虚拟现实引擎(三维渲染呈现软件)WorldViz Vizard编程设置并呈现三维场景,还学会了用三维呈现软件Assimp预览三维模型。实验中的软件操作方法都是依靠网上查找教程自学,所以通过实验也很好地锻炼了自己的自学能力,学会查找、搜集有用信息,有效地转化为自己的知识。让我印象深刻的是Blender的强大建模功能,看到许多利用Blender制作的模型、人物和动画,非常逼真,感受到计算机图形学的巨大作用。本次课设的理论内容比较少,多是实践操作,而图形学最终就是要应用的。目前自己对这门学科的认识还远远不够,希望自己今后对这门学科有深入学习,不是仅仅学会使用一个工具,而要学会通过工具来实现自己的想法,创造价值。