• osgMulitiplerendertargets sample 中fbo使用【HTC VIVE开发中应用】


    osgmultiplerendertargets.cpp  

      ......................................

      // now create the camera to do the multiple render to texture
        {
            osg::Camera* camera = new osg::Camera;

            // set up the background color and clear mask.
            camera->setClearColor(osg::Vec4(0.1f,0.1f,0.3f,1.0f));
            camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            // the camera is going to look at our input quad
            camera->setProjectionMatrix(osg::Matrix::ortho2D(0,1,0,1));
            camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
            camera->setViewMatrix(osg::Matrix::identity());

            // set viewport
            camera->setViewport(0, 0, tex_width, tex_height);

            // set the camera to render before the main camera.
            camera->setRenderOrder(osg::Camera::PRE_RENDER);

            // tell the camera to use OpenGL frame buffer objects
            camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);

            // attach the textures to use
            for (int i=0; i<NUM_TEXTURES; i++) {
                if (useMultiSample)// 使用多重渲染方式消除锯齿现象
                    camera->attach(osg::Camera::BufferComponent(osg::Camera::COLOR_BUFFER0+i), textureRect[i], 0, 0, false, 4, 4);
                else
                    camera->attach(osg::Camera::BufferComponent(osg::Camera::COLOR_BUFFER0+i), textureRect[i]);
            }

            // we can also read back any of the targets as an image, modify this image and push it back

        // 绑定一张image获取fbo渲染结果
            if (useImage) {
                // which texture to get the image from
                const int tex_to_get = 0;

                osg::Image* image = new osg::Image;
                if (useHDR) {
                    image->allocateImage(tex_width, tex_height, 1, GL_RGBA, GL_FLOAT);
                } else {
                    image->allocateImage(tex_width, tex_height, 1, GL_RGBA, GL_UNSIGNED_BYTE);
                }

                // attach the image so its copied on each frame.
                camera->attach(osg::Camera::BufferComponent(osg::Camera::COLOR_BUFFER0 + tex_to_get), image);

                camera->setPostDrawCallback(new MyCameraPostDrawCallback(image));

                // push back the image to the texture
                textureRect[tex_to_get]->setImage(0, image);
            }

            // add the subgraph to render
            camera->addChild(cam_subgraph);

            parent->addChild(camera);
        }

  • 相关阅读:
    免费录屏工具
    树莓派4安装mysql
    python中,print、变量、赋值详细理解篇01
    mysql db [Warning] IP address 'xxxx' could not be resolved: Name or service not known
    添加脚本命令
    LRUCache实现方案
    HTTP/2做错了什么?刚刚辉煌2年就要被弃用了!?
    TS 中的 export declare interface 和 export interface 到底有什么不同?
    使用nexus搭建npm私服
    nodejs 安装
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/6594439.html
Copyright © 2020-2023  润新知