一、下面将对VS2010中配置OpenGL进行简单介绍。
学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。
我选择Visual Studio 2010和VC6++作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接:
http://upload.programfan.com/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件,分别是glut.h,glut.lib,glut32.lib,glut.dll,glut32.dll 2、将其中的glut.h放到C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\gl里面,VS2010会自动搜索这个路径。
3. 将glut.lib和glut32.lib复制到F:\vs2010\VC\lib下,根据VS2010的具体安装路径确定。
4. 将glut.dll和glut32.dll复制到C:\WINDOWS\system32下。
至此,环境已经配置好了。
下面来开发一个简单的c++程序,环境vs2010中的vc
1. 新建->项目->win32控制台应用程序。
2. 输入项目名:simpleGL,其他默认即可。
3. 输入源代码:
1 #include <gl/glut.h> 2 #include <stdio.h> 3 #include <time.h> 4 5 //太阳、地球和月亮 6 //假设每个月都是30天 7 //一年12个月,共是360天 8 static int day = 200;//day的变化:从0到359 9 10 double CallFrequency() 11 { 12 static int count; 13 static double save; 14 static clock_t last,current; 15 double timegap; 16 17 ++count; 18 if(count<=50) 19 return save; 20 count = 0; 21 last = current; 22 current = clock(); 23 timegap = (current-last)/(double)CLK_TCK; 24 save = 50.0/timegap; 25 return save; 26 } 27 28 void myDisplay(void) 29 { 30 double FPS = CallFrequency(); 31 printf("FPS = %f\n",FPS); 32 33 glEnable(GL_DEPTH_TEST); 34 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 35 36 glMatrixMode(GL_PROJECTION); 37 glLoadIdentity(); 38 gluPerspective(75,1,1,400000000); 39 glMatrixMode(GL_MODELVIEW); 40 glLoadIdentity(); 41 gluLookAt(0,-200000000,200000000,0,0,0,0,0,1); 42 43 44 //绘制红色的“太阳” 45 glColor3f(1.0f,0.0f,0.0f); 46 glutSolidSphere(69600000,20,20); 47 //绘制蓝色的“地球” 48 glColor3f(0.0f,0.0f,1.0f); 49 glRotatef(day/360.0*360.0,0.0f,0.0f,-1.0f); 50 glTranslatef(150000000,0.0f,0.0f); 51 glutSolidSphere(15945000,20,20); 52 //绘制黄色的“月亮” 53 glColor3f(1.0f,1.0f,0.0f); 54 glRotatef(day/30.0*360.0-day/360.0*360.0,0.0f,0.0f,-1.0f); 55 glTranslatef(38000000,0.0f,0.0f); 56 glutSolidSphere(4345000,20,20); 57 58 glFlush(); 59 glutSwapBuffers(); 60 } 61 62 void myIdle(void) 63 { 64 ++day; 65 if(day>=360) 66 day = 0; 67 myDisplay(); 68 } 69 70 int main(int argc,char *argv[]) 71 { 72 glutInit(&argc,argv); 73 glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE); 74 glutInitWindowPosition(100,100); 75 glutInitWindowSize(400,400); 76 glutCreateWindow("太阳,地球和月亮"); 77 glutDisplayFunc(&myDisplay); 78 glutIdleFunc(&myIdle); 79 glutMainLoop(); 80 81 return 0; 82 }