效果图:

 

代码:

  1 #define GLUT_DISABLE_ATEXIT_HACK
2 #include "gl/glut.h"
3
4 GLint Angle;
5 void OnDisplay(void);
6 void OnReShape(int,int);
7 void OnTimer(int);
8 void SetupLights();
9
10 void main(int argc,char* argv[])
11 {
12 glutInit(&argc,argv);
13 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
14 glutInitWindowSize(600,480);
15 glutCreateWindow("OpenGL旋转变换");
16
17 glutReshapeFunc(OnReShape);
18 glutDisplayFunc(OnDisplay);
19 glutTimerFunc(100,OnTimer,1);
20
21
22 SetupLights();
23
24 glutMainLoop();
25 }
26
27 void OnDisplay(void)
28 {
29 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
30
31 glEnable(GL_DEPTH_TEST);
32
33 glMatrixMode(GL_MODELVIEW);
34 glLoadIdentity();
35
36 glRotatef(30.0f,1.0f,0.0f,0.0f);
37 glRotatef(15.0f,0.0f,1.0f,0.0f);
38
39
40 glColor3f(1.0f,0.0f,0.0f);
41 glBegin(GL_LINES);
42 glVertex3f(-50.0f,-50.0f,-50.0f);
43 glVertex3f(50.0f,50.0f,50.0f);
44 glEnd();
45
46
47 glPushMatrix();
48 glRotatef(Angle,1.0f,1.0f,1.0f);
49 glColor3f(1.0f,1.0f,0.0f);
50 glutSolidCube(50.0f);
51 glPopMatrix();
52
53 glutSwapBuffers();
54
55 }
56
57 void OnReShape(int w,int h)
58 {
59 GLfloat aspect =(GLfloat)w/(GLfloat)h;
60 GLfloat nRange=100.0f;
61
62 glViewport(0,0,w,h);
63
64 glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影模式
65 glLoadIdentity();
66
67 //设置三维投影区
68
69 if (w<=h)
70 {
71 glOrtho(-nRange,nRange,-nRange*aspect,nRange*aspect,-nRange,nRange);
72 }
73 else
74 {
75 glOrtho(-nRange,nRange,-nRange/aspect,nRange/aspect,-nRange,nRange);
76 }
77
78 }
79
80 void OnTimer(int value)
81 {
82 Angle +=10;
83 glutPostRedisplay();
84 glutTimerFunc(100,OnTimer,1);
85 }
86
87 void SetupLights()
88 {
89 GLfloat ambientLight[]={0.2f,0.2f,0.2f,1.0f};//环境光
90 GLfloat diffuseLight[]={0.9f,0.9f,0.9f,1.0f};//漫反射
91 GLfloat specularLight[]={1.0f,1.0f,1.0f,1.0f};//镜面光
92 GLfloat lightPos[]={50.0f,80.0f,60.0f,1.0f};//光源位置
93
94 glEnable(GL_LIGHTING); //启用光照
95 glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);//设置环境光源
96 glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);//设置漫反射光源
97 glLightfv(GL_LIGHT0,GL_SPECULAR,specularLight);//设置镜面光源
98 glLightfv(GL_LIGHT0,GL_POSITION,lightPos);//设置灯光位置
99 glEnable(GL_LIGHT0); //打开第一个灯光
100
101 glEnable(GL_COLOR_MATERIAL); //启用材质的颜色跟踪
102 glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE); //指定材料着色的面
103 glMaterialfv(GL_FRONT,GL_SPECULAR,specularLight); //指定材料对镜面光的反应
104 glMateriali(GL_FRONT,GL_SHININESS,100); //指定反射系数
105
106
107 }



 posted on 2012-04-06 16:42  xiacl  阅读(313)  评论(0)    收藏  举报