posts - 28,  comments - 15,  trackbacks - 0
画中画?类似于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

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理