GLFW初体验

简介:

GLFW - 很遗憾,没有找到FW的确切含义,Wiki上没有,GLFW主页也没有。猜测F表示for,W表示Window

GLFW是干啥用的?

一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。那么GLFW有何优势呢?glut太老了,最后一个版本还是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齐全,但是bug太多。稳定性也不好(不是我说的啊),GLFW应运而生。

如何使用GLFW

直接使用库文件

1. 到这里下载编译好的库文件

2. 解压后直接使用即可,详见后面配置。

自行编译源码

如果想提高B格,自行编译的话,可以按如下步骤进行。

1. 到这里下载GLFW

2. 到这里下载CMake

3. 参考这个页面进行编译

配置GLFW编程环境

1. 打开Visual Studio 2012,新建一个Console程序

2. 右键单击project选择properties,打开属性页面

3. 在VC++Directories-Include Directories中写入glfw的头文件目录,我这里是 ../glfw-3.0.4.bin.WIN32/include

4. 在VC++ Directories-Library Directory中写入glfw的库文件目录,我这里是 ../glfw-3.0.4.bin.WIN32/lib-msvc110

5. 在Linker - Input - Additional Dependencies中填入glfw3dll.lib

注意:如果使用静态链接,那么上面第五步中glfw3dll.lib应该换成glfw3.lib,并且在工程属性页面中C/C++ - Code Generation 将 Runtime Library 设置为 /Mt 或者 /Mtd

渲染三角形

配置好环境之后,开始进入正题,总得画点什么吧。 渲染三角形几乎是图形程序中的Hello world。代码如下,框架是从glfw首页copy过来的,绘制三角形的代码是我加上去的。

复制代码
#include <GLFW/glfw3.h>

int main(void)
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(480, 320, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Draw a triangle */
        glBegin(GL_TRIANGLES);

        glColor3f(1.0, 0.0, 0.0);    // Red
        glVertex3f(0.0, 1.0, 0.0);

        glColor3f(0.0, 1.0, 0.0);    // Green
        glVertex3f(-1.0, -1.0, 0.0);

        glColor3f(0.0, 0.0, 1.0);    // Blue
        glVertex3f(1.0, -1.0, 0.0);

        glEnd();

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}
复制代码

代码很简单,看注释即可,无需多解释。如果一切正常,屏幕上会出现一个窗口,里面有一个五颜六色的三角形。

常见错误及解决办法

使用一个库无非包含三个步骤:

  • 包含头文件
  • 链接库文件
  • 提供运行时dll文件

只要这三个步骤正确了,基本不会出问题。

错误一

1    error C1083: Cannot open include file: 'GLFW/glfw3.h': No such file or directory
2    IntelliSense: cannot open source file "GLFW/glfw3.h"
3    IntelliSense: identifier "GLFWwindow" is undefined
4    IntelliSense: identifier "window" is undefined
5    IntelliSense: identifier "glfwInit" is undefined
6    IntelliSense: identifier "glfwCreateWindow" is undefined
7    IntelliSense: identifier "NULL" is undefined
8    IntelliSense: identifier "glfwTerminate" is undefined
9    IntelliSense: identifier "glfwMakeContextCurrent" is undefined
10    IntelliSense: identifier "glfwWindowShouldClose" is undefined
11    IntelliSense: identifier "glfwSwapBuffers" is undefined
12    IntelliSense: identifier "glfwPollEvents" is undefined
13    IntelliSense: identifier "glfwTerminate" is undefine

这显然是头文件没有找到,导致下面所有glfw相关的类型都找不到定义。需要正确设置头文件的路径,注意只要包含到include目录一级即可,比如\glfw-3.0.4.bin.WIN32\include

错误二

Error    1    error LNK2019: unresolved external symbol _glfwInit referenced in function _main
Error    2    error LNK2019: unresolved external symbol _glfwTerminate referenced in function _main
Error    3    error LNK2019: unresolved external symbol _glfwCreateWindow referenced in function _main
Error    4    error LNK2019: unresolved external symbol _glfwWindowShouldClose referenced in function _main
Error    5    error LNK2019: unresolved external symbol _glfwPollEvents referenced in function _main
Error    6    error LNK2019: unresolved external symbol _glfwMakeContextCurrent referenced in function _main
Error    7    error LNK2019: unresolved external symbol _glfwSwapBuffers referenced in function _main
Error    8    error LNK1120: 7 unresolved externals
这个错误发生在链接阶段,说明是库文件(.lib)文件找不到,需要在项目的属性页面中设置lib文件,在Visual Studio中右键单击Project,选择Properties - Configuration Propterties - Linker - Input - Additional Dependencies,单击右侧的下三角进入编辑页面,将glfw3dll.lib加入其中即可。

注意:gflw提供了不同版本的库文件,如果你使用的是Visual Studio 2012,请使用lib-msvc110下面的库文件,如果是Visual Studio 2013,那么则需要使用lib-msvc120下面的库文件。lib文件有两个,一个是glfw3.lib,一个是glfw3dll.lib,前者是静态链接用的(链接此文件后,运行时无需dll文件,但是程序体积会变大),后者是动态链接用的(配合dll使用),不要搞混。

错误三

dll缺失,如下。

编译链接都没问题,运行时出现这个错误,很简单,使用的是动态链接,但是程序没有找到对应的dll文件,将glfw3.dll复制到程序所在目录即可,一般是Visual Studio的Debug或Release目录。

错误四

Error    1    error LNK2005: _free already defined in LIBCMT.lib(free.obj)
Error    2    error LNK2005: _realloc already defined in LIBCMT.lib(realloc.obj)
Error    4    error LNK1169: one or more multiply defined symbols foun

这是由于VS默认链接了LIBCMT.lib,只要将它禁止即可,在工程属性页面选择Linker - Input - Ignore Specific Library,点击右侧小箭头进行编辑,加入libcmt.lib即可。

==

本文转自zdd博客园博客,原文链接http://www.cnblogs.com/graphics/p/3661500.html,如需转载请自行联系原作者

相关文章
|
存储 数据采集 传感器
一文多图搞懂KITTI数据集下载及解析
一文多图搞懂KITTI数据集下载及解析
17437 3
一文多图搞懂KITTI数据集下载及解析
|
存储 编解码 缓存
视频平台技术成本控制的量化方法
在线视频平台为用户提供服务时,面临的一个严重的挑战是,如何保证在为用户提供流畅 且稳定播放服务的前提下,尽量降低整体运营成本。本篇文章将围绕上述问题,重点讨论技术实践中的成本控制手段。
视频平台技术成本控制的量化方法
|
9月前
|
人工智能 弹性计算 自然语言处理
2026阿里云OpenClaw(Clawdbot)一键部署+Skills全攻略:新手零代码解锁AI自动化
在AI自动化工具爆发的2026年,OpenClaw(原Clawdbot、Moltbot)凭借“自然语言指令+任务自动执行”的核心能力脱颖而出,而真正让其突破“纯对话”局限、实现多元化实操的关键,正是OpenClaw Skills(技能插件)。作为OpenClaw的“插件系统”,Skills就像给AI大脑装上了“灵活双手”,让智能体从“只会说”升级为“会做事”,覆盖办公自动化、开发辅助、生活便捷等31大分类、1715+个技能,成为提升效率的“专属数字员工”。
1071 3
|
8月前
|
机器学习/深度学习 人工智能 算法
SEP-YOLO:当频域分析遇上YOLO,透明物体实例分割迎来新突破,ISCAS 2026
本文提出SEP-YOLO框架,首创频域细节增强模块(可学习复数权重强化高频边界)、多尺度空间细化流(内容感知对齐+门控细化),并为Trans10K提供首个高质量实例标注。在Trans10K/GVD上mAP50超SOTA 3%+,兼顾精度与实时性。
606 5
|
9月前
|
人工智能 自然语言处理 机器人
OpenClaw Skills是什么?2026年阿里云一键部署OpenClaw +Skills多场景应用实战指南
在AI智能体应用日益普及的2026年,OpenClaw(原Clawdbot/Moltbot)凭借其开源灵活的特性成为个人与中小企业打造专属AI助手的优选工具,而核心的**OpenClaw Skills**更是让这款工具的实用性实现了质的飞跃。作为OpenClaw的场景化技能插件库,2026版Skills生态已扩充至50+内置技能,覆盖办公、开发、生活、运营等八大核心场景,且阿里云已完成专属部署流程优化,提供一键部署脚本,集成Skills库自动安装,零基础用户也能快速落地使用。本文将从基础概念、核心能力、阿里云一键部署、全场景实战应用、常见问题解决五个维度,全面解析OpenClaw Skills
1238 2
|
开发框架 前端开发 Java
【Spring】Spring框架介绍,功能模块,容器知识和有关Spring的生态圈的详细讲解
【Spring】Spring框架介绍,功能模块,容器知识和有关Spring的生态圈的详细讲解
865 0
|
Serverless API
【MCP教程系列】在阿里云百炼,实现超级简单的MCP服务部署
阿里云百炼推出业界首个全生命周期MCP服务,支持一键在线注册托管。企业可将自研或外部MCP服务部署于阿里云百炼平台,借助FC函数计算能力,免去资源购买与服务部署的复杂流程,快速实现开发。创建MCP服务仅需四步,平台提供预置服务与自定义部署选项,如通过npx安装代码配置Flomo等服务。还可直接在控制台开通预置服务,体验高效便捷的企业级解决方案。
4875 0
|
机器学习/深度学习 人工智能 自然语言处理
阿里云人工智能平台 PAI 开源 EasyDistill 框架助力大语言模型轻松瘦身
本文介绍了阿里云人工智能平台 PAI 推出的开源工具包 EasyDistill。随着大语言模型的复杂性和规模增长,它们面临计算需求和训练成本的障碍。知识蒸馏旨在不显著降低性能的前提下,将大模型转化为更小、更高效的版本以降低训练和推理成本。EasyDistill 框架简化了知识蒸馏过程,其具备多种功能模块,包括数据合成、基础和进阶蒸馏训练。通过数据合成,丰富训练集的多样性;基础和进阶蒸馏训练则涵盖黑盒和白盒知识转移策略、强化学习及偏好优化,从而提升小模型的性能。
|
人工智能 算法 API
谷歌AI Gemini 2.5 pro国内使用教程, 2025最新版!
在 2025 年 2 月初,谷歌又推出了 Gemini 2.0 Pro 系列模型,进一步巩固了其在 AI 领域的领先地位,同时也正式向外界宣告,我们进入了 Gemini 2.0 时代
6371 5

热门文章

最新文章