OpenGl构建基本的房子.docx
- 文档编号:3729884
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:28
- 大小:19.42KB
OpenGl构建基本的房子.docx
《OpenGl构建基本的房子.docx》由会员分享,可在线阅读,更多相关《OpenGl构建基本的房子.docx(28页珍藏版)》请在冰豆网上搜索。
OpenGl构建基本的房子
Category
Items
Markallocated
Grade
Demo
(10marks)
(H)house-Ahouseshouldbecreatedanddisplayed.
2
(T)tree-Atleastonetreeshouldbecreatedanddisplayed
2
(S)Sun–thesunisamustobject.
2
(E)extraenvironmentobject(s)-youcancreateanyotherextraobjectonthepieceoflandyouhave.
2
(V)viewpoints-yourprogramshouldenableviewertoviewyourhomewithdifferentangles.
2
Sub-total:
10
FinalReport
(20marks)
(C)clarity-Doesyourreportexplaineverythingthatyoudid?
2
(D)design-Didyoudesignyourimplementationwell?
DidyouuseanyCGtechnique(s)whereappropriate?
2
(E)English-Arethereanyspellingorgrammaticalerrors?
Isyourwritingclearandsuccinct?
2
(N)neatness-Arethetext,codeandfigureslaidoutwell?
Isyourwriting/printinglegible?
2
(T)thoroughness-Isthereportcomplete?
Didyouleaveimportantthingsout?
Didyouforgettodescribeimportantcases,rules,orprogrambehaviour?
Didyoumakeerrorsinyourprojectthataren'tlistedintheshortcomings?
2
Sub-total:
10
Total:
outof20
GeneralComments:
IntroductionandMotivation:
我们的实验包括房子、栅栏、小狗住的房子、树木、机器人、太阳、草地等几个简单的事物,保证了能够从各个角度观看到,完成了对项目的基本要求。
在实验创建中,我们首先按照要求构思出整体的框架,需要做哪些事物,以及每个事物的大体位置,接着计算各个点的坐标,之后分工进行,每个人做一到两个事物,最后将所有事物整合在一起。
还遇到的一个问题是,保证所有物体能够合理的展现出来,不出现掩盖或不能显示效果的现象,这首先是对物体的创建和坐标的把握,然后是对基本变换功能的掌握,对于这方面的设计,不仅需要严谨计算还要学习功能的设计。
DesignandImplementations:
一开始大体的想法是设计一个带有烟囱的尖顶房子,后来在做房顶的时候遇到了困难,房顶的两侧无法显示,后来找到的改进方法是将房顶做成一个长方体,并将长方体上的两个点合并,并缩短X轴上的距离,加上深度测试,最终出现了想要的效果;之后用类似的方法做出了树和小狗住的房子;太阳一开始想用实验三的方法通过圆去做,后来效果不理想,我们组在网上找到了glutSolidSphere();画球的方法。
由此也学会了glutSolidCube();画立方体的方法,利用这种方法做出了栅栏,然后两者综合做出了机器人
Shortcomings:
设计完实验作业,我们存在着很多的不足,首先,构图坐标有些繁杂冗长,导致代码的篇幅有些长。
第二,因为功底是在太差,没有做出贴图和光源,导致整体不是很漂亮。
第三,实验思路有些混乱,经常是想起来什么就做什么,导致效率变低。
Conclusions:
总体来说,能够把项目做到这样的效果,我们还是很满意的,但是还是对没有将四面的背景分别设定表达感到遗憾。
如果要重新做一遍,我会选择学习并使用纹理的表现,这个功能的优点是能够使事物表现更为逼真。
这门课程让我对CG这门学科有了最基本的认识和学习,希望以后有机会可以多加接触。
Appendix:
#include
#include
#include
#include
usingstd:
:
cout;
#define_USE_MATH_DEFINES
#include
doublerotate_y=-15;//定义键盘控制旋转X轴,默认-5度
doublerotate_x=-15;//定义键盘控制旋转Y轴,默认0度
GLfloatw=800;
GLfloath=600;
GLfloatanglePyramid=0.0f;
GLfloatangleCube=0.0f;
voiddisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f,-100.0f,0.0f);//(左,上,前)
glScalef(100,100,100);//放大图像(也可以更改点的数据来达到此效果)
//Rotate语句:
(旋转度数,X,Y,Z)
//延X,Y,Z轴旋转
//太阳(不能动)
glColor3f(1.0,0.0,0.0);
glPushMatrix();
glTranslatef(-5.0,5.0,5.0);
glutSolidSphere(1.5,20,20);
glPopMatrix();
glRotatef(rotate_x,1.0,0.0,0.0);
glRotatef(rotate_y,0.0,1.0,0.0);
/*//太阳(可以动)
glColor3f(1.0,0.0,0.0);
glPushMatrix();
glTranslatef(-5.0,5.0,5.0);
glutSolidSphere(1.5,20,20);
glPopMatrix();
*/
//房子的两部分公用一个坐标系,屏幕远向近为Z轴,由下向上是Y轴,由左向右是X轴
/*房顶*/
//顶
glBegin(GL_QUADS);
glColor3f(0.0f,0.0f,0.502f);
glVertex3f(2.05f,3.5f,0.0f);
glVertex3f(-2.05f,3.5f,0.0f);
glVertex3f(-2.05f,3.5f,0.0f);
glVertex3f(2.05f,3.5f,0.0f);
//底
glColor3f(0.0f,0.0f,0.502f);
glVertex3f(3.5f,1.5f,2.5f);
glVertex3f(-3.5f,1.5f,2.5f);
glVertex3f(-3.5f,1.5f,-2.5f);
glVertex3f(3.5f,1.5f,-2.5f);
//前
glColor3f(0.0f,0.0f,0.502f);
glVertex3f(2.05f,3.5f,0.0f);
glVertex3f(-2.05f,3.5f,0.0f);
glVertex3f(-3.5f,1.5f,2.5f);
glVertex3f(3.5f,1.5f,2.5f);
//后
glColor3f(0.0f,0.0f,0.502f);
glVertex3f(3.5f,1.5f,-2.5f);
glVertex3f(-3.5f,1.5f,-2.5f);
glVertex3f(-2.05f,3.5f,0.0f);
glVertex3f(2.05f,3.5f,0.0f);
//左
glColor3f(0.0f,0.0f,0.502f);
glVertex3f(-2.05f,3.5f,0.0f);
glVertex3f(-2.05f,3.5f,0.0f);
glVertex3f(-3.5f,1.5f,-2.5f);
glVertex3f(-3.5f,1.5f,2.5f);
//右
glColor3f(0.0f,0.0f,0.502f);
glVertex3f(2.05f,3.5f,0.0f);
glVertex3f(2.05f,3.5f,0.0f);
glVertex3f(3.5f,1.5f,2.5f);
glVertex3f(3.5f,1.5f,-2.5f);
glEnd();
/*烟囱*/
//顶
glBegin(GL_QUADS);
glColor3f(0.502f,0.0f,0.0f);
glVertex3f(3.0f,4.0f,-1.0f);
glVertex3f(2.0f,4.0f,-1.0f);
glVertex3f(2.0f,4.0f,1.0f);
glVertex3f(3.0f,4.0f,1.0f);
//底
glColor3f(0.502f,0.0f,0.0f);
glVertex3f(3.0f,2.0f,1.0f);
glVertex3f(2.0f,2.0f,1.0f);
glVertex3f(2.0f,2.0f,-1.0f);
glVertex3f(3.0f,2.0f,-1.0f);
//前
glColor3f(0.502f,0.0f,0.0f);
glVertex3f(3.0f,4.0f,1.0f);
glVertex3f(2.0f,4.0f,1.0f);
glVertex3f(2.0f,2.0f,1.0f);
glVertex3f(3.0f,2.0f,1.0f);
//后
glColor3f(0.502f,0.0f,0.0f);
glVertex3f(3.0f,2.0f,-1.0f);
glVertex3f(2.0f,2.0f,-1.0f);
glVertex3f(2.0f,4.0f,-1.0f);
glVertex3f(3.0f,4.0f,-1.0f);
//左
glColor3f(0.502f,0.0f,0.0f);
glVertex3f(2.0f,4.0f,1.0f);
glVertex3f(2.0f,4.0f,-1.0f);
glVertex3f(2.0f,2.0f,-1.0f);
glVertex3f(2.0f,2.0f,1.0f);
//右
glColor3f(0.502f,0.0f,0.0f);
glVertex3f(3.0f,4.0f,-1.0f);
glVertex3f(3.0f,4.0f,1.0f);
glVertex3f(3.0f,2.0f,1.0f);
glVertex3f(3.0f,2.0f,-1.0f);
glEnd();
/*屋子*/
//顶
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(2.0f,1.5f,-1.5f);
glVertex3f(-2.0f,1.5f,-1.5f);
glVertex3f(-2.0f,1.5f,1.5f);
glVertex3f(2.0f,1.5f,1.5f);
//底
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(2.0f,-0.5f,1.5f);
glVertex3f(-2.0f,-0.5f,1.5f);
glVertex3f(-2.0f,-0.5f,-1.5f);
glVertex3f(2.0f,-0.5f,-1.5f);
//门
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.5,1.0,-1.51);
glVertex3f(-0.5,1.0,-1.51);
glVertex3f(-0.5,-0.5,-1.51);
glVertex3f(0.5,-0.5,-1.51);
//窗户
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(1.25,1.25,-1.51);
glVertex3f(0.75,1.25,-1.51);
glVertex3f(0.75,0.75,-1.51);
glVertex3f(1.25,0.75,-1.51);
//前
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(2.0f,1.5f,1.5f);
glVertex3f(-2.0f,1.5f,1.5f);
glVertex3f(-2.0f,-0.5f,1.5f);
glVertex3f(2.0f,-0.5f,1.5f);
//后
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(2.0f,-0.5f,-1.5f);
glVertex3f(-2.0f,-0.5f,-1.5f);
glVertex3f(-2.0f,1.5f,-1.5f);
glVertex3f(2.0f,1.5f,-1.5f);
//窗户
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(-2.01,1.05,0.4);
glVertex3f(-2.01,1.05,-0.4);
glVertex3f(-2.01,0.25,-0.4);
glVertex3f(-2.01,0.25,0.4);
//左
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(-2.0f,1.5f,1.5f);
glVertex3f(-2.0f,1.5f,-1.5f);
glVertex3f(-2.0f,-0.5f,-1.5f);
glVertex3f(-2.0f,-0.5f,1.5f);
//窗户
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(2.01,1.05,0.4);
glVertex3f(2.01,1.05,-0.4);
glVertex3f(2.01,0.25,-0.4);
glVertex3f(2.01,0.25,0.4);
//右
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(2.0f,1.5f,-1.5f);
glVertex3f(2.0f,1.5f,1.5f);
glVertex3f(2.0f,-0.5f,1.5f);
glVertex3f(2.0f,-0.5f,-1.5f);
glEnd();
/*基座*/
//顶
glBegin(GL_QUADS);
glColor3f(0.502f,0.502f,0.502f);
glVertex3f(5.0,-0.5,-3.5);
glVertex3f(-5.0,-0.5,-3.5);
glVertex3f(-5.0,-0.5,3.5);
glVertex3f(5.0,-0.5,3.5);
//底
glColor3f(0.502f,0.502f,0.502f);
glVertex3f(5.0,-1.0,3.5);
glVertex3f(-5.0,-1.0,3.5);
glVertex3f(-5.0,-1.0,-3.5);
glVertex3f(5.0,-1.0,-3.5);
//前
glColor3f(0.502f,0.502f,0.502f);
glVertex3f(5.0,-0.5,3.5);
glVertex3f(-5.0,-0.5,3.5);
glVertex3f(-5.0,-1.0,3.5);
glVertex3f(5.0,-1.0,3.5);
//后
glColor3f(0.502f,0.502f,0.502f);
glVertex3f(5.0,-1.0,-3.5);
glVertex3f(-5.0,-1.0,-3.5);
glVertex3f(-5.0,-0.5,-3.5);
glVertex3f(5.0,-0.5,-3.5);
//左
glColor3f(0.502f,0.502f,0.502f);
glVertex3f(-5.0,-0.5,3.5);
glVertex3f(-5.0,-0.5,-3.5);
glVertex3f(-5.0,-1.0,-3.5);
glVertex3f(-5.0,-1.0,3.5);
//右
glColor3f(0.502f,0.502f,0.502f);
glVertex3f(5.0,-0.5,-3.5);
glVertex3f(5.0,-0.5,3.5);
glVertex3f(5.0,-1.0,3.5);
glVertex3f(5.0,-1.0,-3.5);
glEnd();
/*地板*/
glBegin(GL_QUADS);
glColor3f(0.0f,0.502f,0.0f);
glVertex3f(100.0,-1.0,-100.0);
glVertex3f(-100.0,-1.0,-100.0);
glVertex3f(-100.0,-1.0,100.0);
glVertex3f(100.0,-1.0,100.0);
glEnd();
/*狗窝*/
glBegin(GL_TRIANGLE_FAN);
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(9.0f,1.5f,-5.0f);
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(10.0f,0.5f,-5.5f);
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(8.0f,0.5f,-5.5f);
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(8.0f,0.5f,-4.5f);
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(10.0f,0.5f,-4.5f);
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(10.0f,0.5f,-5.5f);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.0f,0.502f,0.502f);
glVertex3f(9.5f,0.5f,-4.5f);
glVertex3f(8.5f,0.5f,-4.5f);
glVertex3f(8.5f,0.5f,-5.5f);
glVertex3f(9.5f,0.5f,-5.5f);
//底
glColor3f(0.0f,0.502f,0.502f);
glVertex3f(9.5f,-1.0f,-5.5f);
glVertex3f(8.5f,-1.0f,-5.5f);
glVertex3f(8.5f,-1.0f,-4.5f);
glVertex3f(9.5f,-1.0f,-4.5f);
//前
glColor3f(0.0f,0.502f,0.502f);
glVertex3f(9.5f,0.5f,-5.5f);
glVertex3f(8.5f,0.5f,-5.5f);
glVertex3f(8.5f,-1.0f,-5.5f);
glVertex3f(9.5f,-1.0f,-5.5f);
//后
glColor3f(0.0f,0.502f,0.502f);
glVertex3f(9.5f,-1.0f,-4.5f);
glVertex3f(8.5f,-1.0f,-4.5f);
glVertex3f(8.5f,0.5f,-4.5f);
glVertex3f(9.5f,0.5f,-4.5f);
//小门
glColor3f(0.502f,0.0f,0.502f);
glVertex3f(8.49,0.0,-5.0);
glVertex3f(8.49,0.0,-5.5);
glVertex3f(8.49,-1.0,-5.5);
glVertex3f(8.49,-1.0,-5.0);
//左
glColor3f(0.0f,0.502f,0.502f);
glVertex3f(8.5f,0.5f,-5.5f);
glVertex3f(8.5f,0.5f,-5.0f);
glVertex3f(8.5f,-1.0f,-5.0f);
glVertex3f(8.5f,-1.0f,-5.5f);
//右
glColor3f(0.0f,0.502f,0.502f);
glVertex3f(9.50f,0.5f,-5.0f);
glVertex3f(9.50f,0.5f,-5.5f);
glVertex3f(9.50f,-1.0f,-5.5f);
glVertex3f(9.50f,-1.0f,-5.0f);
glEnd();
/*树*/
glBegin(GL_TRIANGLE_FAN);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-9.0f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGl 构建 基本 房子