效果图:

 

代码:

  1 #define GLUT_DISABLE_ATEXIT_HACK
2 #include "gl/glut.h"
3
4
5 GLfloat AngleX;
6 GLfloat AngleY;
7
8 void OnDisplay(void);
9 void OnReShape(int,int);
10 void OnKey(GLint,GLint,GLint);
11 void SetupRC();
12
13 void main(int argc,char* argv[])
14 {
15 glutInit(&argc,argv);
16 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
17 glutInitWindowSize(480,480);
18 glutCreateWindow("OpenGL颜色立方体");
19
20 glutReshapeFunc(OnReShape);
21 glutDisplayFunc(OnDisplay);
22 glutSpecialFunc(OnKey); //设置处理特殊击键的回调函数
23
24 AngleX=45.0f;
25 AngleY=315.0f;
26 SetupRC();
27
28 glutMainLoop();
29 }
30
31 void OnDisplay(void)
32 {
33 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
34
35 glMatrixMode(GL_MODELVIEW);
36 glLoadIdentity();
37
38 glPushMatrix();
39 glRotatef(AngleX,1.0f,0.0f,0.0f);
40 glRotatef(AngleY,0.0f,1.0f,0.0f);
41
42 glBegin(GL_POLYGON); //前表面
43 glColor3ub((GLubyte)255,(GLubyte)255,(GLubyte)255);//颜色设置为白色
44 glVertex3f(50.0f,50.0f,50.0f);
45
46 glColor3ub((GLubyte)255,(GLubyte)255,(GLubyte)0);//颜色设置为黄色
47 glVertex3f(50.0f,-50.0f,50.0f);
48
49 glColor3ub((GLubyte)255,(GLubyte)0,(GLubyte)0);//颜色设置为红色
50 glVertex3f(-50.0f,-50.0f,50.0f);
51
52 glColor3ub((GLubyte)255,(GLubyte)0,(GLubyte)255);//颜色设置为白色
53 glVertex3f(-50.0f,50.0f,50.0f);
54 glEnd();
55
56 glBegin(GL_POLYGON); //后表面
57 glColor3f(0.0f,1.0f,1.0f);//颜色设置为青色
58 glVertex3f(50.0f,50.0f,-50.0f);
59
60 glColor3f(0.0f,1.0f,0.0f);//颜色设置为绿色
61 glVertex3f(50.0f,-50.0f,-50.0f);
62
63 glColor3f(0.0f,0.0f,0.0f);//颜色设置为黑色
64 glVertex3f(-50.0f,-50.0f,-50.0f);
65
66 glColor3f(0.0f,0.0f,1.0f);//颜色设置为蓝色
67 glVertex3f(-50.0f,50.0f,-50.0f);
68 glEnd();
69
70 glBegin(GL_POLYGON); //上表面
71 glColor3d(0.0,1.0,1.0);//颜色设置为青色
72 glVertex3f(50.0f,50.0f,-50.0f);
73
74 glColor3d(1.0,1.0,1.0);//颜色设置为白色
75 glVertex3f(50.0f,50.0f,50.0f);
76
77 glColor3d(1.0,0.0,1.0);//颜色设置为品红色
78 glVertex3f(-50.0f,50.0f,50.0f);
79
80 glColor3d(0.0,0.0,1.0);//颜色设置为蓝色
81 glVertex3f(-50.0f,50.0f,-50.0f);
82 glEnd();
83
84 glBegin(GL_POLYGON); //下表面
85 glColor3ub(0u,255u,0u);//颜色设置为绿色
86 glVertex3f(50.0f,-50.0f,-50.0f);
87
88 glColor3ub(255u,255u,0u);//颜色设置为黄色
89 glVertex3f(50.0f,-50.0f,50.0f);
90
91 glColor3ub(255u,0u,0u);//颜色设置为红色
92 glVertex3f(-50.0f,-50.0f,50.0f);
93
94 glColor3ub(0u,0u,0u);//颜色设置为黑色
95 glVertex3f(-50.0f,-50.0f,-50.0f);
96 glEnd();
97
98 glBegin(GL_POLYGON); //左表面
99 glColor3ub((GLubyte)255,(GLubyte)255,(GLubyte)255);//颜色设置为白色
100 glVertex3f(50.0f,50.0f,50.0f);
101
102 glColor3ub((GLubyte)0,(GLubyte)255,(GLubyte)255);//颜色设置为青色
103 glVertex3f(50.0f,50.0f,-50.0f);
104
105 glColor3ub((GLubyte)0,(GLubyte)255,(GLubyte)0);//颜色设置为绿色
106 glVertex3f(50.0f,-50.0f,-50.0f);
107
108 glColor3ub((GLubyte)255,(GLubyte)255,(GLubyte)0);//颜色设置为黄色
109 glVertex3f(50.0f,-50.0f,50.0f);
110 glEnd();
111
112 glBegin(GL_POLYGON); //右表面
113 glColor3f(1.0f,0.0f,1.0f);//颜色设置为品红色
114 glVertex3f(-50.0f,50.0f,50.0f);
115
116 glColor3f(0.0f,0.0f,1.0f);//颜色设置为蓝色
117 glVertex3f(-50.0f,50.0f,-50.0f);
118
119 glColor3f(0.0f,0.0f,0.0f);//颜色设置为黑色
120 glVertex3f(-50.0f,-50.0f,-50.0f);
121
122 glColor3f(1.0f,0.0f,0.0f);//颜色设置为红色
123 glVertex3f(-50.0f,-50.0f,50.0f);
124 glEnd();
125
126 glPopMatrix();
127
128
129 glutSwapBuffers();
130
131 }
132
133 void OnReShape(int w,int h)
134 {
135 GLfloat aspect =(GLfloat)w/(GLfloat)h;
136 GLfloat nRange=100.0f;
137
138 glViewport(0,0,w,h);
139
140 glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影模式
141 glLoadIdentity();
142
143 //设置三维投影区
144
145 if (w<=h)
146 {
147 glOrtho(-nRange,nRange,-nRange*aspect,nRange*aspect,-nRange,nRange);
148 }
149 else
150 {
151 glOrtho(-nRange,nRange,-nRange/aspect,nRange/aspect,-nRange,nRange);
152 }
153
154 }
155
156 void OnKey(GLint key,GLint x,GLint y)
157 {
158 if(key==GLUT_KEY_UP)
159 AngleX-=5.0f;
160
161 if(key==GLUT_KEY_DOWN)
162 AngleX+=5.0f;
163
164 if(key==GLUT_KEY_LEFT)
165 AngleY-=5.0f;
166
167 if(key==GLUT_KEY_RIGHT)
168 AngleY+=5.0f;
169
170 if(AngleX>355.0f)
171 AngleX=0.0f;
172
173 if(AngleX<0.0f)
174 AngleX=355.0f;
175
176 if(AngleY>355.0f)
177 AngleY=0.0f;
178
179 if(AngleY<0.0f)
180 AngleY=355.0f;
181
182 glutPostRedisplay();
183 }
184
185 void SetupRC()
186 {
187 glClearColor(0.0f,0.0f,0.0f,1.0f);
188
189 glEnable(GL_DEPTH_TEST);
190 glEnable(GL_DITHER);
191 glShadeModel(GL_SMOOTH);
192 }



 posted on 2012-04-08 11:55  xiacl  阅读(927)  评论(0编辑  收藏  举报