zoukankan      html  css  js  c++  java
  • Ogre 20111205

    ogre实现分屏渲染

     1 class MyApplication :public ExampleApplication
    2 {
    3 public:
    4 MyApplication() {}
    5 ~MyApplication()
    6 {
    7 }
    8
    9 void createCamera()
    10 {
    11 mCamera = mSceneMgr->createCamera("mycamera1");
    12 mCamera->setPosition(Ogre::Vector3(0, 10, 20));
    13 mCamera->lookAt(0, 0, 0);
    14 mCamera->setNearClipDistance(5);
    15
    16 camera2_ = mSceneMgr->createCamera("mycamera2");
    17 camera2_->setPosition(Ogre::Vector3(20, 10, 0));
    18 camera2_->lookAt(0, 0, 0);
    19 camera2_->setNearClipDistance(5);
    20 }
    21
    22 void createViewports()
    23 {
    24 Ogre::Viewport* vp = mWindow->addViewport(mCamera, 0, 0.0, 0.0, 0.5, 1.0);
    25 vp->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0));
    26
    27 Ogre::Viewport* vp2 = mWindow->addViewport(camera2_, 1, 0.5, 0.0, 0.5, 1.0);
    28 vp2->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0));
    29
    30 mCamera->setAutoAspectRatio(Real(vp->getActualWidth() / vp->getActualHeight()));
    31 camera2_->setAutoAspectRatio(Real(vp2->getActualWidth() / vp2->getActualHeight()));
    32 }
    33
    34 void createScene()
    35 {
    36 Ogre::Entity* ent = mSceneMgr->createEntity("entity1", "Sinbad.mesh");
    37 Ogre::SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode("node1");
    38 node->attachObject(ent);
    39 }
    40
    41 private:
    42 Ogre::Camera* camera2_;
    43 };

    合成器+分屏的example

    将屏幕分成四个viewport,对其中三个viewport添加合成器,并对每个合成器添加监听器,在合成器的监听器里面改变

    fragment_program shader脚本的参数实现改变渲染效果。

      1 class CompositorListener1 : public Ogre::CompositorInstance::Listener
    2 {
    3 public:
    4 void notifyMaterialSetup(uint32 pass_id, MaterialPtr& mat)
    5 {
    6 mat->getBestTechnique()->getPass(pass_id)->getFragmentProgramParameters()
    7 ->setNamedConstant("factors", Ogre::Vector3(1, 0, 0));
    8 }
    9 };
    10
    11 class CompositorListener2 : public Ogre::CompositorInstance::Listener
    12 {
    13 public:
    14 void notifyMaterialSetup(uint32 pass_id, MaterialPtr& mat)
    15 {
    16 mat->getBestTechnique()->getPass(pass_id)->getFragmentProgramParameters()
    17 ->setNamedConstant("factors", Ogre::Vector3(0, 1, 0));
    18 }
    19 };
    20
    21 class CompositorListener3 : public Ogre::CompositorInstance::Listener
    22 {
    23 public:
    24 void notifyMaterialSetup(uint32 pass_id, MaterialPtr& mat)
    25 {
    26 mat->getBestTechnique()->getPass(pass_id)->getFragmentProgramParameters()
    27 ->setNamedConstant("factors", Ogre::Vector3(0, 0, 1));
    28 }
    29 };
    30
    31
    32 class MyApplication :public ExampleApplication
    33 {
    34 public:
    35 MyApplication()
    36 {
    37 compListener1_ = 0;
    38 compListener2_ = 0;
    39 compListener3_ = 0;
    40 }
    41
    42 ~MyApplication()
    43 {
    44 if (compListener1_)
    45 delete compListener1_;
    46 if (compListener2_)
    47 delete compListener2_;
    48 if (compListener2_)
    49 delete compListener3_;
    50 }
    51
    52 void createCamera()
    53 {
    54 mCamera = mSceneMgr->createCamera("mycamera1");
    55 mCamera->setPosition(Ogre::Vector3(0, 10, 20));
    56 mCamera->lookAt(0, 0, 0);
    57 mCamera->setNearClipDistance(5);
    58 }
    59
    60 // 创建四个视口
    61 void createViewports()
    62 {
    63 vp1_ = mWindow->addViewport(mCamera, 0, 0.0, 0.0, 0.5, 0.5);
    64 vp1_->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0));
    65
    66 vp2_ = mWindow->addViewport(mCamera, 1, 0.5, 0.0, 0.5, 0.5);
    67 vp2_->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0));
    68
    69 vp3_ = mWindow->addViewport(mCamera, 2, 0.0, 0.5, 0.5, 0.5);
    70 vp3_->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0));
    71
    72 vp4_ = mWindow->addViewport(mCamera, 3, 0.5, 0.5, 0.5, 0.5);
    73 vp4_->setBackgroundColour(Ogre::ColourValue(0.0, 0.0, 0.0));
    74
    75 mCamera->setAutoAspectRatio(Real(vp1_->getActualWidth()) / Real(vp1_->getActualHeight()));
    76 }
    77
    78 void createScene()
    79 {
    80 Ogre::Entity* ent = mSceneMgr->createEntity("entity1", "Sinbad.mesh");
    81 Ogre::SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode("node1");
    82 node->attachObject(ent);
    83
    84 // 为视口vp1_添加合成器:"compositor1",为合成器添加监听器compListener1_
    85 Ogre::CompositorManager::getSingleton().addCompositor(vp1_, "compositor1");
    86 Ogre::CompositorManager::getSingleton().setCompositorEnabled(vp1_, "compositor1", true);
    87 Ogre::CompositorInstance* comp1 = Ogre::CompositorManager::getSingleton().getCompositorChain(vp1_)->getCompositor("compositor1");
    88 compListener1_ = new CompositorListener1;
    89 comp1->addListener(compListener1_);
    90
    91 // 为视口vp2_添加合成器:"compositor1",为合成器添加监听器compListener3_
    92 Ogre::CompositorManager::getSingleton().addCompositor(vp2_, "compositor1");
    93 Ogre::CompositorManager::getSingleton().setCompositorEnabled(vp2_, "compositor1", true);
    94 Ogre::CompositorInstance* comp2 = Ogre::CompositorManager::getSingleton().getCompositorChain(vp2_)->getCompositor("compositor1");
    95 compListener2_ = new CompositorListener2;
    96 comp2->addListener(compListener2_);
    97
    98 // 为视口vp3_添加合成器:"compositor1",为合成器添加监听器compListener3_
    99 Ogre::CompositorManager::getSingleton().addCompositor(vp3_, "compositor1");
    100 Ogre::CompositorManager::getSingleton().setCompositorEnabled(vp3_, "compositor1", true);
    101 Ogre::CompositorInstance* comp3 = Ogre::CompositorManager::getSingleton().getCompositorChain(vp3_)->getCompositor("compositor1");
    102 compListener3_ = new CompositorListener3;
    103 comp3->addListener(compListener3_);
    104 }
    105
    106 private:
    107 // Red视口
    108 Ogre::Viewport* vp1_;
    109 // Green视口
    110 Ogre::Viewport* vp2_;
    111 // Blue视口
    112 Ogre::Viewport* vp3_;
    113 // 默认视口
    114 Ogre::Viewport* vp4_;
    115
    116 CompositorListener1* compListener1_;
    117 CompositorListener2* compListener2_;
    118 CompositorListener3* compListener3_;
    119 };
    120
    121
    122 int main()
    123 {
    124 MyApplication app;
    125 app.go();
    126 return 0;
    127 }




  • 相关阅读:
    zabbix_agent 主动模式配置
    zabbix 监控ipmi
    超级详细全截图化VMware 安装ubantu
    docker 部署
    C# DataTable和List转换操作类
    C#类型转换工具类
    C# 注册windows 服务
    C# wsdl.exe 生成类文件
    visual studio code download url
    c# xml序列化和反序列化
  • 原文地址:https://www.cnblogs.com/kex1n/p/2276768.html
Copyright © 2011-2022 走看看