opengl简单示例详细说明--建模

             我计算机图形学的实验文档,分享一下.

一、效果图

(懒得上传了)

二、具体内容

本次实验为建模,我画了一个茶壶,两个杯子,两个杯托。

三、代码说明

glutInit(&argc, argv);

初始化和开启事件处理循环。

 

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

函数功能:设置初始显示模式,GLUT_DOUBLE指定双缓存窗口,GLUT_RGB指定 RGB 颜色模式的窗口,GLUT_DEPTH窗口使用深度缓存。

 

glutInitWindowSize(800,600);

glutInitWindowPosition(100,100);

glutCreateWindow("title");

制定产生的窗口的大小,位置和标题,以及生成窗口

 

glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

GL_COLOR_BUFFER_BIT表示清除颜色,GL_DEPTH_BUFFER_BIT表示清除深度缓冲

 

glEnable(GL_LIGHTING);

glEnable(GL_DEPTH_TEST);

以GL_DEPTH_TEST为参数调用glEnable函数,启动深度测试和光照。

 

glutReshapeFunc(reshape);

窗口大小改变时调用reshape回调函数

 

glViewport(0, 0, (GLsizei)w, (GLsizei)h) ;

设置视口大小为整个窗口大小

 

glMatrixMode(GL_PROJECTION) ;

glLoadIdentity() ;

/单位化投影矩阵。

 

gluPerspective(90,w/h,0.5,200);

设置投影矩阵,参数分别是:角度,视景体的宽高比,沿z轴方向的两裁面之间的距离的近处,沿z轴方向的两裁面之间的距离的远处

 

glMatrixMode(GL_MODELVIEW) ;

glLoadIdentity() ;

gluLookAt(-15,30,40,0,0,0,0,10,0);

设置模型视图矩阵

 

glutDisplayFunc(draw);

为当前窗口设置显示回调函数,此处调用draw函数

 

glEnable(GL_LIGHT0);

使用GL_LIGHT0表示第0号光源

 

glutMainLoop();

进行一个消息循环。

 

//show函数

glPushMatrix();//茶壶

         glEnable(GL_COLOR_MATERIAL);

         glColorMaterial(GL_FRONT,GL_AMBIENT);

         glColor4f(0.51,0.0,0.1,0.0);

         glTranslatef(0,8,0);

         glScalef(5,10,5);

         glutSolidTeapot(1);

         glDisable(GL_COLOR_MATERIAL);

glPopMatrix();

矩阵有自己的“堆栈”,方便进行保存和恢复。使用的函数是glPushMatrix和glPopMatrix。

glEnable(GL_COLOR_MATERIAL)开启设置物体绘制的颜色

glColorMaterial(GL_FRONT,GL_AMBIENT) 设置正面填充,环绕

glTranslatef(0,8,0);移动矩阵

glScalef(5,10,5);缩放矩阵

glutSolidTeapot(1);调用glut库中的绘制茶壶的函数

 

GLUquadricObj *pObj;

创建弧形物体

 

glPushMatrix();//第一个杯子  左边

         pObj = gluNewQuadric();

         gluQuadricNormals(pObj,GLU_SMOOTH);

         glTranslatef(-8,6,8);

         glRotatef(90,1,0,0);

         gluCylinder(pObj, 1.50f, 1.0f,5.0f, 26, 13);

glPopMatrix();

gluNewQuadric()创建一个二次曲面对象,并返回指针

gluQuadricNormals(pObj,GLU_SMOOTH) 指定法线模式, 每个定点一个法线

gluCylinder(pObj, 1.50f, 1.0f,5.0f, 26, 13);obj被指定为沿着z轴方向定义的,底面是z = 0,高度为height,底面半径base和顶面半径为radius用来逼近的多边形用来实现侧面,地面和顶面为空,slices是经线,stacks是纬线void gluCylinder(GLUquadricObj* obj, GLdouble base, GLdouble top,GLdouble height, GLdouble slices, Gldoble stacks)

 

glPushMatrix();  //桌面上垫圈

         glEnable(GL_COLOR_MATERIAL);

         glColorMaterial(GL_FRONT,GL_AMBIENT);

         glColor4f(0.21,0.21,0.21,0.0);

         pObj= gluNewQuadric();

         glTranslatef(-8,1,8);

         glRotatef(90,1,0,0);

         gluDisk(pObj, 0.50f,  3.0f, 10, 10);

glPopMatrix();

圆盘Disk是平面物体,中心有一个空洞。圆盘在z = 0创建,inner指定内半径,outer指定外半径slices指定了经线,而rings指定了环数

void gluDisk(GLUquadricObj* obj,GLdouble inner, GLdouble outer,Glint slices, GLint rings)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值