在qedl中,也考虑到不同分辨率纹理,1,0.5,0.25倍

其实,很简单,对于同一个颜色缓冲区,设置三个采样摄像机就可以了。只是把纹理设置为1,0.5,0.25倍,采样摄像机的视口也要设置为1,0.5,0.25倍,
这也其实很好验证。
//采样纹理
osg::ref_ptr<osg::Texture2D> colorTex0 = createFloatRectangleTexture(texWidth, texHeight);
osg::ref_ptr<osg::Texture2D> colorTex1 = createFloatRectangleTexture(texWidth / 2.0, texHeight / 2.0);
osg::ref_ptr<osg::Texture2D> colorTex2 = createFloatRectangleTexture(texWidth / 4.0, texHeight / 4.0);
sampleCamera0->setViewport(0, 0, texWidth, texHeight);//摄像机视口投影到纹理大小
sampleCamera1->setViewport(0, 0, texWidth / 2.0, texHeight / 2.0);//摄像机视口投影到纹理大小
sampleCamera2->setViewport(0, 0, texWidth / 4.0, texHeight / 4.0);//摄像机视口投影到纹理大小
再分别采样即可。



可能不大明显,加个1/16的

OK,
完整代码如下:
#include <osgDB/ReadFile>
#include <osgUtil/Optimizer>
#include <osg/CoordinateSystemNode>
#include <osg/Switch>
#include <osg/Types>
#include <osgText/Text>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/TrackballManipul

该代码示例展示了如何在qedl中处理不同分辨率的纹理,通过创建三个采样摄像机,分别设置为1倍、0.5倍和0.25倍纹理大小,并将它们的视口相应调整。每个摄像机都附加到同一场景,并将颜色缓冲区渲染到不同的纹理上。最后,通过一个pass1摄像机和着色器程序将这些纹理结合在一起显示。
最低0.47元/天 解锁文章
7万+

被折叠的 条评论
为什么被折叠?



