hnlbzkk / Graphic

图形学自学任务
3 stars 0 forks source link

Cpp

图形学自学任务

百度:图形学自学任务: https://wenku.baidu.com/view/ec42d707bceb19e8b9f6ba13.html

本人C/C++不熟悉,一直使用Java,所以在这个程序中,将.h文件理解为Java的接口类,纯定义方法名,具体实现就是对应的.cpp文件

需要库文件: easyx.h 自行百度,如果使用vs能自动识别并导入

无BUG可以全部实现

下面开始解释各个步骤,能更快理解:(全部只针对.h文件,对应的cpp都是实现)

一、二:data.h 定义 点、矩阵、向量、三角形、正方形、正方体 以及 固定的常量如:图片大小,窗口大小、裁剪大小、步长、π 等

三:vectorOperate 向量加减、点积、叉积和其他算法

四:transform 坐标变换算法

五:Line 画线算法,使用的是 DDA 算法。这里写了裁剪窗口的drawWindow()

六:Blinn-phong光照算法

七:Cube 在gouraud算法基础上(已删)使用phong着色算法 画点/线/三角面/四边形/立方体 有model、flagt、flagl、flagc对应着之后的线框模式、纹理、光照、裁剪(裁剪在线框模式下)

八:Texture 纹理算法,使用z-buffer算法

九:cut 使用最基础的直线裁剪算法

十:main函数的keyboard方法,改变步长发生移动

所以成品可以支持:ESC键 退出 绘制线框模式(“o”“O”键) 是否使用纹理(“t”“T”键) 是否使用光照(“l”“L”) 在线框模式下是否使用裁剪(“c”“C”)非线框模式下,是将超出窗口直接涂黑,也不算具体算法

Ps:本来是想整个vs文件上传,太大了,只上传具体源码,自行创建文件copy

需在 本目录存一个 1.jpg 文件