vs 2013配置OpenGL,GLFW库,GLEW库

OpenGL的接口实现是显卡商实现的(相关库函数由gl开头),OpenGL只是一套标准,只要电脑有显卡驱动,就有OpenGL的函数库,如果还没驱动,可以从这下载对应你电脑的显卡驱动。
GLFW是现在较流行、使用广泛的OpenGL的界面库,而glut库已经比较老了。GLEW是和管理OpenGL函数指针有关的库,因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询,而GLEW可以解决这些问题。

一.下载 GLFW,GLEW

到这GLFW官网下载GLFW32位版本,大家普遍下载32位版本,64位可能还不太完善,容易出问题,为了不必要的麻烦推荐下载32位版本。下载后,解压到自己指定的位置;
到这GLEW官网下载GLEW32位版本,然后解压

二. 配置GLFW

如果要使用GLFW库,就要将它和Visual Studio(准确来说是VS下的VC++)链接起来,有两种方法。

1.第一种方法,在工程的属性管理器包含GLFW的相关库

新建一个Visual C++的空项目,在右下边选中属性管理器,鼠标右击工程名字project1,选择属性。也可以鼠标右击工程名字,在菜单列表最下面可以看到属性

image.png

(1)在属性面板里选中VC++目录-->包含目录,右边下拉开始编辑
image.png

找到解压后的glfw-3.2.1.bin.WIN32文件下/include/的位置,将路径加进去,我的是D:\Another\glfw-3.2.1.bin.WIN32\include,然后点击确定和应用
image.png

(2)在属性面板里选中VC++目录-->库目录,右边下拉进行编辑,将文件里的lib-vc2013路径加进去,我的是D:\Another\glfw-3.2.1.bin.WIN32\lib-vc2013,点击确定和应用
image.png

(3)属性面板找到链接器-->输入,选中附加依赖项,在里面添加glfw3.lib,glfw3dll.lib,opengl32.lib,只是添加文件的名字,注意这些名字不要错了,不要用逗号分隔,要用换行。然后点击确定和应用
image.png

image.png

(4)在D:\Another\glfw-3.2.1.bin.WIN32\lib-vc2013下复制glfw3.dll文件,如果电脑是64位系统就将它放到C:\Windows\SysWOW64目录下,如果是32位系统,就放到C:\Windows\System32下,如果不清楚自己电脑32位还是64,就两个地方都放一份glfw3.dll

2.第二种方法,在Visual Studio安装目录下的VC文件夹下,添加GLFW相关库

打开刚才下载、解压后的 glfw-3.2.1.bin.WIN32 文件,我的是这样:

image.png

(1)将include中的GLFW文件夹拷贝到VS安装目录下的VC/include中
(2)我的是使用VS2013,就将lib-vc2013中的lib文件拷贝到VS2013安装目录下的VC/lib中,如果是VS2015就选择lib-vc2015中的lib文件拷贝到VS2015安装目录下的VC/lib中
(3)在D:\Another\glfw-3.2.1.bin.WIN32\lib-vc2013下复制glfw3.dll文件,如果电脑是64位系统就将它放到C:\Windows\SysWOW64目录下,如果是32位系统,就放到C:\Windows\System32下,如果不清楚自己电脑32位还是64,就两个地方都放一份glfw3.dll
(4)和第一种方法的第三步一样,在属性面板属性面板找到链接器-->输入,选中附加依赖项,在里面添加glfw3.lib,glfw3dll.lib,opengl32.lib,然后点击确定和应用

三.配置GLEW库

配置GLEW库和配置GLFW差不多一样,也有两种方法,只不过链接的库名字不一样罢了,可以在属性管理器里包含相关lib和include文件的路径,也可以将lib和include里的文件分别拷贝到vs安装目录下VC里lib和include文件夹下面。还有就是,因为有静态链接动态链接的选择,所以配置GLEW又有两种不同方式。注意:配置静态链接动态链接不一样,在代码里包含头文件也不一样。先找到之前下载、解压好的glew-1.13.0文件,我的是这样:

image.png

这里我使用第二种方法:
(1)将include中的GL文件夹拷贝到VS安装目录下的VC/include中,如果已经存在GL文件夹,就合并
(2)将glew-1.13.0\lib\Release\Win32中的lib文件拷贝到VS2013安装目录下的VC/lib中
(3)在glew-1.13.0\bin\Release\Win32下复制glew32.dll文件,如果电脑是64位系统就将它放到C:\Windows\SysWOW64目录下,如果是32位系统,就放到C:\Windows\System32下
(4)因为有静态链接和动态链接的选择,所以有两种不同方式,请看下面

1.静态链接配置的关键点:

在属性面板里,找到链接器-->输入,选中附加依赖项,编辑,在里面添加glew-1.13.0文件里的glew32s.lib(注意有s,static是静态的意思),然后点击确定、应用,注意:如果glew32s.lib(有s)和glew32.lib都在里面,那么glew32s.lib(有s)在glew32.lib前面,最好是,静态链接就只添加glew32s.lib,动态的就只加glew32.lib

image.png

在代码里,在最前面应该是这样,注意:#define GLEW_STATIC应该在#include <GL/glew.h>前面,#include <GL/glew.h>在#include<GLFW/glfw3.h>前面

image.png

2.动态链接配置的关键点:

在属性面板里,找到链接器-->输入,选中附加依赖项,编辑,在里面添加glew-1.13.0文件里的glew32.lib(自己找),然后点击确定、应用

image.png

然后在glew-1.13.0文件里找到glew32.dll,把它放到你的工程里
image.png

在代码里,只需要#include <GL/glew.h>就可以
image.png

4.这里我选择静态链接来测试,此时工程文件里不应该出现glew32.dll

#define GLEW_STATIC
#include <GL/glew.h>
#include<GLFW/glfw3.h>
#include<iostream>
/* 注意:#define GLEW_STATIC 在 #include<GL/glew.h>前面,
  * #include<GL/glew.h>在#include<GLFW/glfw3.h>前面
 */
using namespace std;

/*创建键盘输入的回调函数*/
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    // 当用户按下ESC键,我们设置window窗口的WindowShouldClose属性为true
    // 关闭应用程序
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}

int main()
{
    /*初始化GLFW*/
    glfwInit();
    /*配置GLFW窗口*/
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    /*创建窗口*/
    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
    if (window == nullptr)
    {
        cout << "Failed to create GLFW window" << endl;
        glfwTerminate();
        return -1;
    }
/*通知GLFW将我们窗口的上下文设置为当前线程的主上下文*/
    glfwMakeContextCurrent(window);

/*GLEW是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLEW*/
    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK)
    {
        cout << "Failed to initialize GLEW" << endl;
        return -1;
    }
/*告诉OpenGL渲染窗口的尺寸大小,这样OpenGL才只能知道怎样相对于窗口大小显示数据和坐标*/
    int width, height;
    glfwGetFramebufferSize(window, &width, &height);
    glViewport(0, 0, width, height);
/*注册回调函数*/
    glfwSetKeyCallback(window, key_callback);
/*事件循环*/
    while (!glfwWindowShouldClose(window))
    {
        glfwPollEvents();
    /*函数检查有没有触发什么事件(比如键盘输入、鼠标移动等),
     *然后调用对应的回调函数(可以通过回调方法手动设置)。
     我们一般在游戏循环的开始调用事件处理函数
     */

    // 这里写渲染指令


        glfwSwapBuffers(window);
    /*函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色的大缓冲),
     *它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
     */
}
/*释放GLFW分配的内存*/
    glfwTerminate();

    return 0;
}

运行成功则配置完成,哈哈

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容