[c++] Ogre 라이브러리의 렌더링과 포스트 프로세싱
Ogre는 실시간 3D 그래픽 애플리케이션을 개발하는 데 사용되는 오픈 소스 3D 그래픽 라이브러리입니다.
렌더링
Ogre는 렌더링 과정을 쉽게 구현할 수 있도록 다양한 기능을 제공합니다. 일반적으로 다음 단계를 포함합니다.
- 초기화: Ogre 라이브러리를 초기화하여 렌더링 시스템을 설정합니다.
- 씬 설정: 3D 모델, 라이트, 카메라 등을 씬에 추가하여 공간을 구성합니다.
- 렌더링 루프: 각 프레임에서 모든 객체를 렌더링하고 화면에 표시합니다.
다음은 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의 포스트 프로세싱은 매우 유연하며 사용자 지정 효과를 만들거나 사전에 정의된 효과를 쉽게 추가할 수 있습니다.
참고 자료
- Ogre 공식 홈페이지: Ogre3D.org
- Ogre GitHub 저장소: Ogre3D/Ogre