VS 2012 OpenGL 配置与实例开发

来源:互联网 发布:python raisr 编辑:程序博客网 时间:2024/04/30 02:38

参考了网上的几篇资料,最后进行了总结,32/64位均可用

OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。
1
、与C语言紧密结合。
OpenGL
命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TCgraphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。
2
、强大的可移植性。
微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。
3
、高性能的图形渲染。
OpenGL
是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。
总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3QUAKE4等专业游戏就知道了。
OpenGL
官方网站(英文)
http://www.opengl.org/
下面将对Windows下的OpenGL编程进行简单介绍。

学习OpenGL前的准备工作
第一步,选择一个编译环境
现在Windows系统的主流编译环境有VisualStudioBrolandC++ BuilderDev-C++等,它们都是支持OpenGL的。

我选择VisualStudio 2008VC6++作为学习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个文件

1. glut解压出来,将其中的glut.h复制到C:\ProgramFiles (x86)\Microsoft Visual Studio 11.0\VC\include\gl下,若gl目录不存在,则新建。(在这种情况下头文件为#include<gl/glut.h>,我是直接放在C:\ProgramFiles (x86)\Microsoft Visual Studio 11.0\VC\include下,所以头文件#include<glut.h>即可)

2.1 glut.dllglut32.dll复制到C:\Windows\System32  (windows8 32位操作系统)

2.2 glut.dllglut32.dll复制到C:\Windows\SysWOW64(windows8 64位操作系统)

3. glut.lib,glut32.lib复制到C:\ProgramFiles (x86)\Microsoft Visual Studio 11.0\VC\lib下。

注意:win8gl.h头文件是大写的GL.h也可自己改改但为了系统的稳定还是不改(自己灵活处理有问题就是大小写的问题)glut.h-->Glut.h也可以这样便于以致性

至此,环境已经配置好了。

下面来开发一个简单的c++程序,环境vs2010中的vc

1. 新建->项目->win32控制台应用程序。

2. 输入项目名:simpleGL,其他默认即可。

3. 输入源代码:

#include"stdafx.h" 
#include <gl/glut.h> 
#include <stdio.h> 
#include <time.h> 
//
太阳、地球和月亮
//
假设每个月都是12
//
一年12个月,共是360
static int day = 200; // day
的变化:从0359 
double CalFrequency() 

    static int count; 
    static double save; 
    static clock_t last, current; 
    double timegap; 
    ++count; 
    if( count <= 50 ) 
        return save; 
    count = 0; 
    last = current; 
    current = clock(); 
    timegap = (current-last)/(double)CLK_TCK; 
    save = 50.0/timegap; 
    return save; 

void myDisplay(void) 

    double FPS = CalFrequency(); 
    printf("FPS = %f\n", FPS); 
    glEnable(GL_DEPTH_TEST); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(75, 1, 1, 400000000); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0, 1); 
    //
绘制红色的太阳” 
    glColor3f(1.0f, 0.0f, 0.0f); 
    glutSolidSphere(69600000, 20, 20); 
    //
绘制蓝色的地球” 
    glColor3f(0.0f, 0.0f, 1.0f); 
    glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f); 
    glTranslatef(150000000, 0.0f, 0.0f); 
    glutSolidSphere(15945000, 20, 20); 
    //
绘制黄色的月亮” 
    glColor3f(1.0f, 1.0f, 0.0f); 
    glRotatef(day/30.0*360.0 - day/360.0*360.0, 0.0f, 0.0f,-1.0f); 
    glTranslatef(38000000, 0.0f, 0.0f); 
    glutSolidSphere(4345000, 20, 20); 
    glFlush(); 
    glutSwapBuffers(); 

void myIdle(void) 

    ++day; 
    if( day >= 360 ) 
        day = 0; 
    myDisplay(); 

int main(int argc, char *argv[]) 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 
    glutInitWindowPosition(100, 100); 
    glutInitWindowSize(400, 400); 
    glutCreateWindow("
太阳,地球和月亮"); 
    glutDisplayFunc(&myDisplay); 
    glutIdleFunc(&myIdle); 
    glutMainLoop(); 
    return 0; 
}  

4. 选择项目属性,选择C/C++->预处理器,在右侧的预处理器定义处,删除“_CONSOLE“,如图


5. 在项目属性中,切换到链接器”->系统,右侧窗口的子系统选择:窗口(/SUBSYSTEM:WINDOWS)


6. 在项目属性中,再切换到链接器”->命令行,在其他选项中输入:/ENTRY:mainCRTStartup(可以去除程序运行时出现的dos窗口)


编译运行,就能看到太阳、地球和月亮的动态运行图!