2014年5月22日木曜日

OgreのBasic Tutorial 1をやってみた

せっかくOgre(読み方はオーガで鬼という意味。個人的にはオグレって読んでるけど...)をインストールしたので、ちょっとここのチュートリアルをやってみた。 その前に、全体像をここで勉強。

オブジェクト指向を名前に冠してるだけあって、シングルトンパターンやファクトリメソッドパターン等が目に付く。

生成メソッドが、create〜()だったり、newを使ったり、そして破棄メソッドが、remove〜()だったり、destroy〜()だったり、deleteを使ったりってのが若干気にかかる。

あと、ところどころで登場する、“aaa:Bbb:0”という形式の謎の文字列

まぁ、そのうち分かるかな...とりあえず下の図を意識しとくといいかも。

で、

チュートリアル

Basic Tutorial 1 は、昨日のデモとたいして変わらない。

TutorialApplication::createScene()で、表示する内容を構築している。


void createScene(void)
{
// Set the scene's ambient light
mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5f, 0.5f, 0.5f));

// Create an Entity
Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh");

// Create a SceneNode and attach the Entity to it
Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("HeadNode");
headNode->attachObject(ogreHead);

// Create a Light and set its position
Ogre::Light* light = mSceneMgr->createLight("MainLight");
light->setPosition(20.0f, 80.0f, 50.0f);
}

シーンに環境光(AmbientLight)を配置し、鬼の頭を追加(鬼の頭のメッシュをもったエンティティをノードに割り当て、そのノードをシーンに追加?)し、光源(環境光とは別の指向性をもった光)を配置している。 昨日のテンプレートから作成したプロジェクトでは、setupDemoScene()の中でシーンを構築してるので、既存のコードをコメントアウトして、上のコードを入れてみた。


void DemoApp::setupDemoScene()
{
/*
OgreFramework::getSingletonPtr()->m_pSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");

OgreFramework::getSingletonPtr()->m_pSceneMgr->createLight("Light")->setPosition(75,75,75);

m_pOgreHeadEntity = OgreFramework::getSingletonPtr()->m_pSceneMgr->createEntity("OgreHeadEntity", "ogrehead.mesh");
m_pOgreHeadNode = OgreFramework::getSingletonPtr()->m_pSceneMgr->getRootSceneNode()->createChildSceneNode("OgreHeadNode");
m_pOgreHeadNode->attachObject(m_pOgreHeadEntity);
*/
Ogre::SceneManager *sceneMgr = OgreFramework::getSingletonPtr()->m_pSceneMgr;
// Set the scene's ambient light
sceneMgr->setAmbientLight(Ogre::ColourValue(0.5f, 0.5f, 0.5f));
// Create an Entity
Ogre::Entity* ogreHead = sceneMgr->createEntity("Head", "ogrehead.mesh");
// Create a SceneNode and attach the Entity to it
Ogre::SceneNode* headNode = sceneMgr->getRootSceneNode()->createChildSceneNode("HeadNode");
headNode->attachObject(ogreHead);
// Create a Light and set its position
Ogre::Light* light = sceneMgr->createLight("MainLight");
light->setPosition(20.0f, 80.0f, 50.0f);
}

createEntity()に渡されている、"ogrehead.mesh"は、ここにある。

Ogremesh

中身はバイナリ。多分モデリングデータ。

で、実行すると...

Ogre port

背景が昨日と違ってベージュ色になってるのは、


OgreFramework::getSingletonPtr()->m_pSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");

の部分をコメントアウトしたから。

SpaceSkyBoxって名前から察するに、宇宙空間のキューブマップの指定っぽい。

この"Examples/SpaceSkyBox"っていうのは、media/materials/scripts/Examples.mateial の中に記述があって、そこに書かれてるstevecube.jpgという画像ファイルは、media/packs/skybox.zipに固められている。

Scripts

Skybox

描画方法をスクリプトファイルに外出しで定義しておいて、プログラム側から呼び出して利用する感じ?

ちなみに、iPhoneを横向きにするとこうなる。

Ogre land

でろ〜ん

まぁ愛嬌。これは昨日のデモでも同じ。

シーンの作成部分に限って言えば結構素直というか面白いかも、オグレ

0 件のコメント:

コメントを投稿