More Related Content
Similar to Ogre3d 基礎 (20)
Ogre3d 基礎
- 2. Ogre3Dとは
Entity
SceneNode
SceneManager
Viewport
シーンの完全なクリア、解放
ジオメトリ
2Dイメージの表示
日本語フォント表示
- 8. Entity
シーン内に存在する移動可能な //Entity作成
Ogre::Entity* ent = NULL;
オブジェクト(麻雀牌、点棒)
Entityにメッシュとマテリアル ent = mSceneMgr->createEntity(
を割当てる "msh:PaiBody:0"
Entityインスタンスを通して );
ent->setMaterialName(
Entityを複製可能
"mtr:Pai:1"
);
ent->setCastShadows( true );
- 9. Entity
解放 // Entity解放
mSceneMgr->destroyEntity(
"msh:PaiBody:0"
);
// SceneNode, Entitie,
// Lightなど解放
mSceneMgr->clearScene();
- 11. SceneNode
SceneNodeはシーングラフ階 //SceneNode作成
Ogre::SceneNode* node = NULL;
層のノード
作成したノードにEntityやカメ node = mSceneMgr->
ラといった要素を登録すること getRootSceneNode()->
でシーンを構築 createChildSceneNode(
“node:1”
);
node->attachObject( ent );
- 12. SceneNode
解放 // SceneNode解放
mSceneMgr->getRootSceneNode()->
removeAndDestroyChild(
“node:1”
);
// SceneNode, Entitie,
// Lightなど解放
mSceneMgr->clearScene();
- 13. SceneNode操作
SceneNodeを介して 移動/拡 //SceneNodeにEntityを登録
大/回転などをおこなう node->attachObject( ent );
一つの子ノードに複数のEntity
を登録可能。同一ノードに属す // グローバル移動
るオブジェクトに同一操作が適 node->setPosition(RX, RY, RZ);
用できる。 // スケール
node->setScale(1.00, 1.00, 1.00);
// 回転
node->yaw(
Ogre::Radian(1.57),
Ogre::Node::TS_WORLD
);
- 14. オーバーレイ用SceneNode
Overlay用の3D空間は別 //SceneNodeを作成
ルートノードを自前で作成 Ogre::SceneNode* node_ov =
new Ogre::SceneNode(
mSceneMgr, name
);
// SceneNodeを解放
delete node_ov;
node_ov = NULL;
- 16. SceneManager
シーングラフを管理 //SceneManager作成
mSceneMgr =
レンダリング方式の選定※1
gm->GM_getOgreRoot()->
SceneManagerインスタンス createSceneManager(
を作成するとルートノードがひ Ogre::ST_GENERIC
とつ作られる );
ルートノードを基点に、各種オ
ブジェクト(Entity、カメラ、
パーティクル、Skyboxなど)
を登録
※1 Octree、BSP、Portal、Pagingなど
- 17. SceneManager
Node MainCamera
麻雀ゲームの例 Node SubCamera
SceneManager
Node Light
Node Shadow
RootNode
Node 麻雀牌
Node 卓
Node 点棒
RootNode Node 前面の牌
Node パネル
Overlay用 Node 文字
Node スコア
- 18. SceneManager
解放 // SceneManager解放
Ogre::SceneManager* scene = NULL
scene = Client->getSceneMgr();
if( scene ){
// SceneManager解放
gm->GM_getOgreRoot()->
destroySceneManager(scene);
}
- 21. Viewport
レンダーターゲット上の描画領 // Viewport作成
unsigned short zorder = 100;
域とカメラを結びつける
Direct3D9/OpenGLの Ogre::Viewport* vp =
Viewportと同じ gm->GM_getOgreWindow()->
カメラ毎にViewportは1個ま addViewport (
mCamera,
で割当て
zorder,
レンダーターゲット毎に複数の
0.0f, 0.0f, //left, top
Viewportを追加できる 1.0f, 1.0f //width, height
);
- 23. Viewport
解放 // Viewport解放
Ogre::RenderWindow* window =
gm->GM_getOgreWindow();
if( window ){
window->removeViewport(
zorder
);
}
- 24. Viewport
Viewport毎にオーバーレイの // Viewportを隠す
Ogre::Viewport* vp =
表示/非表示の切替可能
camera->getViewport();
Viewportを最小化して隠すテ
クニック(Viewportの再作成が if( vp ){
面倒な場合) //幅を0に
vp->setDimensions(
0.0f, 0.0f, 0.0f, 0.0f
);
//フレーム更新をおこなわない
vp->setAutoUpdated( false );
}
- 27. 例
// 1) Mesh // 4) OverlayElement
Ogre::MeshManager::getSingleton(). Ogre::MaterialManager::getSingleton().
remove( "msh:Floor:0" ); remove( "p:ScoreBoard:0" );
// 2) Material
Ogre::MaterialManager::getSingleton(). Ogre::OverlayManager::getSingleton().
remove( "mtr:Floor:0" ); destroyOverlayElement(
// 3) Texture "p:ScoreBoard:0"
Ogre::TextureManager::getSingleton(). );
remove( "RTT_Texture" );
// 5) Overlay
Ogre::OverlayManager::getSingleton().
destroy( "OnSceneOverlay" );
- 28. 例
// 6) Compositor // 7) CompositorChain
Ogre::Viewport* vp = Ogre::Viewport* vp =
camera->getViewport(); camera->getViewport();
if( vp ) if( vp )
{ {
Ogre::CompositorManager:: Ogre::CompositorManager::
getSingleton(). getSingleton().
removeCompositor( vp, removeCompositorChain( vp );
"Bloom" }
);
}
- 29. 例
// 8) Viewport // 9) Camera
Ogre::RenderWindow* window = mSceneMgr->destroyAllCameras();
gm->GM_getOgreWindow();
if( window ){
window->removeAllViewports();
}
- 30. 例
// 10) SceneNode, Entitie, Lightなど // 11) SceneManager
mSceneMgr->clearScene(); gm->GM_getOgreRoot()->
destroySceneManager(
mSceneMgr
);
- 33. プリミティブ・ジオメトリ
Rectangle2D //Rectangle2D作成
シンプルな平面型の四角形※例 rect =
new Ogre::Rectangle2D( true );
WireBoundingBox
ワイヤーフレーム型のボックス Ogre::SceneNode*node =
mSceneMgr->
getRootSceneNode()->
createChildSceneNode(
"node:2"
);
node->attachObject( rect );
rect->setMaterial( "mtr:Floor:0" );
- 34. プリミティブ・ジオメトリ
Rectangle2D解放 //Rectangle2D解放
delete rect;
Rectangle2Dインスタンスを先
に解放。関連するマテリアルや Ogre::MaterialManager::
テクスチャはその後削除 getSingleton().
remove( "mtr:Floor:0" );
- 36. カスタム・ジオメトリ
//ManualObject作成 mo->triangle(0,2,1);
Ogre::ManualObject* mo = NULL; mo->triangle(2,0,3);
mo = mSceneMgr-> mo->end();
createManualObject(“NakiMark”);
//ManualObjectをメッシュ化
mo->position(cmW,cpH,0); mo->convertToMesh(
mo->textureCoord( 0,0f, 1.0f ); “msh:NakiMark:0”
mo->position(cpW,cpH,0); );
mo->textureCoord( 1.0f, 1.0f ); //Entity作成
mo->position(cpW,cmH,0); Ogre::Entity* ent = mSceneMgr->
mo->textureCoord( 1.0f, 0.0f ); createEntity("msh:NakiMark:0");
mo->position(cmW,cmH,0);
mo->textureCoord( 0.0f, 0.0f ); //この後 nodeにattachして表示
- 38. プリミティブ・メッシュ
CreatePlane //CreatePlane作成
シンプルな平面※コード例 Ogre::MeshManager::
getSingleton().createPlane(
CreateCurvedIllusionPlane "msh:Floor:0",
平面上に曲率を再現 Ogre::ResourceGroupManager::
CreateCurvedPlane DEFAULT_RESOURCE_GROUP_NAME,
CreateBezierPatch *plane, //MovablePlane
ベジェ曲面 50, 50,
1, 1,
true,
1,
1.0f, 1.0f,
Ogre::Vector3::UNIT_Z
);
- 41. A)Overlay APIを使う
表示/非表示の切替が可能 3Dオーバーレイではマウスカー
Overlay::rotateで回 ソル位置を拾えない(Rayを使
転、Overlay::setScaleで拡縮 用できない)
ダイナミック・テクスチャによ Entity::getWorldBoundingB
り各種ブレンディング処理が可 oxもしくは、スクリーン座標か
能 らマウスカーソルを判定
- 46. Overlayの使用方法
//Overlay作成 //PanelOverlayElement作成
Ogre::Overlay* ov = Ogre::OverlayContainer*oct =
Ogre::OverlayManager:: cm->CM_createPanelOverlayElement
getSingleton(). (
create( "OnSceneOverlay" ); "p:MesgPanel:0",
"function_panel.png",
ov->setZOrder( 1 ); //650が最前面 0, 0, 70, 26,
ov->show(); 1.0f
);
//Overlayに登録
ov->add2D( oct );
- 47. Overlayの使用方法
//PanelOverlayElement取得 //表示位置
Ogre::PanelOverlayElement* e = int vpW = 800; //スクリーン幅
static_cast int vpH = 600;
<Ogre::PanelOverlayElement *>
(Ogre::OverlayManager:: e->setPosition(400/vpW, 200/vpH);
getSingleton(). e->show();
getOverlayElement(
“p:MesgPanel:0” //画面表示完了
)
);
- 49. 日本語フォント表示
fontdefファイルに設定を記 MyFont
{
述する type truetype
typeセクションにtruetype source meiryo.ttc
を指定した場合、sourceに size 32
resolution 96
フォントデータを指定 code_points 33-166
typeセクションにimageを 12272-12543
指定した場合、sourceに画 23383-23383
28450-28450
像ファイルを指定 }
- 50. 日本語フォント表示
fontdefファイルの MyFont
{
code_pointセクションに type truetype
コードポイント(符号点)を記 source meiryo.ttc
述 size 32
resolution 96
code_pointセクションには code_points 33-166
Unicodeを指定 12272-12543
23383-23383
28450-28450
}
- 51. Overlayにテキストを表示
//Overlay作成 //PanelOverlayElement作成
Ogre::Overlay* ov = Ogre::OverlayContainer*oct =
Ogre::OverlayManager:: cm->CM_createTextOverlayElement
getSingleton(). (
create( "OnSceneOverlay" ); "t:DEBUG:0",
TEXT("デバッグモードです。"),
ov->setZOrder( 1 ); //650が最前面 MIDDLE_FONT, //サイズ
ov->show(); COLOR_WHITE //色
);
//Overlayに登録
ov->add2D( oct );
- 52. Overlayにテキストを表示
//PanelOverlayElement取得 //表示位置
Ogre::PanelOverlayElement* e = int vpW = 800; //スクリーン幅
static_cast int vpH = 600;
<Ogre::PanelOverlayElement *>
(Ogre::OverlayManager:: e->setPosition(100/vpW, 100/vpH);
getSingleton(). e->show();
getOverlayElement(
”t:DEBUG:0” //画面表示完了
)
);
- 53. その他
必要なcode pointのみを指 Ogreでの日本語表示につい
定する。多くを指定するとテ ては下記URLを参考にさせて
クスチャが消費 いただきました。
フォントのライセンス < CreoSproutソフトウェア研
再配布可能な日本語フォント 究部 >
http://ahirujigen.blog97.fc2.
その他、改変/商用可否など com/blog-entry-279.html