我正在尝试通过学习Nehe指南来学习OpenGL并提高我的C++技能,但是所有的例子都是针对Windows的,而我目前在使用Linux。我真的不知道如何在Linux下使它们正常工作,并且该网站上已经为Linux移植的代码中有更多未经解释的代码(到目前为止,我只能让SDL示例正常工作:http://nehe.gamedev.net/data/lessons/linuxsdl/lesson01.tar.gz)。是否有其他更专门针对Linux下的OpenGL的资源可用?
首先要做的是安装OpenGL库。我推荐以下几个:
freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev
安装完成后,在编译时将其链接到你的项目中:
g++ -lglut -lGL -lGLU -lGLEW example.cpp -o example
在example.cpp中,像这样包含OpenGL库:
#include <GL/glew.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glext.h>
然后,要启用更高级的OpenGL选项(如着色器),请在glutCreateWindow调用之后放置以下内容:
GLenum err = glewInit();
if (GLEW_OK != err)
{
fprintf(stderr, "Error %s\n", glewGetErrorString(err));
exit(1);
}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
if (GLEW_ARB_vertex_program)
fprintf(stdout, "Status: ARB vertex programs available.\n");
if (glewGetExtension("GL_ARB_fragment_program"))
fprintf(stdout, "Status: ARB fragment programs available.\n");
if (glewIsSupported("GL_VERSION_1_4 GL_ARB_point_sprite"))
fprintf(stdout, "Status: ARB point sprites available.\n");
这应该启用所有OpenGL功能,如果没有启用,它应该告诉您问题所在。
fprintf(stdout, "%s\n", glGetString(GL_VERSION));
outputs 3.0 Mesa 17.3.0-devel
although I have 4.5 OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.3.0-devel
- steoiatsl我猜最初的最大区别是编译过程。这里提供一个有用的Makefile,用于在Ubuntu上编译简单的OpenGL应用程序。
INCLUDE = -I/usr/X11R6/include/
LIBDIR = -L/usr/X11R6/lib
FLAGS = -Wall
CC = g++ # change to gcc if using C
CFLAGS = $(FLAGS) $(INCLUDE)
LIBS = -lglut -lGL -lGLU -lGLEW -lm
All: your_app # change your_app.
your_app: your_app.o
$(CC) $(CFLAGS) -o $@ $(LIBDIR) $< $(LIBS) # The initial white space is a tab
请将以下内容保存到名为Makefile的文件中,该文件应位于同一目录中。在终端上写入make或从Vim写入:make进行编译。
祝好运
我稍微更新了makefile,因为我在@Millthorn的旧回答中发现它无法正常工作:
您不需要定义包含路径,因为它已经在标准库中了。https://dev59.com/bEvSa4cB1Zd3GeqPgrUW#2459788
编译OpenGL所需的最简Makefile可能如下所示:
LDFLAGS=-lglut -lGL -lGLU -lGLEW -lm
all: your_app
http://surflab.cise.ufl.edu/wiki/Getting_Started_with_OpenGL_in_Ubuntu