课程设计 3 圆环动态纹理演示系统
3.1 设计目标
设定光源和视点都位于z轴正向。在三维坐标系中,以原点为圆环中心,绘制动态旋转的无光照和有光照的圆环线框模型、圆环表面模型和圆环纹理模型。选择不同的纹理位图,动态添加到圆环上。详细功能要求如下:
1.使用静态切分视图,将窗口切分为左右窗格。左窗格为继承于CFormView类的表单视图类CLeftPortion,右窗格为一般视图类CTestView。
2.右窗格的三维坐标系原点位于客户区中心,x轴水平向右为正,y轴铅直向上为正, z轴垂直于屏幕指向观察者。
3.左窗格放置代表“圆环控制”、“模型分类”、“光源开关”、“明暗处理”、“纹理映射”的5个组框控件。“圆环控制”组框提供“环体半径”、“截面半径”、“表面级数”和“截面级数”4个滑动条;“模型分类”组框提供“线框”、“表面”和“纹理”3个单选按钮;“光源开关”组框提供“关”和“开”两个单选按钮;“明暗处理”组框提供“Gouraud”和“Phong”2个单选按钮;“纹理映射”组框提供1个“选择纹理”按钮和1个显示纹理缩略图的Picture静态控件,“选择纹理”按钮调用“打开文件”通用对话框,可以选择如图Ⅲ-1所示的3张不同的bmp位图对圆环进行纹理映射。默认情况下,“模型分类”组框内选择的是“线框”,“光源开关”选择的是“开”,同时禁用“明暗处理”组框和“纹理映射”组框。
(a) (b) (c)
图Ⅲ-1纹理位图
4.圆环在右窗格内以客户区中心为体心绕x轴转动。根据左窗格设置的参数值,分别绘制无光照和有光照的反走样线框模型、无光照和有光照的Gouraud或Phong插值表面模型,无光照和有光照的Phong插值纹理模型。
3.2设计效果
1.
在左窗格的“模型分类”组框内选择“线框”后,“光源开关”组框内选择“关”,右窗格内绘制的无光照消隐圆环线框模型,如图Ⅲ-2所示。
2.
在左窗格的“模型分类”组框内选择“线框”后,“光源开关”组框内选择“开”,右窗格内绘制的光照消隐圆环线框模型,如图Ⅲ-3所示。
3.
在左窗格的“模型分类”组框内选择“表面”后,“光源开关”组框内选择“开”,“明暗处理”组框内选择“Gouraud”,右窗格内绘制的光照消隐圆环表面模型,如图Ⅲ-4所示。
4.
在左窗格的“模型分类”组框内选择“表面”后,“光源开关”组框内选择“开”,“明暗处理”组框内选择“Phong”,右窗格内绘制的光照消隐圆环表面模型,如图Ⅲ-5所示。
5.
在左窗格的“模型分类”组框内选择“纹理”后,“光源开关”组框内选择“关”,“明暗处理”组框内默认为“Phong”,右窗格内绘制的无光照纹理映射圆环模型,如图Ⅲ-6所示。
6.
在左窗格的“模型分类”组框内选择“纹理”后,“光源开关”组框内选择“开”,“明暗处理”组框内默认为“Phong”,右窗格内绘制默认贴图为Ⅲ-1(a)的纹理映射圆环模型,如图Ⅲ-7所示。
7.
在左窗格的“模型分类”组框内选择“纹理”后,“光源开关”组框内选择“开”,“明暗处理”组框内默认为“Phong”,通过“纹理映射”组框内的“选择纹理”按钮更换纹理位图为图Ⅲ-1(a)或(c)后,右窗格内绘制的纹理映射圆环模型,如图Ⅲ-8和Ⅲ-9所示。
3.2设计效果
要求完全使用Visual
C++的MFC框架完成,CDC类的成员函数只能使用SetPixel()一个函数,圆环的线框模型使用自定义的CLine直线类绘制,圆环表面模型使用有效边表算法填充。不允许使用OpenGL或D3D图形库。