在ArchLinux上编译Ogre
Dionysen

Ogre(Object-oriented Graphics Rendering Engine)是一个开源的实时图形渲染引擎,用于创建和渲染三维图形应用程序。它是基于C++编写的,并提供了丰富的功能和工具,使开发者能够构建高性能的图形应用程序。

image

  • 特点和功能:
  1. 跨平台支持:Ogre是一个跨平台的引擎,支持在多个操作系统(如Windows、Linux、macOS等)上进行开发和部署。
  2. 高性能渲染:Ogre通过使用现代图形硬件和优化算法,提供了高效的图形渲染。它支持多种渲染路径(如Direct3D和OpenGL),并针对不同平台和硬件提供了灵活的渲染配置。
  3. 强大的渲染功能:Ogre提供了广泛的渲染功能,包括高级材质系统、灯光和阴影、粒子系统、骨骼动画、精确的几何剪裁等。这些功能使开发者能够创建出逼真和令人惊叹的图形效果。
  4. 可扩展性和模块化:Ogre的设计注重可扩展性和模块化。它提供了丰富的插件系统,可以方便地添加和定制功能。开发者可以选择性地集成和使用不同的模块,以满足其特定的需求。
  5. 资源管理和场景图:Ogre提供了资源管理器,用于加载和管理图形资源(如模型、纹理、材质等)。它还包括一个场景图系统,用于组织和渲染场景中的对象。
  6. 多种编程语言支持:尽管Ogre是使用C++编写的,但它提供了多种语言的绑定和接口,包括Python、C#、Java等。这样可以方便开发者使用自己熟悉的编程语言来开发和扩展Ogre应用程序。

Ogre作为一个成熟且广泛应用的图形渲染引擎,被用于游戏开发、虚拟现实、模拟器、科学可视化等领域。它拥有一个活跃的社区,并提供了丰富的文档、示例和教程,以帮助开发者入门和使用Ogre引擎。

在ArchLinux上编译Ogre

安装依赖

By default ogre will build the recommended dependencies automatically when you run cmake configure the first time. Ogre will install the dependencies into the subfolder Dependencies in the build dir by default. You can configure it by setting OGRE_DEPENDENCIES_DIR in cmake.

文档的意思是Ogre会在配置cmake的时候自动安装依赖

拉取源码

git clone https://github.com/OGRECave/ogre.git

配置cmake

cd ogre
mkdir build
cd build
cmake ..

编译

cmake --build . --config Release

安装到系统中

想要使用它,最好将头文件和库文件放置到干净的地方。

cmake --build . --config Release --target install

你可能需要root权限才能完成这个操作。

测试

使用官方示例:

// This file is part of the OGRE project.
// It is subject to the license terms in the LICENSE file found in the top-level
// directory of this distribution and at https://www.ogre3d.org/licensing.
// SPDX-License-Identifier: MIT

#include "Ogre.h"
#include "OgreApplicationContext.h"

//! [key_handler]
class KeyHandler : public OgreBites::InputListener {
bool keyPressed(const OgreBites::KeyboardEvent &evt) override {
if (evt.keysym.sym == OgreBites::SDLK_ESCAPE) {
Ogre::Root::getSingleton().queueEndRendering();
}
return true;
}
};
//! [key_handler]

int main(int argc, char *argv[]) {
//! [constructor]
OgreBites::ApplicationContext ctx("OgreTutorialApp");
ctx.initApp();
//! [constructor]

//! [setup]
// get a pointer to the already created root
Ogre::Root *root = ctx.getRoot();
// root->createRenderWindow("w",800,600,false,0);
Ogre::SceneManager *scnMgr = root->createSceneManager();

// register our scene with the RTSS
Ogre::RTShader::ShaderGenerator *shadergen =
Ogre::RTShader::ShaderGenerator::getSingletonPtr();
shadergen->addSceneManager(scnMgr);

// without light we would just get a black screen
Ogre::Light *light = scnMgr->createLight("MainLight");
Ogre::SceneNode *lightNode =
scnMgr->getRootSceneNode()->createChildSceneNode();
lightNode->setPosition(0, 15, 25);
lightNode->attachObject(light);

// also need to tell where we are
Ogre::SceneNode *camNode =
scnMgr->getRootSceneNode()->createChildSceneNode();
camNode->setPosition(50, 50, 50);
camNode->lookAt(Ogre::Vector3(0, 0, -1), Ogre::Node::TS_PARENT);

// create the camera
Ogre::Camera *cam = scnMgr->createCamera("myCam");
cam->setNearClipDistance(5); // secific to this sample
cam->setAutoAspectRatio(true);
camNode->attachObject(cam);

// and tell it to render into the main window
ctx.getRenderWindow()->addViewport(cam);

// finally something to render
Ogre::Entity *ent = scnMgr->createEntity("ogrehead.mesh");
Ogre::SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(ent);
//! [setup]

//! [main]
// register for input events
KeyHandler keyHandler;
ctx.addInputListener(&keyHandler);

ctx.getRoot()->startRendering();
ctx.closeApp();
//! [main]
return 0;
}

CMakeLists.txt文件如下:

cmake_minimum_required (VERSION 3.10)
project(OgreTutorialsSample)

# required for Ogre 1.11+
set(CMAKE_CXX_STANDARD 11)

## [discover_ogre]
# The COMPONENTS part checks that OGRE was built the way we need it
# The CONFIG flag makes sure we get OGRE instead of OGRE-next
find_package(OGRE REQUIRED COMPONENTS Bites CONFIG)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_BUILD_TYPE debug)

# add the source files as usual
add_executable(0_Bootstrap Bootstrap.cpp)

# this also sets the includes and pulls third party dependencies
target_link_libraries(0_Bootstrap OgreBites)

文件结构:

.
├── Bootstrap.cpp
├── build
└── CMakeLists.txt

运行命令:

cd build
cmake ..; make; ./0_Bootstrap

结果:

image

显示评论