/Fundamentals-of-Computer-Graphics

CHD 2022 experiment & curriculum design - Fundamentals of Computer Graphics

Primary LanguageC++GNU General Public License v3.0GPL-3.0

Fundamentals-of-Computer-Graphics

CHD 2022 experiment & curriculum design - Fundamentals of Computer Graphics

实验1

例题2-7   2-8   2-9   2-10

例题2-7

从起点p0(-100, -50)到终点p1(100, 50)绘制一条1像素宽的蓝色直线段。

例题2-8

将客户区矩形左右边界各收缩100个像素绘制重叠的矩形和圆角矩形。矩形边框为1像素宽的蓝色边界线,矩形内部填充红色,圆角取(50, 50)。

例题2-9

以(-250, 50)为左下角点,以(250, 150)为右上角点绘制矩形,使用红色HS_BDIANGONAL阴影模式填充。以(-250, -150)为左下角点,以(250, -50)为右上角点绘制矩形,使用红色填充。

例题2-10

将客户区矩形左右边界各收缩100个像素,分别绘制矩形、矩形内切圆和矩形内切椭圆。绘制过程按圆、椭圆和矩形的顺序完成。设定圆、椭圆和矩形的边界线为1像素宽黑色实线,内部全部使用透明画刷填充。

实验2

课后2-2   2-4   2-5

课后2-2

使用MFC设计一个长方形类CRectangle,使用对话框输入长方形的长度和宽度,在客户区输出长方形的周长和面积。
参考:https://yxchangingself.xyz/posts/MFC_get_input_by_Dialog/ (CC BY-NC 4.0)

课后2-4

把一个半径为R的圆40等份,以每个等分点为圆心,以r为半径画圆。试编程绘制变化的环。
参考:https://blog.csdn.net/qq_53567489/article/details/120517637

课后2-5

以屏幕客户区中心为二维坐标系原点,绘制如图2-65所示的五边形与五角星的嵌套结构。试取递归深度n为3,请在OnDraw()函数中编程绘制。
参考:https://blog.csdn.net/qq_49435172/article/details/120427771

实验3

课后3-3   3-4   3-8

课后3-3

将中点Bresenham算法推广到绘制任意斜率的直线段。使用鼠标选择直线的起点和终点坐标(对话框输入坐标),试以屏幕中心为二维坐标系原点,绘制任意斜率的直线段。要求编制CLine类,成员函数为MoveTo()和LineTo()。对边界像素的处理原则是“起点闭区间,终点开区间”,即要求所绘制直线达到CDC类的MoveTo()和LineTo()函数的绘制效果。
参考:示例程序example3_1

课后3-4

使用对话框输入直线段的起点和终点坐标,以屏幕中心为二维坐标系原点,绘制恒定颜色的任意斜率的反走样直线段。
参考:示例程序example3_2

课后3-8

使用对话框输入直线的起点和终点坐标,以屏幕中心为二维坐标系原点,给定直线的起点颜色(如红色),终点颜色(如蓝色)。请使用中点Bresenham算法绘制任意斜率的颜色渐变直线。
参考:示例程序example3_2

实验4

课后4-3   4-7   4-9

课后4-3

每个正方形由两个三角形小面组成,可以通过填充三角形小面完成正方形的填充任务,请编程实现并观察在每个正方形的三角形小面连接处是否填充完整。
参考:示例程序example4_1

课后4-7

边缘填充算法中,像素的取补范围为每条边到屏幕整个客户区的右边界。请设置包围盒,并使用边缘填充算法编程实现多边形的填充。
参考:示例程序example4_2

课后4-9

设定八连通区域边界色为黑色,填充色为蓝色,请使用八邻接点种子填充算法编程填充八连通域。请注意图中两个四边形区域的连接处的局部放大效果。
参考:示例程序example4_3

实验5

课后5-3   5-6   5-8(选做)

课后5-3

建立坐标系xOy,原点O位于屏幕客户区中心,x轴水平向右,y轴垂直向上。在原点下方B点,悬挂一边长为a的正方形。要求单击“动画”按钮时启动计时器,正方形按逆时针方向绕自身中心(B点)匀速旋转,请编程实现。
参考:示例程序example5_1

课后5-6

使用对话框输入直线段的起点坐标和终点坐标。绘制并输出裁剪结果。请使用Cohan-Sutherland算法编程实现。
参考:示例程序example5_2

课后5-6_2

使用对话框输入直线段的起点坐标和终点坐标。在屏幕客户区左侧区域绘制未裁剪的直线段与“窗口”,在屏幕客户区右侧绘制“视区”并输出裁剪结果,这里需要用到窗视变换公式,请使用Cohen-Sutherland算法编程实现。
参考:示例程序example5_2_2

课后5-8(选做,未完成)

在屏幕客户区绘制一组大小不同的正六边形图案,每个正六边形相对于其相邻的正六边形有轻微的旋转。使用鼠标移动正方形代表的放大镜(鼠标指针位于放大镜中心)的图案基于Liang-Barsky裁剪算法进行动态裁剪,并在放大镜内绘制被裁剪正六边形图案的放大部分,默认的放大部分为2,请使用MFC编程实现。要求放大倍数可以使用工具栏的+和-或鼠标的左右键调整。
参考:示例程序example5_3

实验6

课后6-3   6-4

课后6-3

常用的两种斜平行投影是斜等侧和斜二侧。请使用MFC编程绘制立方体的斜等侧图和斜二侧图。
参考:示例程序example6_1

课后6-4

使用斜等侧投影绘制斜等侧投影图及三视图,要求使用包含平移参数的三视图变换矩阵编程实现。
参考:示例程序example6_2

实验7

课后9-1   9-7   画家算法

课后9-1

使用MFC编程实现正六面体的透视投影动态隐线算法,动态指使用方向键可以对正六面体进行任意角度的旋转。
参考:示例程序example7_1

课后9-7

Z-Buffer算法的代表性案例是绘制3个相互交叉的红、绿、蓝条,请使用MFC编程实现。
参考:示例程序example7_2

画家算法

采用画家算法,完成叠压条(交叉条)表面模型绘制编程,运行并显示结果。

实验8

课后10-3   10-5   10-14

课后10-3

连接正六边形的中心和每个顶点得到6个正三角形。从表面角度设置颜色,将6个正三角形的颜色分别设置为红色、黄色、绿色、青色、蓝色和品红。从顶点角度设置颜色,7个顶点的颜色分别设置为红色、黄色、绿色、青色、蓝色和品红,中心点的颜色设置为白色。请分别使用平面着色模型和光滑着色模型填充六边形。
参考:示例程序example8_1

课后10-5

绘制立方体透视消隐表面模型。使用单点光源对立方体进行照射,明暗处理模型选为Phong。选择不同颜色的光源,为立方体选择不同颜色的材质,演示光源与材质的交互作用光照效果。 参考:示例程序example8_2

课后10-14(未完成)

采用数码相机拍摄六张照片,将照片依次映射到可以旋转的正六面体表面。
参考:示例程序example8_3

课程设计

题目:光照球演示系统
任务:设计一个多光源光照球演示系统
功能:

  1. 可以采用菜单或其他方式选择光源位置(位置设定为上(Y轴正向)、右(x轴正向)、前(z轴正向));
  2. 能够选择光源颜色(红(右)、绿(上)、蓝(前)或其他颜色);
  3. 选择材质(默认红宝石、绿宝石、金色或其他颜色);
  4. 可以通过选择光源的位置,光源颜色和材质实现不同的光照球效果;
  5. 光源可以在X轴,Y轴和Z轴上移动或在平面上以某种轨迹动态移动(比如:在xoy平面、yoz平面、xoz平面上绕Z轴、X轴、Y轴沿圆形轨道运行)(选做)。

参考:立方体光照模型代码;地理球消隐模型代码。