【问题标题】:Difference between OpenGL files glew.h and gl.h/glu.hOpenGL 文件 glew.h 和 gl.h/glu.h 之间的区别
【发布时间】:2012-08-20 19:10:26
【问题描述】:

我用我的 glu 和 gl 头文件构建了一个 OpenGL 程序,默认包含在 windows 7 专业版中。现在,我买了一本描述 OpenGL 游戏开发的书。这本书的作者说,我必须将 glew header 包含到我的项目中。完成此操作后,我遇到了一些未解决的外部符号错误。

所以,现在我真的很困惑。 我之前在我的程序中使用过 glBegin 和 glEnd 语句。现在我必须使用 glBindBuffers 和 glGenBuffer 等,但我得到了未解决的外部符号错误,如下所示:

1>cWindows.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBufferData
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewGenBuffers

这里有没有人可以解释这些头文件之间的区别以及我对它们的处理方式?

我看了很多次,但在不同的网站上有更多令人困惑的词,比如“glee”或“glut”。

【问题讨论】:

    标签: opengl glut glew


    【解决方案1】:

    你在这里混淆了 3 种不同的东西:

    1. OpenGL
    2. 不属于 OpenGL 的 GL 实用程序 (GLU)
    3. 和 GL Extension Wrangler (GLEW)

    GLEW 和 GLU 是完全不同的东西,你不能用另一个代替。

    GL/gl.h 是基本的 OpenGL 头文件,它为您提供 OpenGL-1.1 函数和令牌声明,甚至更多。对于超过 1.1 版的任何内容,您必须使用 OpenGL 扩展机制。由于这是一项无聊而乏味的任务,因此 GLEW 项目已将其自动化,该项目提供了一个易于使用的库中打包的所有脏细节。这个库的声明可以在头文件GL/glew.h 中找到。由于没有基本的 OpenGL,Op​​enGL 扩展没有意义,因此 GLEW 标头隐式包含常规 OpenGL 标头,因此包含 GL/glew.h 后,您不再需要包含 GL/gl.h

    然后是 GLU,一组方便的方法,顺便说一句,它已经严重过时,不应该在任何现代 OpenGL 程序中使用。没有现代 GLU,所以别管它了。无论如何,它的声明由标题GL/glu.h(您所询问的那个)提供。

    您得到的错误与包含文件无关。这些是链接器错误。仅仅包括声明只是工作的一半。另一半是链接实际的定义,而那些不在库文件头中的; libglew.solibglew.a 在 *nix 操作系统上,glew.libglew32.libglews.libglew32s.lib 在 Windows 上。如果不使用静态版本(没有“s”的版本),您还必须安装正确的 DLL。

    因此,要使用 GLEW,您需要包含标题将其添加到链接器选项中的库列表中。此外,在您的程序中获得 OpenGL 上下文后,您必须调用 glewInit();

    【讨论】:

      【解决方案2】:
      • gl:这是 OpenGL 1.1 版的基本头文件。这意味着,如果您想使用 1.1 版以外的任何功能,则必须在此基础上添加任何扩展库。
      • glew:OpenGL 扩展牧马人库。这是一个用于加载 OpenGL 扩展功能的跨平台库。当您初始化此库时,它会在运行时检查您的平台和显卡,以了解您的程序中可以使用哪些功能。
      • glu:这是OpenGL实用程序库,很久没有更新了。不需要使用这个头文件。
      • glut:用于窗口化 API 的 OpenGL 实用工具包。这适用于中小型 OpenGL 程序。如果您需要更复杂的窗口库,请使用 GTK 或 Qt 等用于 linux 机器的原生窗口系统工具包。
      • glfw:OpenGL 框架工作。另一个用于创建窗口和处理事件的多平台库。 FreeGlut 可以用作替代品。 glfw 专为游戏开发而设计。
      • glm:OpenGL 数学。它有助于实现向量和矩阵运算。

      我对 OpenGL 的东西很陌生,所以如果我错了,请纠正我。

      【讨论】:

        猜你喜欢
        • 2013-03-06
        • 2014-03-13
        • 2012-01-24
        • 1970-01-01
        • 2014-07-03
        • 1970-01-01
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多