画中画?类似于CS里小地图
Ogr中的画中画效果和OGL中的做法基本一样,建立两个相互对应的视场(以摄像机为主的視景体)和视口(显示"窗口",类似于底片)的投影大小。不多说代码和截图一并奉上
PrintScreen:
Code:
在app类中重写createCamera和createViewports两个function即可
void createCamera(void)
{
//主窗口的Camera
mCamera=mSceneMgr->createCamera("PlayerCam");
mCamera->setPosition(Vector3(0,0,500));//视点
//A vector specifying the look at point,这里vector是点坐标,注意与SceneNode::lookat和OGL中的lookat区别与联系
mCamera->lookAt(Vector3(0,0,-300));
mCamera->setNearClipDistance(5);//近截距
//用于画中画的Camera
mCamera1=mSceneMgr->createCamera("PlayerCam_1");
mCamera1->setPosition(Vector3(0,0,600));
mCamera1->lookAt(Vector3(0,0,-300));
mCamera1->setNearClipDistance(5);
}
void createViewports(void)
{
// Create one viewport, entire window
Viewport* vp = mWindow->addViewport(mCamera);
//Viewport* vp =new Viewport(mCamera,mWindow,0.0,0.0,1.0,1.0,0);//为什么不能new一个视口
vp->setBackgroundColour(ColourValue(0,0,0));
// Alter the camera aspect ratio to match the viewport
mCamera->setAspectRatio(
Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
//画中画
//这里的参数设置很重要,第二个参数是设置窗口的层叠顺序,最后两个参数影响视口的大小,也就是荧幕("底片")的长宽
Viewport* vp1=mWindow->addViewport(mCamera1,1,0.6,0.05,0.4,0.4);
vp1->setBackgroundColour(ColourValue(0,0,0));
mCamera1->setAspectRatio(
Real(vp1->getActualWidth())/Real(vp->getActualHeight()));//摄像机镜头的长宽比,影响视场的截面,不影响视口
vp1->setOverlaysEnabled(0);//小窗口无Overly,隐藏表层的方法有多种,归根结底Overly::show()和Overlyhide();可以自己写
}
private:
SceneNode* mRootSceneNode;
SceneNode* mHeadNode;
SceneNode* mRollHeadNode;
SceneNode* mRollLeftNode;
SceneNode* mRollRightNode;
Animation* mHeadAnimation;
AnimationState* mHeadAnistate;
AnimationState* mHeadAnistate1;
//SceneNode* mNode;
AnimationState* bbsp_anistate;
AnimationState* stateTrail;
/**//******************************************/
SceneNode* Node_chain;
Camera* mCamera1;//画中画
/**//******************************************/
posted on 2009-06-06 19:52
闫军yy 阅读(354)
评论(0) 编辑 收藏 引用 所属分类:
OGRE