osgFBO(十二)深度纹理与颜色纹理混合

该代码示例展示了在OpenGL中如何创建并混合颜色纹理和深度纹理。首先,创建两个纹理对象,一个用于颜色,一个用于深度。然后,将它们分别关联到采样摄像机的颜色缓冲区和深度缓冲区。接着,在Pass1摄像机中设置这两个纹理,并在着色器中通过相加操作将它们混合。最终,这个混合处理被应用到一个几何体上,并在渲染过程中使用。

前面涉及到了深度纹理和颜色纹理,由于qedl中,也要两者混合。
在这里插入图片描述
所以,要考虑到两者混合,这里只是简单将其相加。

一,设置纹理
//采样颜色纹理
osg::ref_ptrosg::Texture2D texColor = createFloatRectangleTexture(texWidth, texHeight);
//采样深度
osg::ref_ptrosg::Texture2D texDepth = makeDepthTexture(texWidth, texHeight);
二,关联采样摄像机颜色缓冲区和深度缓冲区
sampleCamera0->attach(osg::Camera::COLOR_BUFFER0, texColor); //关联采样贴图
sampleCamera0->attach(osg::Camera::DEPTH_BUFFER, texDepth); //关联深度贴图
三,Pass1摄像机输入颜色纹理和深度纹理

	osg::ref_ptr<osg::StateSet> stateset = pass1Camera->getOrCreateStateSet();
	{
		stateset->setTextureAttributeAndModes(0, texColor);
		stateset->setTextureAttributeAndModes(1, texDepth);
	}

四,shader处理这两个纹理

		osg::ref_ptr<osg::Uniform> texColorUniform = new osg::Uniform("texColor", 0);
		osg::ref_ptr<osg::Uniform> texDepthUniform = new osg::Uniform("texDepth", 1);
		stateset->addUniform(texColorUniform);
		stateset->addUniform(texDepthUniform);

static const char* psShader =
{
“varying vec2 outTexCoord;”
“uniform sampler2D texColor;”
“uniform sampler2D texDepth;”
“void main(void)\n”
“{\n”
“gl_FragColor = texture2D(texColor,outTexCoord) + texture2D(texDepth,outTexCoord);”
“}\n”
};

运行如下:

在这里插入图片描述
完整代码如下:

#include <osgDB/ReadFile>
#include <osgUtil/Optimizer>
#inclu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值