首页计算机计算机图形学 07《计算机图形学》实验2 OpenGL变换.docx

07《计算机图形学》实验2 OpenGL变换.docx

页数:3页文件大小:25.7 KB来源: 计算机图形学ppt课件

本实验指导面向OpenGL图形变换:要求掌握OpenGL程序设计方法与图形变换用法,内容为画正方体与球并做成旋转动画,或做在大正方体内反弹的运动立方体;给出带鼠标键盘响应的旋转正方体完整例程。

实验二OpenGL变换首页,列出实验目的与二选一的实验内容并给出示例程序头部与变量定义
实验二第二页,给出display中的变换与绘制代码及空闲回调递增角度实现动画
实验二第三页,给出鼠标键盘回调函数与main中窗口初始化及空闲回调的注册
查看本课件的文字版(共 3 页,供检索与复制)

第1页:实验2:OpenGL变换

《计算机图形学》实验指导书 实验2:OpenGL变换

一:实验目的和要求
  1. 掌握在利用 OpenGL 进行程序设计的基本方法。
  2. 掌握 OpenGL 下进行图形变换的方法。
二:内容(二选一)
  1. 使用 OpenGL 画一个正方体和一个球。球的直径等于正方体的边长,球放在正方体的正上方。球不断转动,正方体也不断转动。
  2. 做一个不断旋转和移动的正方体,并且只在一个大正方体范围内移动,碰到边界后反弹。

提示:可参考 OpenGL 教程_NeHe01-11_基础.chm 及如下程序。

 #include "windows.h" #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> #include <math.h> #pragma comment (lib, "opengl32.lib") #pragma comment (lib, "glu32.lib") #pragma comment (lib, "glaux.lib") void myinit (void); void CALLBACK myReshape (GLsizei w, GLsizei h); void CALLBACK display (void); GLfloat theta = 0;GLfloat zpos = -5; void myinit (void) { GLfloat light_position[] = { 0.0, 0.0, 1.0, 0.0 }; glLightfv (GL_LIGHT0, GL_POSITION, light_position); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glShadeModel (GL_SMOOTH); glDepthFunc (GL_LESS); glEnable (GL_DEPTH_TEST);}

第2页:实验2绘图与动画函数

void CALLBACK display (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity (); glTranslatef (0.0, 0.0, zpos); glRotatef (theta, 0, 1, 0); glRotatef (30, 1, 0, 0); auxSolidCube (2.0); glFlush (); auxSwapBuffers (); _sleep (50);} void CALLBACK stepDisplay (void){ theta = theta + 1; if (theta >= 360) theta = 0.0; display (); } void CALLBACK myReshape (GLsizei w, GLsizei h) { glMatrixMode (GL_PROJECTION); glLoadIdentity (); glFrustum (-2.0, 2.0, -2.0, 2.0, 2.0, 30.0); glMatrixMode (GL_MODELVIEW); glViewport (0, 0, w, h);}

第3页:实验2主函数与消息响应

void CALLBACK lbtnFunc (AUX_EVENTREC *event) { exit (0); }void CALLBACK upkeyFunc (void) { zpos = zpos + 0.1; }void CALLBACK downkeyFunc (void) { zpos = zpos - 0.1; } void main (void) { auxInitDisplayMode (AUX_DOUBLE | AUX_RGBA); auxInitPosition (0, 0, 500, 500); auxInitWindow ("Perspective3-DCube"); myinit (); auxReshapeFunc (myReshape); auxMouseFunc (AUX_LEFTBUTTON, AUX_MOUSEDOWN, lbtnFunc); auxKeyFunc (AUX_UP, upkeyFunc); auxKeyFunc (AUX_DOWN, downkeyFunc); auxIdleFunc (stepDisplay); auxMainLoop (display); }
顶部目录