[c++] Ogre 라이브러리의 렌더링과 포스트 프로세싱

Ogre는 실시간 3D 그래픽 애플리케이션을 개발하는 데 사용되는 오픈 소스 3D 그래픽 라이브러리입니다.

렌더링

Ogre는 렌더링 과정을 쉽게 구현할 수 있도록 다양한 기능을 제공합니다. 일반적으로 다음 단계를 포함합니다.

  1. 초기화: Ogre 라이브러리를 초기화하여 렌더링 시스템을 설정합니다.
  2. 씬 설정: 3D 모델, 라이트, 카메라 등을 씬에 추가하여 공간을 구성합니다.
  3. 렌더링 루프: 각 프레임에서 모든 객체를 렌더링하고 화면에 표시합니다.

다음은 Ogre의 간단한 초기화 및 씬 설정 예시입니다.

#include <Ogre.h>

int main() {
    Ogre::Root* root = new Ogre::Root("");
    root->showConfigDialog();

    Ogre::RenderWindow* window = root->initialise(true, "Ogre Rendering Window");

    // 씬 매니저 및 라이트 생성
    Ogre::SceneManager* sceneMgr = root->createSceneManager(Ogre::ST_GENERIC);
    Ogre::Light* light = sceneMgr->createLight("MainLight");
    light->setPosition(20, 80, 50);

    // 카메라 생성
    Ogre::Camera* camera = sceneMgr->createCamera("MainCamera");
    camera->setPosition(0, 0, 500);
    camera->lookAt(0, 0, 0);

    // 뷰포트 생성
    Ogre::Viewport* viewport = window->addViewport(camera);
    viewport->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0));

    root->startRendering();
    return 0;
}

포스트 프로세싱

Ogre는 렌더링 된 이미지에 포스트 프로세싱 효과를 추가하는 기능을 제공합니다. 이를 통해 게임이나 시뮬레이션에서 시각적으로 흥미로운 결과물을 만들 수 있습니다. 예를 들어, 블러 효과, 반사, 그림자 등을 추가할 수 있습니다.

다음은 Ogre에서 포스트 프로세싱을 사용하여 이미지에 블러 효과를 적용하는 예시입니다.

#include <Ogre.h>

class MyCompositorListener : public Ogre::CompositorInstance::Listener {
public:
    void notifyMaterialSetup(Ogre::uint32 pass_id, Ogre::MaterialPtr &mat) override {
        mat->getBestTechnique()->getPass(0)->getFragmentProgramParameters()->setNamedConstant("blurWeight", 0.001);
    }
};

int main() {
    // ... 기본 렌더링 설정

    // 포스트 프로세싱 설정
    Ogre::CompositorInstance* comp = Ogre::CompositorManager::getSingleton().addCompositor(viewport, "Gaussian Blur");
    comp->addListener(new MyCompositorListener());

    root->startRendering();
    return 0;
}

Ogre의 포스트 프로세싱은 매우 유연하며 사용자 지정 효과를 만들거나 사전에 정의된 효과를 쉽게 추가할 수 있습니다.

참고 자료