zoukankan      html  css  js  c++  java
  • osg渲染到纹理的代码,把读入的节点当成纹理渲染到一个正方形上

     osg::Group* group =  new osg::Group;
     osg::Node* node = osgDB::readNodeFile("D:\\cow.osg");

     osg::Camera* camera = new osg::Camera;
     camera->setViewport(0, 0, 256, 256);


     osg::Image* img = new osg::Image;
     img->allocateImage(256, 256, 1, GL_RGBA, GL_FLOAT);
     
     osg::Texture2D* texture2D = new osg::Texture2D;


     texture2D->setTextureSize(256, 256);
     texture2D->setInternalFormat(GL_RGBA);

     //camera->attach(Camera::COLOR_BUFFER, texture2D, 0, 0);
     camera->attach(Camera::COLOR_BUFFER, img, 0, 0);
     texture2D->setImage(0, img);


     const osg::BoundingSphere& bs = node->getBound();//osg::Group = new osg::Group


     float znear = 1.0f*bs.radius();
     float zfar  = 3.0f*bs.radius();


     float proj_top   = 0.25f*znear;
     float proj_right = 0.5f*znear;

     znear *= 0.9f;
     zfar *= 1.1f;

     // set up projection.
     camera->setProjectionMatrixAsFrustum(-proj_right,proj_right,-proj_top,proj_top,znear,zfar);

     // set view //set up projection
     camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
     camera->setViewMatrixAsLookAt(bs.center()-osg::Vec3(0.0f,2.0f,0.0f)*bs.radius(),bs.center(),osg::Vec3(0.0f,0.0f,1.0f));


     camera->setRenderOrder(osg::Camera::PRE_RENDER);
     camera->setRenderTargetImplementation(Camera::FRAME_BUFFER_OBJECT);

     camera->addChild(node);

     group->addChild(camera);

     osg::Geometry* geometry = new osg::Geometry;
     osg::Vec3Array* vertex = new osg::Vec3Array;
     osg::Vec2Array* coord = new osg::Vec2Array;

     vertex->push_back(osg::Vec3(0.0, 0.0, 0.0));
     vertex->push_back(osg::Vec3(10.0, 0.0, 0.0));
     vertex->push_back(osg::Vec3(10.0, 10.0, 0.0));
     vertex->push_back(osg::Vec3(0.0, 10.0, 0.0));

     coord->push_back(osg::Vec2(0.0, 0.0));
     coord->push_back(osg::Vec2(1.0, 0.0));
     coord->push_back(osg::Vec2(1.0, 1.0));
     coord->push_back(osg::Vec2(0.0, 1.0));

     geometry->setTexCoordArray(0,coord);

     geometry->setVertexArray(vertex);
     geometry->addPrimitiveSet(new osg::DrawArrays(osg::DrawArrays::QUADS, 0, vertex->size() ));
      

     osg::Geode* geode = new osg::Geode;
        geode->addDrawable(geometry);

     osg::StateSet* statsset = new osg::StateSet;
     statsset->setTextureAttributeAndModes(0, texture2D,osg::StateAttribute::ON);

        geometry->setStateSet(statsset);


     group->addChild(geode);

     osgViewer::Viewer viewer;
     viewer.setSceneData(group);
     return viewer.run();

  • 相关阅读:
    java日期格式化
    Map遍历方法
    Eclipse常用快捷键
    mysql事务块处理
    oracle事务块示例
    取得服务器或应用程序当前路径
    tomcat下运行war包
    java通过CLASSPATH读取包内文件
    Hive分析窗体函数之SUM,AVG,MIN和MAX
    LeetCode 145 Binary Tree Postorder Traversal(二叉树的兴许遍历)+(二叉树、迭代)
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1780360.html
Copyright © 2011-2022 走看看