OpenGL实验一.doc_第1页
OpenGL实验一.doc_第2页
OpenGL实验一.doc_第3页
OpenGL实验一.doc_第4页
OpenGL实验一.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机 学院 计算机科学与技术 专业 3班 学号3112005883 姓名:曲绍霖 教师评定: 实验一 基本三维图形的建模及基本交互一、实验目的1 掌握OpenGL的三维图形绘制方法2 掌握Visual C+环境下的OpenGL图形开发二、实验要求在Windows平台上用VC+结合GLUT做实验,要求掌握结合VC+和OpenGL的基本图形(四面体、六面体、圆柱、圆锥等)建模及编程技能,以及图形学的基本原理,实验完成后要求根据自己的成果撰写一份实验报告。1 基本三维几何图形(四面体、六面体、圆柱、球等)的建模及基本的交互2 人机交互(图形的基本变换,如旋转、平移、尺度缩放及橡皮筋技术等)三、实验环境操作系统:Windows xp开发环境:VC+6.0以及GLUT图形交互设备:鼠标和键盘四、实验内容1 GLUT在VC+6.0环境下的正确配置 下载GLUT包,解压后,文件夹中有dll,lib,h文件,将glut32.dll,glut.dll复制到C:WINDOWSsystem32下,将glut32.lib, glut.lib放到C:Program FilesMicrosoft Visual StudioVC98Lib(即安装VC+6.0的目录),将glut.h复制到C:ProgramFilesMicrosoft Visual StudioVC98IncludeGL2对基本图形(四面体,六面体,圆柱,球等)的建模及基本交互。a 在上述四种图形的中选择两种及两种以上进行建模或者组合他们产生新的对象。b 基本的交互包括:利用鼠标、键盘实现图像的交互(主要实现物体的浏览)五、存在的问题和感想虽然开始对OpenGL的编程不是很了解,但是因为对VC+的编程还是有比较深的了解,所以对OpenGL的函数的运用会查阅MSDN来学习如何使用,然后再参考了一下网上的代码和实验给出的例子,基本了解是如何进行OpenGL的编程,一开始觉得OpenGL的编程跟一般的VC+编程有很大的区别,可能很难入门,但是后来,认真研究了一下实验给出的例子,还是很顺利地读懂了。也对OpenGl的建模,光照等有了一定的理解,后来,再运用一下网上相关的代码,加上自己理解的修改,就顺利完成了实验,开始觉得OpenGL的编程很难,就对实验抱着一个厌恶的感觉,但是后来自己做出实验的时候,就开始觉得OpenGL是十分有趣的。实现代码:#include#include #include#include #include static GLfloat xRot = 0.0f; /x方向旋转参数static GLfloat yRot = 0.0f; /y方向旋转参数/初始化OpenGL绘制环境void init(void) glClearColor(1.0,1.0,1.0,0.0);/背景颜色为白色glEnable(GL_DEPTH_TEST);/这句是启用深度测试,这样,在后面的物体会被挡着glShadeModel(GL_SMOOTH); void myDisplay(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/ 清除屏幕和深度缓存 glLoadIdentity();/ 重置当前的模型观察矩阵 glTranslatef(0.0f, 0.0f, -6.0f); glRotatef(xRot, 1.0f, 0.0f, 0.0f); / 设置旋转的角度,这里glRotatef 第1个参数是角度,24 参数是指定旋转轴 / 这里我们设置于x,y轴作旋转轴 / 绘制正方形 glRotatef(yRot, 0.0f, 1.0f, 0.0f); glTranslatef(-1.5f, 0.0f, 0.0f); glBegin(GL_QUADS); glColor3f(0.0f,1.0f,0.0f); / 颜色改为绿色 glVertex3f( 1.0f, 1.0f,-1.0f); / 四边形的右上顶点 (顶面) glColor3f(1.0f,0.0f,0.0f); /颜色改为红色 glVertex3f(-1.0f, 1.0f,-1.0f); / 四边形的左上顶点 (顶面) glColor3f(0.0f,0.0f,1.0f); / 颜色改成蓝色 glVertex3f(-1.0f, 1.0f, 1.0f); / 四边形的左下顶点 (顶面) glColor3f(1.0f,0.5f,0.0f); / 颜色改成橙色 glVertex3f( 1.0f, 1.0f, 1.0f); / 四边形的右下顶点 (顶面) glColor3f(0.0f,1.0f,0.0f); / 颜色改为绿色 glVertex3f( 1.0f,-1.0f, 1.0f); / 四边形的右上顶点(底面) glColor3f(1.0f,0.0f,0.0f); /颜色改为红色glVertex3f(-1.0f,-1.0f, 1.0f); / 四边形的左上顶点(底面) glColor3f(0.0f,0.0f,1.0f); / 颜色改成蓝色 glVertex3f(-1.0f,-1.0f,-1.0f); / 四边形的左下顶点(底面) glColor3f(1.0f,0.5f,0.0f); / 颜色改成橙色glVertex3f( 1.0f,-1.0f,-1.0f); / 四边形的右下顶点(底面) glColor3f(1.0f,0.5f,0.0f); / 颜色改成橙色 glVertex3f( 1.0f, 1.0f, 1.0f); / 四边形的右上顶点(前面) glColor3f(0.0f,0.0f,1.0f); / 颜色改成蓝色glVertex3f(-1.0f, 1.0f, 1.0f); / 四边形的左上顶点(前面) glColor3f(1.0f,0.0f,0.0f); /颜色改为红色glVertex3f(-1.0f,-1.0f, 1.0f); / 四边形的左下顶点(前面) glColor3f(0.0f,1.0f,0.0f); / 颜色改为绿色glVertex3f( 1.0f,-1.0f, 1.0f); / 四边形的右下顶点(前面) glColor3f(1.0f,0.5f,0.0f); / 颜色改成橙色 glVertex3f( 1.0f,-1.0f,-1.0f); / 四边形的右上顶点(后面) glColor3f(0.0f,0.0f,1.0f); / 颜色改成蓝色glVertex3f(-1.0f,-1.0f,-1.0f); / 四边形的左上顶点(后面) glColor3f(1.0f,0.0f,0.0f); /颜色改为红色glVertex3f(-1.0f, 1.0f,-1.0f); / 四边形的左下顶点(后面) glColor3f(0.0f,1.0f,0.0f); / 颜色改为绿色glVertex3f( 1.0f, 1.0f,-1.0f); / 四边形的右下顶点(后面) glColor3f(0.0f,0.0f,1.0f); / 颜色改成蓝色 glVertex3f(-1.0f, 1.0f, 1.0f); / 四边形的右上顶点(左面) glColor3f(1.0f,0.0f,0.0f); /颜色改为红色glVertex3f(-1.0f, 1.0f,-1.0f); / 四边形的左上顶点(左面) glColor3f(0.0f,0.0f,1.0f); / 颜色改成蓝色 glVertex3f(-1.0f,-1.0f,-1.0f); / 四边形的左下顶点(左面) glColor3f(1.0f,0.0f,0.0f); /颜色改为红色glVertex3f(-1.0f,-1.0f, 1.0f); / 四边形的右下顶点(左面) glColor3f(0.0f,1.0f,0.0f); / 颜色改为绿色 glVertex3f( 1.0f, 1.0f,-1.0f); / 四边形的右上顶点(右面) glColor3f(1.0f,0.5f,0.0f); / 颜色改成橙色glVertex3f( 1.0f, 1.0f, 1.0f); / 四边形的左上顶点(右面) glColor3f(0.0f,1.0f,0.0f); / 颜色改为绿色glVertex3f( 1.0f,-1.0f, 1.0f); / 四边形的左下顶点(右面) glColor3f(1.0f,0.5f,0.0f); / 颜色改成橙色glVertex3f( 1.0f,-1.0f,-1.0f); / 四边形的右下顶点(右面) glEnd();/正方体绘制结束 glTranslatef(3.0f, 0.0f, 0.0f); glRotatef(yRot, 0.0f, 1.0f, 0.0f); glRotatef(xRot, 1.0f, 0.0f, 0.0f);glBegin(GL_TRIANGLES); glColor3f(1.0f,0.5f,0.0f); / 橙色glVertex3f( 0.0f, 1.0f, 0.0f);/ 三角形的上顶点 (前侧面)glColor3f(1.0f,0.0f,0.0f);/ 红色glVertex3f(-1.0f,-1.0f, 1.0f);/ 三角形的左下顶点 (前侧面)glColor3f(0.0f,1.0f,0.0f);/ 绿色glVertex3f( 1.0f,-1.0f, 1.0f);/ 三角形的右下顶点 (前侧面)glColor3f(1.0f,0.5f,0.0f); /橙色glVertex3f( 0.0f, 1.0f, 0.0f);/ 三角形的上顶点 (右侧面)glColor3f(0.0f,1.0f,0.0f);/ 绿色glVertex3f( 1.0f,-1.0f, 1.0f);/ 三角形的左下顶点 (右侧面)glColor3f(1.0f,0.0f,0.0f);/ 红色glVertex3f( 1.0f,-1.0f, -1.0f);/ 三角形的右下顶点 (右侧面)glColor3f(1.0f,0.5f,0.0f); / 蓝色glVertex3f( 0.0f, 1.0f, 0.0f);/ 三角形的上顶点 (后侧面)glColor3f(1.0f,0.0f,0.0f);/ 红色glVertex3f( 1.0f,-1.0f, -1.0f);/ 三角形的左下顶点 (后侧面)glColor3f(0.0f,1.0f,0.0f);/ 红色glVertex3f(-1.0f,-1.0f, -1.0f);/ 三角形的右下顶点 (后侧面) glColor3f(1.0f,0.5f,0.0f); /橙色glVertex3f( 0.0f, 1.0f, 0.0f);/ 三角形的上顶点 (左侧面)glColor3f(0.0f,1.0f,0.0f);/ 绿色glVertex3f(-1.0f,-1.0f,-1.0f);/ 三角形的左下顶点 (左侧面)glColor3f(1.0f,0.0f,0.0f);/ 红色glVertex3f(-1.0f,-1.0f, 1.0f);/ 三角形的右下顶点 (左侧面) glEnd();/三角锥绘制结束glFlush();/强制刷新glutSwapBuffers(); /双缓冲 /设窗口的坐标void reshape(int w,int h) glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0f,(GLfloat)w/(GLfloat)h,0.5f,-1000.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity();/键盘控制 void SpecialKeys(int key,int x,int y) /上下左右键控制正方体旋转 if(key = GLUT_KEY_UP)xRot -= 5.0f;if(key = GLUT_KEY_DOWN)xRot += 5.0f;if(key = GLUT_KEY_LEFT)yRot -= 5.0f;if(key = GLUT_KEY_RIGHT)yRot += 5.0f;if(xRot 356.0f)xRot = 0.0f;if(xRot 356.0f)yRot = 0.0f;if(yRot -1.0f)yRot = 355.0f; glutPostRedisplay(); void keyboard(unsigned char key, int x, int y) switch (key) case 27: / 当按下键盘的esc键的时候退出 exit(0); break; /设置刷新时间void TimerFunction(int value) glutPostRedisplay(); glutTimerFunc(100,TimerFunction,1); int main(int argc, char *argv)glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论