2023年计算机图形学大作业报告灯光纹理映射.pdf
《2023年计算机图形学大作业报告灯光纹理映射.pdf》由会员分享,可在线阅读,更多相关《2023年计算机图形学大作业报告灯光纹理映射.pdf(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、大 作 业 报 告实验课程名称:计算机图形学_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学 生 姓 名:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _班 级:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学 院(系):学生学号:指 导 教 师:成 绩:一、目的这次大作业是作为这学期的最后的一个考核,所以必须要用到所有的本学期学过的知识,比如如何画出
2、三维图形,如何在图像上在图像上添加纹理光照,如何使用鼠标和键盘进行人机交互等。二、重要功能模块设计1 矩阵运算模块的设计:功能描述:程序启动后,这部分功能模块会为整个应用程序提供算法支持,具体是矩阵直接的互相运算,在 2D 向 3D转化过程中会起到很重要的作用。代码设计:f l o a t v v (f l o a t *v 1 ,f 1 o a t *v 2)r e t u r n v 1 0 *v 2 0 +v 1 1 *v 2 1 H-v 1 2 *v 2 2 ;)v o i d v x v(f 1 o a t *n,f l o a t *v l,f l o a t *v 2)。n 0
3、=v l 1 *v 2 2 -v 1 2 *v 2 l ;n 1 =v 1 2 *v 2 0 -v l 0 *v 2 2 ;n 2 =v l 0 *v 2 1 -v 1 1 *v 2 0 ;v o i d l o a d I d e n t i t y (M a t r i x m)M a t r i x i d e n t i t y =1.0,0.0,0 .0,0.0 ),0.0 ,1.0,0 .0,0.0 ,0.0,0.0 ,1.0,0.0),。0.0,0.0,0.0,1.0 ;。f o r(i n t i =0;i 4;i+)。f o r(i n t j =0;j 4 ;j+)m i
4、j =i d e n t i t y i j ;v o i d p r e M u 1 t i p l y (M a t r i x p,M a t r i x m)i n t ij;M a t r i x t;。f o r (i =0;i 4;i +)f o r(j =0;j 4;j +)。t i j =p i 0 *m 0 j +p i 1 *m 1 j +p i 2 *m 2 j +p i 3 *m 3 j ;f o r (i =0;i 4;i +)3。f o r(j =0;j 4 ;j +)。m i j =t i j ;)2显示图形模块的设计:功能描述:该模块重要为所要画的图形进行描述
5、,是绘制图形的重要函数,通过调用这个功能模块就能画出用于显示给用户的图形。代码设计:/2 D图形的d i s p l a y函数v o i d d i s p 1 a y ()g l C 1 e a r (G L _ C O L O R _ B U F F E R _ B I T);。i f(n =1&t y p e =G L _ L I N E _ S T R I P)。g l B e g i n(G L _ P O I N T S);g l V e r t e x 2 i v (v e r t 0 );。g l C o l o r 3 f (0,0.5,0 .5);g l V e r t
6、e x 2 i (w i d t h-v e r t 0 0 1,v e r t 0 1 );。g 1 E n d O ;)g I C o 1 o r 3 f (0,0.5,0.5);g l B e g i n (G L _ L I N E S);。g 1 V e r t e x 2 i (w i d t h /2,0);g l V e r t e x 2 i (w i d th/2,h e i g h t-1);。g l E n d O ;。g l B e g i n (t y p e);。f o r (i n t i =0;i n;i +)g l V e r t e x 2 i (w i
7、d t h-v e r t i 0 -L v e r t i 1 );g l E n d ();。g l C o l o r 3 f(l,1,0);g 1 B e g i n(t y p e);f o r (i n t i =0 ;i n;i+)g l V e r t e x 2 i v (v e r t i );g l E n d();g l u t S w a p B u f f e r s ();i n i t Q M e s h ();。g l u t S e t W i n d o w(w i n i d):3 g 1 u t P o s t R e d i s p l a y();
8、)3 D图形的显示函数v o i d m o d e 1 D i s p 1 a y ()g l C 1 e a r (G L _ C 0L O R _ B U F F E R _ B I T I G L _ D E P T H _ B U F F E R _ B I T);g 1 P u s h M a t r i x();o f l o a t M 1 6 ;。f o r (i n t r =0;r 4;r+)f o r (i n t c =0;c 4 ;c +)M 4 *c +r C R M r c;。g 1 M u l t M a t r i x f (M);g 1 S c a l e
9、 f (z o o m,z o o m,z o o m);d r a w Q M e s h ();g l P o p M a t r i x ();g l P u s h M a t r i x ();g l L i g h t f v (G L _ L I G H T O,G L _ A M B I E N T,a m b);。g l L i g h t f v(G L _ L I G H T O ,G L _ P O S I T I O N,1 i g h t P o s i t i o n);g I P o p M a t r i x O ;。g l u t S w a p B u f
10、 f e r s ():3 键盘敲击模块功能描述:该功能重要为两个窗体添加键盘敲击事件,在 2D 窗体中重要添加了反走样效果,清除所画的图,点线转化功能,对 于 3D 窗体重要添加了投影方式的变换,光源移动的功能代码设计:/2D绘制窗体的键盘敲击解决函数v o i d k e y b o a r d (u n s i g n e d c h a r k e y,i n t x,i n t y)s w i t c h (k e y)。c a s e a :a n t i a 1 i a s i n g =!a n t i a 1 i a s i n g;反走样效果。i f (a n t i a
11、l i a s i n g)b。g l E n a b l e (G L _ B L E N D);。g l E n a b l e (G L _ L I N E _ S M O O T H);。e 1 s e t。g l D i s a b l e(G L _ B L E N D);。g l D i s a b I e (G L _ L I N E _ S M O O T H);。)。o b r e a k ;。c a s e c :n =0;b r e a k;/清除界面功能。a c a s e 1 1 :t y p e =G L _ L I N E _ S T R I P;b r e a
12、 k;/绘制线功能。c a s e v :t y p e =G L _P O I N T S;b r e a k;/绘制点功能0 g l u t P o s t R e d i s p l a y ();)/3 D显示窗体的键盘敲击事件解决函数:v o i d mode I K e y b o a r d (u n s i g n e d c h a r k e y,i n t x,i n t y )。s w i t c h (k e y )c a s e o :g l M a t r i x M o d e (G L _ P R 0 J E C T I O N);/正投影3g 1 L o a
13、 d I d e n t i t y ();。g 1 0 r t h o (-4,4,-4,4 ,6,1 4);。g I M a t r i x M o d e(G L _ M O D E L V I E W);o o o b r e a k;。c a s e :g l M a t r i x M o d e(G L _ P R O J E C T I O N);侧投影,但是是默认的。g l L o a d I d e n t i t y();。g l u P e r s p e c t i v e(4 5.0,1 .0,6.0 ,1 4.0);。g l M a t r i x M o d e
14、 (G L _ M O D E L V I E W);b r e a k ;。c a s e o f :l i g h t P o si t i o n 0 =1 i g h t P o s i t i o n 0 -0.5;。光源移动。b re a k ;c a se n 1:l i g h tP o si ti o n 1 =1 i g h tP o si ti o n l 0.5;s 。b re a k;。c a se z :1 i g h tP o si ti o n 2 =1 i g h tP o si ti o n 2 -0.5;。b r e a k;。c a s e ,k :g
15、1 D i sa b l e (G L_F O G);b r e a k ;)。g l utP o stR e d i sp 1 a y();)4鼠标点击模块功能描述:该功能模块重要实现了对两个窗体鼠标事件的解决,对于3 D窗体实现了鼠标左键旋转,由键放大缩小的效果,2 D窗体实现了左键画点,右键可以对已经存在的点改变它的位置。代码设计:3 D窗体的鼠标事件vo i d m o d e l M o u se (i n t b ut t o n,i n t sta te,i n t x,i n t y)s w i tc h (b utto n)。o c a se G L U T _ L E F
16、T _ B U T T O N:,i f (sta te =G L U T _ D 0W N )。C X =X;c y=h -1 -y;o d x=d y=0;s l e f t _b utto n _ d o w n =true;。e 1 se。l e f t_ b u t to n _ d o wn =f a l se;。b r e a k;。o c a se G L U T _ R I G H T _ B U T T O N:。i f(s t a te =G L U T _ D O W N)C X =X;。c y=h -1 y;。r i g h t_ b u tto n _ d o wn
17、 =true;。)e 1 s e。ri g h t _ b u t to n _ d o wn =f a I s e ;。b re a k ;)2D窗体鼠标事件vo i d m o u s e(i n t b u tto n ,i n t s t a te,i n t x,i n t y)。y 二 h e i g h t-1-y;。s w i tc h(b u t t o n)。c a se G L U T _ L E F T _ B U T T O N:。i f (sta te =G L U T _ D 0W N&!r ub b e r b a n d i n g )v=n+;。ve r t
18、 v 0 =(x =wi d th)?wi d t。v e r t v 1=(y =h e i g h t)?h e i g h t-1:y。ru b b e r b a n d i n g =t rue;g 1 u t P o stR e d i s pl a y();。)e 1 se r u b b e r b a n d i n g =f a 1 s e;。b re a k;。c a se G L U T R I G H T _ B U T T 0 N:。i f (st a te =G L U T _ D 0W N&!ru b b e rb a n d i n g&(v=f i n d
19、V e r-1)(。o i f(g l u tG e tM o d i f i e rs()=GLUT_ACT I V E _ C T R L)t e x(x,y)!。f o r(i n t i =v;i n 1;i+)ve rt v 0 =ve rt i+1 0 ;。ve rt i 1 =ve rt i+1 1;6 O n ;o e l s e 。ve r t v 0 =(x =wi d t h)?wi d t h 1 :x;。v e r t v l =(y =h e i g h t)?h e i g h t -1:y;rub b e r b a n d i n g =true;O 0 o
20、g l utP o s t R e d i spl a y();0 o e l se rub b e rb a n d i n g =f a l se;。b r e a k;)功 能 截 图:运用鼠标在界面上画出本来的图,截图如下:按 住“Z”后,上方的光照变化,截图如下:Display object按 住“Y”后,下方的光照效果发生变化,截图如下:使用鼠标实现图像方向的变化,截图如下:使用鼠标实现图像大小的变化,截图如下:放大:缩小:Ditplay object/叵区 Display object=叵区三、心得通过对本次大作业实验的编写,更进一步了解了 0 P enGL的用法,从计算机图形学
21、课程中也许收获最多的并不是图形学的一些基础知识,虽然这些很重要,但是真正有些成就感的还是用Ope nG L开发出来的这些程序。特别是这个项目,和前面几个只需抄抄代码就能出来的实验相比,是需要好好动动脑筋的。在这个项目中需要解决鼠标等设备的输入,然后再根据输入捕获相应的变化再进行解决。这一块对于我来说是比较困难的。在解决这个问题上花了不少的时间,在解决这个问题之后应当说后面的工作还是比较轻松的。以前觉得看到的游戏里面的画面很是完美,现在我知道了这写图的制作方法,并且我也学会了如何制作简朴的三维图片,加上对三维图形的一些修饰,使简朴的图形变得更好看更精致。完整代码如下:#in c lud e#in
22、cl u d e#def i ne QMeshSi z e 25 6int w i dth=4 0 0,h e i g ht=6 0 0,ve r t10 0 2,n=0,type=GL_L I N E _ S T RIP,v;boolr u bbe r banding=fals e,ant i al i a sing=fa 1 s e;f loatQMes h 1 0 0 QMeshS i ze+1 3;GLfloatlightPosi t i on=-4.0,4.0,-6.0,1.0 ;GLfloatamblJ=0.3 f,0.3f,0.3f,0.3f);GL f 1 o a t fron
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 计算机 图形学 作业 报告 灯光 纹理 映射
限制150内