在Ubuntu上学习OpenGL

49
我正在尝试通过学习Nehe指南来学习OpenGL并提高我的C++技能,但是所有的例子都是针对Windows的,而我目前在使用Linux。我真的不知道如何在Linux下使它们正常工作,并且该网站上已经为Linux移植的代码中有更多未经解释的代码(到目前为止,我只能让SDL示例正常工作:http://nehe.gamedev.net/data/lessons/linuxsdl/lesson01.tar.gz)。是否有其他更专门针对Linux下的OpenGL的资源可用?

1
我承认Stack Overflow上的话题关闭有点像纳粹,但我相信很多人都有这个问题;在GameDev StackExchange上更适合。 - cossacksman
4个回答

73

首先要做的是安装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功能,如果没有启用,它应该告诉您问题所在。


1
有没有办法获得OpenGL 4.5功能?或者至少是4.1? - steoiatsl
1
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

9

我猜最初的最大区别是编译过程。这里提供一个有用的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进行编译。

祝好运


4

1

也许你想使用Qt来绘制窗口和小部件。

这里有一个基于Nehe指南的教程,向您展示如何使用Qt创建OpenGL图像。

要学习OpenGL,OpenGL红皮书是必读的。它有在线版本。它有非常好的解释和示例。


另一个好的教程 https://learnopengl.com/ - gl3yn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接