zoukankan      html  css  js  c++  java
  • Ogre手动绘制立方体以及添加材质

    转载,嗯,原始不知道是谁了,不管了,我看的也是转的。

    1.用Ogre来绘制一个立方体

    ManualObject* cube;
    cube = mSceneMgr->createManualObject("cube");
    
    cube->begin("cubeMaterial");
       // 顶点
       cube->position( -100, -100, -100);   //0
       cube->colour(0.0, 0.0, 0.0);
       cube->position( 100, -100, -100);    //1
       cube->colour(1.0, 0.0, 0.0);
       cube->position( 100, -100, 100);    //2
       cube->colour(1.0, 0.0, 1.0);
       cube->position( -100, -100, 100);    //3
       cube->colour(0.0, 0.0, 1.0);
       cube->position( -100, 100, -100);    //4
       cube->colour(0.0, 1.0, 0.0);
       cube->position( 100, 100, -100);    //5
       cube->colour(1.0, 1.0, 0.0);
       cube->position( 100, 100, 100);    //6
       cube->colour(1.0, 1.0, 1.0);
       cube->position( -100, 100, 100);    //7
       cube->colour(0.0, 1.0, 1.0);
    
       //// 索引
       cube->triangle(0, 2, 1);
       cube->triangle(0, 2, 3);
       cube->triangle(3, 4, 0);
       cube->triangle(3, 7, 4);
       cube->triangle(4, 7, 6);
       cube->triangle(4, 6, 5);
       cube->triangle(5, 2, 1);
       cube->triangle(5, 6, 2);
       cube->triangle(0, 4, 1);
       cube->triangle(5, 1, 4);
       cube->triangle(3, 6, 7);
       cube->triangle(3, 2, 6);
    cube->end();
    
    SceneNode* sn = mSceneMgr->getRootSceneNode()->createChildSceneNode();
    sn->attachObject(cube);
    

    2.在上个立方体的基础上加上6个贴图

    // 创建六个纹理
    MaterialPtr material = MaterialManager::getSingletonPtr()->create("q", "General");
    material->getTechnique(0)->getPass(0)->createTextureUnitState("q.jpg");
    material = MaterialManager::getSingletonPtr()->create("a", "General");
    material->getTechnique(0)->getPass(0)->createTextureUnitState("a.jpg");
    material = MaterialManager::getSingletonPtr()->create("z", "General");
    material->getTechnique(0)->getPass(0)->createTextureUnitState("z.jpg");
    material = MaterialManager::getSingletonPtr()->create("x", "General");
    material->getTechnique(0)->getPass(0)->createTextureUnitState("x.jpg");
    material = MaterialManager::getSingletonPtr()->create("s", "General");
    material->getTechnique(0)->getPass(0)->createTextureUnitState("s.jpg");
    material = MaterialManager::getSingletonPtr()->create("w", "General");
    material->getTechnique(0)->getPass(0)->createTextureUnitState("w.jpg");
    ManualObject* cube;
    cube = mSceneMgr->createManualObject("cube");

    3 给每个面贴纹理 

    /// 下面, begin的第一个参数为要设置的材质名称
    cube->begin("q", RenderOperation::OT_TRIANGLE_FAN);
      cube->position( -100, -100, -100);   //0
      cube->textureCoord(1, 0);
      cube->position( 100, -100, -100);    //1
      cube->textureCoord(0, 0);
      cube->position( 100, -100, 100);    //2
      cube->textureCoord(0, 1);
      cube->position( -100, -100, 100);    //3
      cube->textureCoord(1, 1);
    cube->end();
    
    /// 左面
    cube->begin("a", RenderOperation::OT_TRIANGLE_FAN);
      cube->position( -100, -100, 100);    //3
      cube->textureCoord(1, 0);
      cube->position( -100, 100, 100);    //7
      cube->textureCoord(0, 0);
      cube->position( -100, 100, -100);    //4
      cube->textureCoord(0, 1);
      cube->position( -100, -100, -100);   //0
      cube->textureCoord(1, 1);
    cube->end();
    
    /// 上面
    cube->begin("z", RenderOperation::OT_TRIANGLE_FAN);
      cube->position( -100, 100, -100);    //4
      cube->textureCoord(1, 0);
      cube->position( -100, 100, 100);    //7
      cube->textureCoord(0, 0);
      cube->position( 100, 100, 100);    //6
      cube->textureCoord(0, 1);
      cube->position( 100, 100, -100);    //5
      cube->textureCoord(1, 1);
    cube->end();
    
    /// 右面
    cube->begin("x", RenderOperation::OT_TRIANGLE_FAN);
      cube->position( 100, -100, -100);    //1
      cube->textureCoord(1, 0);
      cube->position( 100, 100, -100);    //5
      cube->textureCoord(0, 0);
      cube->position( 100, 100, 100);    //6
      cube->textureCoord(0, 1);
      cube->position( 100, -100, 100);    //2
      cube->textureCoord(1, 1);
    cube->end();
    
    /// 前面
    cube->begin("s", RenderOperation::OT_TRIANGLE_FAN);
      cube->position( 100, -100, -100);    //1
      cube->textureCoord(1, 0);
      cube->position( -100, -100, -100);   //0
      cube->textureCoord(0, 0);
      cube->position( -100, 100, -100);    //4
      cube->textureCoord(0, 1);
      cube->position( 100, 100, -100);    //5
      cube->textureCoord(1, 1);
    cube->end();
    
    /// 后面
    cube->begin("w", RenderOperation::OT_TRIANGLE_FAN);
      cube->position( 100, -100, 100);    //2
      cube->textureCoord(1, 0);
      cube->position( 100, 100, 100);    //6
      cube->textureCoord(0, 0);
      cube->position( -100, 100, 100);    //7
      cube->textureCoord(0, 1);
      cube->position( -100, -100, 100);    //3
      cube->textureCoord(1, 1);
    cube->end();
    

    OGRE真是蛋疼,太底了,上面好用的东西呢。。。

     

  • 相关阅读:
    nginx的配置
    html转pdf
    Mac 安装mysql
    网络编程
    五分钟搞定迭代器生成器
    mac 上多版本python 共存
    一张图片教会你写mysql 语句
    清晰明了的深浅拷贝
    已经入了vim的坑
    解决pip安装太慢的问题
  • 原文地址:https://www.cnblogs.com/lowdys/p/3240088.html
Copyright © 2011-2022 走看看