创建窗口

在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样的,OpenGL有目的的抽象(Abstract)这些操作。这意味着我们不得不自己处理创建窗口,定义OpenGL上下文以及处理用户输入。
幸运的是,有一些库已经提供了我们所需的功能,其中一部分是特别针对OpenGL的。这些库节省了我们书写平台相关代码的时间,提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUT,SDL,SFML和GLFW。在教程里我们将使用GLFW。

配置前的注意事项

今天我们来介绍OGRE的环境配置及其详细安装过程。本文作者使用的是OGRE
1.10 + Visual Studio Community 2017 +
Win10(内存8G,部分人在编译OGRE时可能会遇到内存溢出的问题,解决方法在这里)
。这里要注意的是,OGRE的下载页面往往会提供一些已经编译好的sdk文件,但一般对应的VS版本都较低,灵活性不好,因此,在官网的Download页面也推荐读者利用源码进行编译安装,因此,读者不需要另外安装其他版本的VS,直接用自己电脑上已安装的版本即可。另外,若进行源码编译安装,则建议直接下载最新版本的OGRE。这里引用官网中的原话:

We recommend you to build Ogre from source to make it match your needs
(debug/ release, C++11 options etc.). The “install” target will
generate you the SDK that you can then use for your project.

另一个非常重要的工具就是CMake,其在对dependencies源码和OGRE源码的编译中都会用到,后面部分将会详细叙述。

OGRE的环境配置较为复杂,依赖于很多第三方图像库,因此,在安装OGRE之前,首先要对OGRE依赖的环境进行正确配置。本文的教程是根据作者自身的配置经历整理出来的,OGRE的官网上也对环境的配置及其安装做出了详细的指导:

  • http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Prerequisites
  • http://www.ogre3d.org/tikiwiki/tiki-index.php?page=CMake+Quick+Start+Guide

但是在实际的编译过程中仍然会遇到一些问题,下面将对具体的配置安装步骤进行详细的叙述。


SFML和Visual Studio

GLFW

GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物件所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入。
这一节和下一节的内容是建立GLFW环境,并保证它恰当地创建窗口和OpenGL上下文。

环境配置

介绍

如果您在Visual Studio IDE(Visual C
++编译器)中使用SFML,本教程是第一个应该阅读的教程。它将解释如何配置您的SFML项目。

构建GLFW

GLFW已经有针对Visual Studio
2012/2013的预编译的二进制版本(优先选择32为版本)和相应的头文件,但是为了完整性我们将从编译源代码开始,

  1. 下载源代码包。
  2. 一旦下载完了源码包,解压到某处。我们只关心里面的这些内容:
    编译生成的库
    include文件夹

从源代码编译库可以保证生成的目标代码是针对你的操作系统和CPU的,而一个预编译的二进制代码并不保证总是适合。提供源代码的一个问题是不是每个人都用相同的IDE来编译,因而提供的工程文件可能和一些人的IDE不兼容。所以人们只能从.cpp和.h文件来自己建立工程,这是一项笨重的工作。因此诞生了一个叫做CMake的工具。

CMAKE
CMake是一个工程文件生成工具,可以使用预定义好的CMake脚本,根据用户的选择生成不同IDE的工程文件。这允许我们从GLFW源码里创建一个Visual
Studio 2012(或其他版本)工程文件。

CMake需要一个源代码目录和一个存放编译结果的目标文件目录。源代码目录我们选择GLFW的源代码的根目录,然后我们新建一个build文件夹来作为目标目录。

Betway官网 1

之后,点击Configure(设置)按钮,我们选择生成的目标平台为Visual Studio
11(因为Visual Studio
2012的内部版本号是11.0)。CMake会显示可选的编译选项,这里我们使用默认设置,再次点击Configure(设置)按钮,保存这些设置。保存之后,我们可以点击Generate(生成)按钮,生成的工程文件就会出现在你的build文件夹中。

编译
在build文件夹里可以找到GLFW.sln文件,用Visual Studio
2012打开。因为CMake已经配置好了项目所以我们直接点击Build
Solution(构建解决方案)然后编译的结果glfw3.lib就会出现在src/Debug文件夹内。(注意我们现在使用的glfw的版本号为3.1)
生成库之后,我们需要让IDE知道库和头文件的位置。有两种方法:

找到IDE或者编译器的/lib和/include文件夹,之后添加GLFW的include目录到/include里去,相似的将glfw3.lib添加到/lib里去。这不是推荐的方式,因为很难去追踪library/include文件夹,而且重新安装IDE/Compiler可能会导致这些文件丢失。
推荐的方式是建立一个新的目录包含所有的第三方库文件和头文件,并且在你的IDE/Compiler中指定这些文件夹。我个人使用一个单独的文件夹包含Libs和Include文件夹,在这里存放OpenGL工程用到的所有第三方库和头文件。这样我的所有第三方库都在同一个路径(并且应该在你的多台电脑间共享),然而要求是每次新建一个工程我们都需要告诉IDE/编译器在哪能找到这些文件
完成上面步骤后,我们就可以使用GLFW创建我们的第一个OpenGL工程了!

安装CMake并下载OGRE源码

  • CMake下载地址
  • OGRE工程地址
    注意的是,为了避免编译过程中对中文字符不兼容,CMake和OGRE的安装地址中不要包含中文字符。

安装SFML

首先,您必须从下载页面下载SFML
SDK 。

您必须下载与您的Visual C ++版本相匹配的软件包。事实上,用VC ++
10(Visual Studio 2010)编译的库不会与VC ++ 12(Visual Studio
2013)兼容。如果没有为您的Visual C
++版本编译的SFML包,则必须 自己构建SFML。

自己构建SFML方法(如果有自己vs版本SDK可直接下载SDK使用跳过构建,直接看下文vs2017中SML
SDK的配制):

我们的第一个工程

让我们打开Visual Studio,创建一个新Viesual C++的工程。

安装编译器

本文作者使用的是免费的Visual Studio Community
2017,安装建议,按需安装,如果只是进行C++工程的开发,建议安装一个基本的C++即可,大概5G左右,且安装速度很快,不得不说是VS
2017的亮点所在。

1.安装CMake 下载地址

2.官网下载SFML Source code
解压到任意路径 本例中放在d:/sfml

3.打开CMake 设置如下①SFML Source code路径**②工程生成路径③生成
**

Betway官网 2

4.第一次选择编译器

Betway官网 3

 

5.选择配制

Betway官网 4

 

 

 配制说明,一般默认就可以了(建议改下生成路径默认在C:\
Program Files)

 

变量 含义
CMAKE_BUILD_TYPE 该选项选择构建配置类型。有效值是“调试”和“释放”(还有其他类型,如“RelWithDebInfo”或“MinSizeRel”,但它们是为了更高级的构建)。请注意,如果为支持多种配置(如Visual Studio)的IDE生成工作空间,则会忽略此选项,因为工作空间可以同时包含多个配置。
CMAKE_INSTALL_PREFIX 这是安装路径。默认情况下,它被设置为操作系统上最典型的安装路径(Linux和Mac OS X为“/ usr / local”,Windows为“C:\ Program Files”等)。在构建SFML之后安装SFML并不是强制性的,因为您可以直接从构建它们的地方使用二进制文件。这可能是一个更好的解决方案,但是,要正确安装它们,以便可以删除构建过程中生成的所有临时文件。
CMAKE_INSTALL_FRAMEWORK_PREFIX(Mac OS X only) 这是框架的安装路径。默认情况下,它被设置为根库文件夹ie / Library / Frameworks。正如上面对CMAKE_INSTALL_PREFIX所述,在构建SFML之后并不强制安装SFML,但是这样做肯定是比较干净的。
如果选择BUILD_FRAMEWORKS,则此路径也用于在系统上安装sndfile框架(Apple不提供所需的依赖项)和SFML作为框架。
BUILD_SHARED_LIBS 这个布尔选项控制你是否将SFML构建为动态(共享)库,或者是静态的。
此选项不应与SFML_USE_STATIC_STD_LIBS同时启用,它们是互斥的。
SFML_BUILD_FRAMEWORKS(Mac OS X only) 这个布尔选项控制你是否构建SFML作为 框架捆绑 或作为 dylib二进制文件。构建框架需要选择BUILD_SHARED_LIBS。
建议在发布应用程序时使用SFML作为框架。但请注意,SFML不能作为框架在调试配置中构建。在这种情况下,请使用dylib代替。
SFML_BUILD_EXAMPLES 该布尔选项控制SFML示例是否与库一起构建。
SFML_BUILD_DOC 这个布尔选项控制你是否生成SFML文档。请注意, Doxygen工具必须安装并可访问,否则启用此选项将产生错误。
在Mac OS X上,您可以将经典Unix doxygen二进制文件安装到/ usr / bin或任何类似的目录中,或者将Doxygen.app安装到任何“应用程序”文件夹中,例如〜/ Applications。
SFML_USE_STATIC_STD_LIBS(Windows only) 这个布尔选项选择链接到SFML的C / C ++运行时库的类型。
TRUE静态链接标准库,这意味着SFML是独立的,不依赖于编译器特定的DLL。
FALSE(缺省值)动态链接标准库,这意味着SFML依赖于编译器的DLL(用于Visual C ++的msvcrxx.dll / msvcpxx.dll,用于GCC的libgcc_s_xxx-1.dll / libstdc ++ – 6.dll)。设置这个时要小心。该设置必须符合您自己的项目设置,否则您的应用程序可能无法运行。
此选项不应与BUILD_SHARED_LIBS同时启用,它们是互斥的。
CMAKE_OSX_ARCHITECTURES(Mac OS X only) 该设置指定了应该构建SFML的体系结构。建议的值是“x86_64”,因为不再支持32位版本。
SFML_INSTALL_XCODE_TEMPLATES(Mac OS X only) 这个布尔选项控制CMake是否将Xcode模板安装到你的系统上。请确保/ Library / Developer / Xcode / Templates / SFML存在并且是可写的。有关这些模板的更多信息,请参阅Mac OS X的“入门”教程。
SFML_INSTALL_PKGCONFIG_FILES(Linux shared libraries only) 这个布尔选项控制CMake是否将pkg-config文件安装到你的系统上。pkg-config是一个为查询已安装库提供统一接口的工具。

修改改生成SDK的路径

Betway官网 5

 

 

 

 6. 选择Generate   完成后  选Open
Project

 

7.生成 SFML SDK

Betway官网 6

 

Betway官网 7

 

 9.在D:/sfml 2.0 文件夹即 是我们生成
的SFML SDK 

 

链接(Linking)

为了使我们的程序使用GLFW,我们需要把GLFW库链接(Link)进工程。于是我们需要在链接器的设置里写上glfw3.lib。但是我们的工程还不知道在哪寻找这个文件,于是我们首先需要将我们放第三方库的目录添加进设置。
为了添加这些目录,我们首先进入Project
Properties(工程属性)(在解决方案窗口里右键项目),然后选择VC++
Directories选项卡(如下图)。在下面的两栏添加目录:

Betway官网 8

现在VS可以找到我们链接GLFW需要的所有文件了。最后需要在Linker(链接器)选项卡里的Input选项卡里添加glfw3.lib这个文件:

Betway官网 9

要链接一个库我们必须告诉链接器它的文件名。因为我们的库名字是glfw3.lib,我们把它加到Additional
Dependencies域里面(手动或者使用选项)。这样GLFW就会被链接进我们的工程。除了GLFW,你也需要链接OpenGL的库,但是这个库可能因为系统的不同而有一些差别。

  • Windows上的OpenGL库
    如果你是Windows平台,opengl32.lib已经随着Microsoft SDK装进了Visual
    Studio的默认目录,所以Windows上我们只需将opengl32.lib添加进Additional
    Dependencies。

  • Linux上的OpenGL库
    在Linux下你需要链接libGl.so,所以要添加-lGL到你的链接器设置里。如果找不到这个库你可能需要安装Mesa,NVidia或AMD的开发包,这部分因平台而异就不仔细讲解了。

现在,如果你添加好了GLFW和OpenGL库,你可以用如下方式添加GLFW头文件:

#include <GLFW\glfw3.h>

这个头文件包含了GLFW的设置。

Boost配置(可选)

Boost is not required to build Ogre – it’s optional.

The Boost Threads library is used by the paging component, which in
turn is used by the terrain component, enabling background loading and
thus faster response times.

OGRE的build不需要Boost库,但在实际使用中,页面组件需要Boost库,用于背景加载,并缩小响应时间。
Boost的配置很简单,首先从官网中下载最新版的Boost源码本文使用的版本是1.66.0。具体可参照以下两篇博客:

  • windows下编译和安装boost库

在VS2017中配置SFML

首先要做的是选择要创建的项目类型:您必须选择“Win32应用程序”。该向导提供了几个选项来定制项目:如果您需要控制台,请选择“控制台应用程序”;如果您不需要,请选择“Windows应用程序”。如果您不希望被自动生成的代码烦恼,请选中“空项目”框。
为了本教程的目的,您应该创建一个main.cpp文件并将其添加到项目中,以便我们可以访问C
++设置(否则Visual
Studio不知道您将为此项目使用哪种语言)。稍后我们将解释放入什么内容。

在新建项目上右键的打开项目属性:

这些路径在“调试”和“发行版”配置中都是相同的,因此您可以为项目全局设置它们(“所有配置”)。

Betway官网 10

 

 

 Betway官网 11

 

到此ok!可以在vs2017 中畅玩 SFML SDK库了

 

GLEW

因为OpenGL只是一个规范,具体的实现是由驱动开发商针对特定显卡实现的。由于显卡驱动版本众多,大多数函数都无法在编译时确定下来,需要在运行时获取。开发者需要运行时获取函数地址并保存下来供以后使用。Windows下看起来类似这样:

// 定义函数类型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);

幸运的是,有一个针对此目的的库,GLEW,是目前最流行的做这件事的方式。

编译和链接GLEW
GLEW是OpenGL Extension Wrangler
Library的缩写,它管理我们上面提到的一系列繁琐的任务。因为GLEW也是一个库,我们同样需要链接进工程。
我们使用GLEW的静态版本glew32s.lib(注意这里的’s’),用如上的方式添加其库文件和头文件,最后在链接器的选项里加上glew32s.lib。注意GLFW3也是编译成了一个静态库。
如果你希望静态链接GLEW,必须在包含GLEW头文件之前定义预编译宏GLEW_STATIC:

#define GLEW_STATIC
#include <GL/glew.h>

如果你希望动态链接,那么就不要定义这个宏。但是使用动态链接的话你需要拷贝一份dll文件到你的应用程序目录。

对于Linux用户建议使用这个命令行-lGLEW -lglfw3 -lGL -lX11 -lpthread
-lXrandr -lXi。没有正确链接相应的库会产生undefined
reference(未定义的引用)这个错误。

  • 记住确保你的头文件和库文件的目录设置正确,以及链接器里引用的库文件名正确。

DirectX

这里需要注意的是:

  • 对于1.x版本的OGRE的正确build,一定要安装DirectX 9 SDK (DX SDK
    June 2010)
  • 在安装过程中,很有可能会碰到error code
    S1023
    的错误而导致DirectX安装错误,这是因为你的系统在安装June 2010
    DirectX 9 SDK之前已经安装了更高版本的 Visual C++ 2010
    Redistributable Package,你需要先卸载这个更高版本的Visual C++ 2010
    Redistributable Package,再安装June 2010 DirectX 9
    SDK,然后再安装Visual C++ 2010 Redistributable
    Package,祥见https://support.microsoft.com/en-us/kb/2728613

额外的资源

Polytonic/Glitter:
一个简单的样板项目,它已经提前配置了所有相关的库;如果你想要很方便地搞到一个LearnOpenGL教程的范例工程,这是一个很好的东西。

Dependencies

OGRE dependencies的源码可从此处获得 here at
Bitbucket,下载时注意不要直接下载源码的压缩包,因为会因为遗漏SDL
2中的子库而导致对dependencies进行cmake时出现以下的错误:

  • https://forums.ogre3d.org/viewtopic.php?t=83889

解决方法是:

SDL2 is now a mercurial subrepository of the ogredeps repository.
Using a zip download may not include subrepositories, so try using a
hg clone instead.

因此需要先1.安装类似于SVN的版本控制软件Mercurial(TortoiseHg)
2.新建根目录文件夹(如deps),打开空文件夹deps,并在deps中右键》TortoiseHg》Clone,在中填入ogredeps/Source页面的网址,点击克隆

Betway官网 12

这个过程会花费一定时间,请耐心等待。
3.打开CMake,在source
code中填入deps的根目录位置(作者电脑上的是D:/deps),然后自己新建一个文件夹用于存放编译好的二进制文件。先点击Configure,本文中在配置中选择Visual
Studio 15
2017
,其他默认值。再点击两次Generate,然后打开工程,先生成‘BUILD_ALL’,再生成‘INSTALL’,最后将新生成的‘ogredeps’文件夹拷贝到OGRE工程文件夹中,用于后续对OGRE的编译。具体参考https://bitbucket.org/cabalistic/ogredeps/src中的说明。


OGRE的building

1.下载OGRE源码至D:/ogre-master
2.打开CMake。
3.”source code=D:/ogre-master”,”Where to build the
binaries=D:/ogre-master/ogredeps”。
4.点击Configure。
5.点击Generate
6.在VS中打开工程,先对整个工程生成解决方案(Debug和Release),再对
……其实官网中已经说得很清楚了,偷个懒。

相关文章