OpenGL文件glew.h和gl.h/glu.h之间的区别

SKi*_*KiD 16 opengl glut glew

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

所以,现在我真的很困惑.我之前在我的程序中使用了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
Run Code Online (Sandbox Code Playgroud)

这里的任何人都可以解释这个头文件和我用它做的事情之间的区别吗?

我愣了很多时间,但在不同的网站上有更多令人困惑的词,如"欢乐合唱团"或"过剩".

dat*_*olf 43

你在这里混合了三种不同的东西:

  1. OpenGL的
  2. GL Utilities(GLU)不属于OpenGL
  3. 和GL扩展牧马人(GLEW)

GLEW和GLU是完全不同的东西,你不能互相替换.

GL/gl.h是基本的OpenGL头文件,它为您提供OpenGL-1.1函数和令牌声明,任何可能更多.对于超出1.1版的任何内容,您必须使用OpenGL扩展机制.由于这是一项枯燥乏味的任务,因此GLEW项目实现了自动化,该项目提供了一个易于使用的库中包含的所有脏信息.该库的声明可在头文件中找到GL/glew.h.由于OpenGL扩展在没有基本OpenGL的情况下没有意义,因此GLEW标头隐含地包含常规OpenGL标头,因此包括GL/glew.h您不再需要包含GL/gl.h.

然后是GLU,一组便利方法,BTW严重过时,不应该在任何现代OpenGL程序中使用.没有现代化的GLU,所以请忘记它.无论如何,它的声明是由标题GL/glu.h(你要问的那个)提供的.

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

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


小智 23

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

我是OpenGL的新手,所以如果我错了,请纠正我.