长方体体的光照效果_计算机图形学课程设计(编辑修改稿)内容摘要:

rush。 (RGB(faces[j].I*255,faces[j].I*255,faces[j].I*255+40))。 (amp。 Brush)。 ()。 (p[0])。 for(int i=1。 i4。 i++) (p[i])。 (p[0])。 ()。 ()。 ()。 13 四、 流程图 开 始定 义 长 方 体 顶 点 列 表 , 面 列表 , 每 个 面 的 漫 反 射 系 数 ,环 境 光 反 射 系 数 , 视 线 方 向定 义 点 光 源 位置 , 环 境 光 光 强进 行 3 维 图 形 变 换计 算 变 换 后 的 各 个 面 的 外 法 向量 , 面 中 点 坐 标 , 光 照 方 向判 断 各 个 面 可 见 性 , 计 算 各个 面 的 平 均 光 照 强 度在 屏 幕 上 输出 可 见 面结 束对 正 方 体 进 行 平 行 投 影变 换 , 窗 口 视 区 变 换 14 五、源程序 文件 //定义三维齐次向量结构体 typedef struct Vector3D { float x。 float y。 float z。 int f。 //f 表示所在的平面的编号 }VECTOR。 //定义三维齐次坐标结构 typedef struct tagHOMOCOORD { float x。 float y。 float z。 float w。 }HOMOCOORD。 //定义面的结构 typedef struct tagPLANE { int v0, v1, v2, v3。 15 VECTOR n。 //外法向量 HOMOCOORD center。 //中心点 float Id。 //漫反射光强 int flag。 float kd。 //漫反射率 float ka。 //环境光反射率 float Ie。 //环境光反射光强 float I。 //光强 }PLANE。 //定义点的结构,需要浮点数的 x, y typedef struct tagMYPOINT { float x,y。 }MYPOINT。 public: VECTOR CalculateVector(HOMOCOORD start, HOMOCOORD end, int face)。 //计算一个 3 维向量的函数 , //从 start 点指向 end 点的属于 face 面的向量 VECTOR VecCross(VECTOR vec1, VECTOR vec2)。 //计算两个向量叉积,即外法向量 float InnerProduct(VECTOR vec1, VECTOR vec2)。 //计算两个向量 16 的内积 float GetModule(VECTOR vec)。 //计算向量的模 void RotateY(int angle)。 //绕 y 轴逆时针旋转 void RotateX(int angle)。 //绕 x 轴逆时针旋转 void DrawMy3DGraphics()。 //绘制长方体 virtual ~CDraw3DView()。 protected: HOMOCOORD illuminant。 //定义光源坐标 float Ip。 //定义光源光强 float Ia。 //环境光光强 VECTOR *light_vec。 //各个面的光照方向指针 HOMOCOORD *pts。 //三维顶点指针 MYPOINT *pts2D。 //自定义的二维浮点数结构,表示变换后的二维点 PLANE *faces。 //长方体的面指针 int ptn,fn。 //顶点个数与面的个数 文件 int x_angle = 0。 int y_angle = 0。 void CDraw3DView::DrawMy3DGraphics() { 17 int i。 //形体定义 ptn=8。 pts=new HOMOCOORD[ptn]。 //设置长方体 pts[0].x=1。 pts[0].y=2。 pts[0].z=1。 pts[0].w=1。 pts[1].x=1。 pts[1].y=2。 pts[1].z=1。 pts[1].w=1。 pts[2].x=1。 pts[2].y=2。 pts[2].z=1。 pts[2].w=1。 pts[3].x=1。 pts[3].y=2。 pts[3].z=1。 pts[3].w=1。 pts[4].x=1。 pts[4].y=2。 pts[4].z=1。 pts[4].w=1。 pts[5].x=1。 pts[5].y=2。 pts[5].z=1。 pts[5].w=1。 pts[6].x=1。 pts[6].y=2。 pts[6].z=1。 pts[6].w=1。 pts[7].x=1。 pts[7].y=2。 pts[7].z=1。 pts[7].w=1。 ///给定义面的指针分配内存; fn=6。 faces=new PLANE[fn]。 //设置立方体各面 faces[0].v0=0。 faces[0].v1=1。 faces[0].v2=2。 faces[0].v3=3。 faces[1].v0=4。 faces[1].v1=5。 faces[1].v2=1。 faces[1].v3=0。 faces[2].v0=5。 faces[2].v1=6。 faces[2].v2=2。 faces[2].v3=1。 faces[3].v0=6。 faces[3].v1=7。 faces[3].v。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。