mcamera = mscenemgr->createcamera("playercam");
同樣你也可以通過名稱獲取攝像機的指標,通過呼叫getcamera()函式
下面**我們移動攝像機的位置並且規定攝像機往**看。
mcamera->setposition(ogre::vector3(0, 300, 500));
mcamera->lookat(ogre::vector3(0, 0, 0));
攝像機會根據你設定的向量來旋轉攝像頭。
下面我們設定攝像機的近裁剪距離,如果模型的麵比這個距離更近我們就會進入模型的內部。
mcamera->setnearclipdistance(5);
同樣也有乙個函式可以讓你設定攝像機的遠裁剪面,但是在這個例子中不需要。
我們通過ogrebites建立乙個攝像機的管理器
mcameraman =
new ogrebites::sdkcameraman(mcamera);
這是動態分配的記憶體不要忘記釋放他
ogre::viewport
* vp = mwindow->addviewport(mcamera);
建立完視口我們要通過viewport來設定背景顏色。
然後我們要做的事是確定相機的橫縱比。即使我們使用了預設的橫縱比但是還是示範一下函式的使用。我們通過攝像機類的函式來設定橫縱比
vp->setbackgroundcolour(ogre::colourvalue(0, 0, 0));
mcamera->setaspectratio(ogre::real(vp->getactualwidth())/ogre::real(vp->getactualheight()));
ogre::entity* ninjaentity = mscenemgr->createentity("ninja.mesh");
ninjaentity->setcastshadows(true);
mscenemgr->getrootscenenode()->createchildscenenode()->attachobject(ninjaentity);
下面我們要建立乙個平面,我們需要通過meshmanager來從頭建立乙個mesh,我們將用它生成乙個紋理面來當地面。
我們首先要做的是建立乙個抽象的平面物體。
ogre
::plane
plane(ogre
::vector3
::unit_y, 0);
我們指定了它的法向量就是y軸
接下來我們要用meshmanager創造我們的平面網格,我們可以通過上面的物件建立乙個平面網格。
ogre::meshmanager
::getsingleton().createplane(
"ground",
ogre::resourcegroupmanager
::default_resource_group_name,
plane,
1500, 1500, 20, 20,
true,
1, 5, 5,
ogre::vector3
::unit_z);
引數有點多,我們先簡單理解成我們建立了乙個名字叫ground的新mesh
接下來我們建立乙個entity,用這個新的mesh-「ground」
ogre::entity* groundentity = mscenemgr->createentity("ground");
mscenemgr->getrootscenenode()->createchildscenenode()->attachobject(groundentity);
注意這裡我們不是在建立entity的時候傳入乙個名稱,而是乙個mesh的名字。
我們要把這個地面的陰影關閉,因為開啟它是一種浪費,但是關閉它,我們的物體仍然可以將陰影投射在它上面
groundentity->setcastshadows(false);
我們可以給地面設定乙個材質,最簡單的方法是設定乙個系統自帶的材質。
groundentity->setmaterialname("examples/rockwall");
mscenemgr->setambientlight(ogre::colourvalue(0, 0, 0));
mscenemgr->setshadowtechnique(ogre::shadowtype_stencil_additive);
ogre::light
* spotlight = mscenemgr->createlight("spotlight");
spotlight->setdiffusecolour(0, 0, 1.0);
spotlight->setspecularcolour(0, 0, 1.0);
spotlight->settype(ogre::light
::lt_spotlight);
spotlight->setdirection(-
1, -
1, 0);
spotlight->setposition(ogre::vector3(200, 200, 0));
spotlight->setspotlightrange(ogre::degree(35), ogre::degree(50));
ogre::light
* directionallight = mscenemgr->createlight("directionallight");
directionallight->settype(ogre::light
::lt_directional);
設定鏡面反射和漫反射顏色
directionallight->setdiffusecolour(ogre::colourvalue(.4, 0, 0));
directionallight->setspecularcolour(ogre::colourvalue(.4, 0, 0));
因為是方向光所以不具有位置,所以我們只需要設定乙個方向即可。
directionallight->setdirection(ogre::vector3(0, -1, 1));
ligth類還有乙個方法可以設定光線的衰減setattenuation
我們還有一種光源型別沒有學習那就是點光源,最後我們要把點光源新增到場景中
ogre::light
* pointlight = mscenemgr->createlight("pointlight");
pointlight->settype(ogre::light
::lt_point);
pointlight->setdiffusecolour(.3, .3, .3);
pointlight->setspecularcolour(.3, .3, .3);
點光源因為只有乙個位置所以我們不需要設定方向
pointlight->setposition(ogre::vector3(0, 150, 250));
關於陰影還有很多的知識這只是最基本的。 Ogre攝像機Camera類
對攝象機的抽象。成員函式說明如下 標準建構函式 camera string name,scenemanager sm 標準析構函式 virtual camera 返回渲染該攝像機的 scenemanager 的指標scenemanager getscenemanager void const 取得攝...
2D攝像機的設計
攝像機跟隨移動有多種方式,為了使攝像機更平滑的移動,這裡使用插值運算,很多人說使用它總會卡頓,只是因為同步更新問題,將移動方式放於lateupdate 中便可,在地圖允許的情況下,直接使用座標插值即可。插值運算移動 transform.position vector3.lerp vector3 or...
cocoa2d x 移動攝像機
cocoa2d x camera類中 seteyexyz 0,0,0.1 setcenterxyz 0,0,0 setupxyz 0,1,0 對應glulookat eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz 要移動相機,並不會發生錯亂 需要...