页数:3页文件大小:25.7 KB来源: 计算机图形学ppt课件
本实验指导面向OpenGL图形变换:要求掌握OpenGL程序设计方法与图形变换用法,内容为画正方体与球并做成旋转动画,或做在大正方体内反弹的运动立方体;给出带鼠标键盘响应的旋转正方体完整例程。
《计算机图形学》实验指导书 实验2:OpenGL变换
提示:可参考 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);}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);}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); }下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}