[c++] Ogre 라이브러리의 빛과 그림자 처리

Ogre는 3D 그래픽 라이브러리로, 게임 개발이나 시뮬레이션 프로그램을 작성하는 데 사용됩니다. 빛과 그림자는 3D 그래픽 효과를 개선하는 데 중요한 역할을 합니다. 이번에는 Ogre 라이브러리에서 빛과 그림자를 처리하는 방법에 대해 살펴보겠습니다.

빛 처리

Ogre에서 빛은 두 가지 요소로 구성됩니다: 빛의 종류와 빛의 위치. Ogre 라이브러리는 다양한 종류의 빛을 지원합니다. 이 중에서 주로 사용되는 종류는 포인트 라이트, 스포트 라이트, 그리고 방향성 빛입니다.

포인트 라이트

포인트 라이트는 특정 지점을 중심으로 방사형으로 빛을 방출합니다. Ogre에서는 다음과 같이 포인트 라이트를 추가할 수 있습니다.

Ogre::Light* pointLight = mSceneMgr->createLight("PointLight");
pointLight->setType(Ogre::Light::LT_POINT);
pointLight->setPosition(Ogre::Vector3(0, 150, 250));
pointLight->setDiffuseColour(1.0, 1.0, 1.0);
pointLight->setSpecularColour(1.0, 1.0, 1.0);

스포트 라이트

스포트 라이트는 특정 방향으로 빛을 조준하는 라이트입니다. Ogre에서는 다음과 같이 스포트 라이트를 추가할 수 있습니다.

Ogre::Light* spotLight = mSceneMgr->createLight("SpotLight");
spotLight->setType(Ogre::Light::LT_SPOTLIGHT);
spotLight->setPosition(Ogre::Vector3(0, 200, 0));
spotLight->setDirection(Ogre::Vector3(0, -1, 0));
spotLight->setDiffuseColour(1.0, 1.0, 1.0);
spotLight->setSpecularColour(1.0, 1.0, 1.0);
spotLight->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(60));

방향성 빛

방향성 빛은 특정 방향으로 무한히 멀리 뻗어 나가는 빛입니다. Ogre에서는 다음과 같이 방향성 빛을 추가할 수 있습니다.

Ogre::Light* directionalLight = mSceneMgr->createLight("DirectionalLight");
directionalLight->setType(Ogre::Light::LT_DIRECTIONAL);
directionalLight->setDirection(Ogre::Vector3(-1, -1, 0));
directionalLight->setDiffuseColour(Ogre::ColourValue(0.2, 0.2, 0.2));
directionalLight->setSpecularColour(Ogre::ColourValue(0.2, 0.2, 0.2));

그림자 처리

그림자는 3D 객체가 빛에 의해 다른 객체에 영향을 주는 현상을 모방한 것입니다. Ogre에서 그림자를 처리하기 위해서는 빛의 종류와 렌더링 설정을 조정해야 합니다.

그림자 설정

Ogre에서는 다음과 같이 그림자를 활성화하고 싶은 객체의 렌더링 설정을 변경하여 그림자를 추가할 수 있습니다.

Ogre::SceneManager* mSceneMgr;
mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_TEXTURE_MODULATIVE);

그림자 품질 설정

그림자의 품질은 렌더링 설정에 따라 다르게 설정할 수 있습니다.

mSceneMgr->setShadowTextureSize(1024);
mSceneMgr->setShadowTextureCount(1);

마치며

Ogre 라이브러리를 사용하여 빛과 그림자를 처리하는 방법에 대해 알아보았습니다. 적절한 빛의 종류를 선택하고 적절한 그림자 설정을 적용하여 3D 그래픽 효과를 향상시킬 수 있습니다.

참조: