查看: 2124|回复: 7

多纹理融合

[复制链接]

该用户从未签到

发表于 2009-11-26 10:12:40 | 显示全部楼层 |阅读模式
osg中glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 0.0)对应的函数实现是哪个?我想像opengl中那样一个顶点对应两个纹理,然后融合在一起,osg中如何实现?

该用户从未签到

发表于 2009-11-26 12:15:53 | 显示全部楼层
setTextureAttributes()的时候要选择纹理单元的,给多个纹理单元设置纹理就可以;同时Geometry的setTexCoordArray()也要设置两个单元各自的纹理坐标

该用户从未签到

 楼主| 发表于 2009-11-26 19:10:25 | 显示全部楼层
谢谢!

该用户从未签到

 楼主| 发表于 2009-12-1 09:19:45 | 显示全部楼层
我在一个点出设置两个纹理,但感觉并不是融合在一起,而是想在原来图上加了一个透明的玻璃似的。核心代码如下,
一个点两个纹理
vertices->push_back(osg::Vec3(px,-py,pz));
texcoords->push_back(osg::Vec2(i *1.0/ noSteps, 0));
texcoords1->push_back(osg::Vec2(i*1.0 / noSteps, 1));
polyGeom->setTexCoordArray(0,texcoords);
polyGeom->setTexCoordArray(1,texcoords1);
融合
osg::StateSet* stateset = polyGeom->getOrCreateStateSet();
stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
stateset->setAttributeAndModes(new osg::BlendFunc (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA),osg::StateAttribute::ON);
stateset->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
stateset->setTextureAttributeAndModes(0,texture,osg::StateAttribute::ON);//帧缓存中拷贝出来的纹理
stateset->setTextureAttribute(0, new osg::TexEnv(osg::TexEnv::MODULATE),osg::StateAttribute::ON);
stateset->setTextureAttributeAndModes(1, testTexture,osg::StateAttribute::ON);  //加载的一幅图
  stateset->setTextureAttribute(1, new osg::TexEnv(osg::TexEnv::MODULATE),osg::StateAttribute::ON);

我想要的效果是两个纹理合成一幅,但是实际效果看上去两个纹理像是独立的

该用户从未签到

发表于 2009-12-1 10:08:54 | 显示全部楼层
您设置了Blend融混,当然可能出现“加了一个透明的玻璃”的情况;如果只想简单的叠加两个纹理通道,那么除了setTextureAttributeAndModes之外不要再设置别的渲染属性;如果希望得到复杂的融合效果,不妨考虑使用着色语言

该用户从未签到

 楼主| 发表于 2009-12-1 14:23:25 | 显示全部楼层
我的目标是实现边缘融合,两边的亮度逐渐变弱。osg里都有什么方法可以实现?我的想法是弄一幅黑白图(中间白,两边逐渐过渡成黑色),然后和从帧缓存中拷贝出的纹理融合,来实现融合,不知道此方法是否可行?刚入手弄,期望给点指点。

该用户从未签到

发表于 2009-12-1 15:34:10 | 显示全部楼层
对我个人而言最直接的方法就是在GLSL中实现~~当然传统方案用TexEnv或TexEnvCombine应该也是可以的,您不妨自己尝试

该用户从未签到

 楼主| 发表于 2009-12-2 09:10:57 | 显示全部楼层
好的 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表