65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Ubuntu Linux 中设置 OpenGL 开发环境。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (19投票s)

2011年4月16日

CPOL

4分钟阅读

viewsIcon

207404

如何在 Ubuntu 中设置 OpenGL 和 freeglut 库以进行开发。

引言

本文介绍如何在 Ubuntu 中设置 OpenGL 和 freeglut 库,以便使用上述技术开发图形应用程序。OpenGL 是一个平台无关的图形 API,而 freeglut 是 OpenGL 实用工具包 (GLUT) 的后继者,它提供了一种通用的方法来在不同平台上创建和处理窗口及其他功能。本文将介绍如何在 Ubuntu 中安装这两个包,并在一个简单的 C++ 程序中使用它们,以测试它们是否已正确安装并正常工作。

必备组件

在系统设置和使用 OpenGL 和 freeglut 之前,有几件事需要考虑。

  • 一个可用的 Ubuntu 系统(我工作的系统运行的是 Ubuntu 10.10)。
  • 如果使用了显卡,应安装必要的驱动程序(请参阅此 链接)。
  • 应安装 C/C++ 编译所需的软件包。最佳方法是安装 build-essential 包,它包含了所有必需的组件(请参阅此 链接)。

安装 OpenGL 和 freeglut 库

为了确保我们选择最新版本的库,请导航至 www.debian.org 并选择 debian packages 选项(位于顶部菜单项“开发者专区”下)。

在 Packages 页面向下滚动,您会找到“搜索包内容”部分。本质上,我们需要搜索的是头文件 gl.hglut.h,以便获取包含它们的 OpenGL 和 freeglut 包。此外,还将提供这些包的最新版本,这正是我们所需要的。搜索 gl.h,如下图所示(将显示选项设置为“包含名称类似文件名的包”)。

fileSearch.png

搜索结果显示后,我们需要选择为 /usr/include/GL 指定的包。因此,在下图所示中,需要安装的包是“mesa-common-dev”包。

searchResults.png

对于文件 glut.h,需要遵循相同的步骤。搜索 glut.h 头文件,并选择为 /usr/include/GL 指定的包(如果搜索正确,该包将是“freeglut3-dev”)。通常,如果您需要安装一个包,但不确定是哪个包,或者是否是最新版本,您可以按照上述方式进行搜索,前提是您知道包中某个文件的名称。

一旦我们知道了 OpenGL (mesa-common-dev) 和 freeglut (freeglut3-dev) 的包名,安装它们只需打开一个终端窗口并输入这些包的 apt-get 命令即可。

  • sudo apt-get install mesa-common-dev
  • sudo apt-get install freeglut3-dev

请注意,如果您的系统上已安装了一个或两个包,当您输入上述命令时,内核将显示相应的消息,通知您这些包已安装并且是最新版本。

如果安装顺利,您将在 /usr/include/GL 目录位置看到以下内容。

GLfolder.png

现在 OpenGL 和 freeglut 库已在系统中配置好,下一步是使用它们编写一个简单的程序进行测试,看看一切是否正常工作,以及我们是否拥有一个可以开始设计和编写 OpenGL 图形应用程序的环境。

测试

为了测试 OpenGL 和 freeglut 库是否正常工作,我们将编写一个简单的程序来利用库的 API。C++ 程序将使用 OpenGL Red Book 中的代码(如果您计划使用 OpenGL 进行开发,这绝对是必读的),该代码位于标题为“一个非常简单的 OpenGL 程序”的 “一个非常简单的 OpenGL 程序”下。以下代码列表显示了该程序。

#include "GL/freeglut.h"
#include "GL/gl.h"

/* display function - code from:
     http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html
This is the actual usage of the OpenGL library. 
The following code is the same for any platform */
void renderFunction()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
    glBegin(GL_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();
}

/* Main method - main entry point of application
the freeglut library does the window creation work for us, 
regardless of the platform. */
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);
    glutCreateWindow("OpenGL - First window demo");
    glutDisplayFunc(renderFunction);
    glutMainLoop();    
    return 0;
}

将上述代码输入文本编辑器并保存为 CPP 文件(例如,firstWindow.cpp)后,打开终端窗口并导航到 firstWindow.cpp 的位置。在这里,您将通过键入 g++ firstWindow.cpp -lglut 来编译程序以获得可执行文件。-lglut 用于将文件链接到 freeglut 库。如果一切顺利,您将得到传统的 a.out 文件。通过在命令行中键入 ./a.out 来运行可执行文件,应该会显示上面代码列表的结果。

firstWindow.png

就是这样。从现在开始,您就可以使用各种 OpenGL 函数并自定义编程方式了。如果您成功克服了编译和运行 OpenGL 程序的第一个障碍,那么剩下的就是学习如何用 OpenGL 编程并发挥创意了。

关注点

我正在研究设置 OpenGL 和 freeglut 以及 SDL(用于方便的鼠标和键盘事件处理),可能还有 OpenAL(用于音频)。市面上有很多不错的渲染引擎(可以看看 Ogre3D),但如果您想开发游戏,一切(渲染、输入、音频、物理等)都至关重要。如果我发现任何新的有趣进展,将来会写更多文章:)

历史

  • 2011 年 4 月 15 日 - 文章初稿撰写和发布。
© . All rights reserved.