您的位置:首页 > 运维架构

VS 2012 OpenGL 配置与实例开发

2014-03-11 21:01 344 查看
参考了网上的几篇资料,最后进行了总结,32位/64位均可用

OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。

1、与C语言紧密结合。

OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。

2、强大的可移植性。

微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关。

3、高性能的图形渲染。

OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。

总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。

OpenGL官方网站(英文)

http://www.opengl.org/

下面将对Windows下的OpenGL编程进行简单介绍。

学习OpenGL前的准备工作

第一步,选择一个编译环境

现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。

我选择Visual Studio 2008和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个文件

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

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

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

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

注意:win8下gl.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的变化:从0到359

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窗口)





编译运行,就能看到“太阳、地球和月亮的动态运行图”了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: