查看: 1577|回复: 7

如何得到TexEnvCombine

[复制链接]

该用户从未签到

发表于 2010-1-18 11:06:15 | 显示全部楼层 |阅读模式
TexEnvCombine的作用是什么?
怎样从stateset中得到,并重新设置?
谢谢!

该用户从未签到

发表于 2010-1-18 12:24:22 | 显示全部楼层
TexEnvCombine和TexEnv的作用类似,并且两者不能同时使用。因此,当您设置了TexEnvCombine属性之后,也可以用getAttribute(TEXENV)取得并重新设置。

与此同理的还有Stencil和StencilTwoSided

该用户从未签到

 楼主| 发表于 2010-1-18 12:37:00 | 显示全部楼层
非常感谢!

该用户从未签到

 楼主| 发表于 2010-1-18 13:53:28 | 显示全部楼层
请问array,如何删除已有的TexEnvCombine呢?我用removeAttribute不能达到目的!

该用户从未签到

发表于 2010-1-18 13:56:02 | 显示全部楼层
removeAttribute是可以的,也许您什么地方写错了而已

该用户从未签到

 楼主| 发表于 2010-1-18 16:08:16 | 显示全部楼层
osg文件中的代码如下:
  textureUnit 0 {
              GL_TEXTURE_2D ON
              Texture2D {
                UniqueID Texture2D_0
                file "images\\XJ-shui-tongyiTGA.dds"
                wrap_s REPEAT
                wrap_t REPEAT
                wrap_r CLAMP_TO_EDGE
                min_filter LINEAR_MIPMAP_NEAREST
                mag_filter LINEAR
                maxAnisotropy 1
                borderColor 0 0 0 0
                borderWidth 0
                useHardwareMipMapGeneration TRUE
                unRefImageDataAfterApply TRUE
                internalFormatMode USE_S3TC_DXT3_COMPRESSION
                resizeNonPowerOfTwo TRUE
              }
              TexEnvCombine {
                UniqueID TexEnvCombine_1
                combine_RGB REPLACE
                combine_Alpha INTERPOLATE
                source0_RGB PREVIOUS
                source1_RGB PREVIOUS
                source2_RGB CONSTANT
                source0_Alpha TEXTURE
                source1_Alpha PREVIOUS
                source2_Alpha CONSTANT
                operand0_RGB SRC_COLOR
                operand1_RGB SRC_COLOR
                operand2_RGB SRC_ALPHA
                operand0_Alpha SRC_ALPHA
                operand1_Alpha SRC_ALPHA
                operand2_Alpha SRC_ALPHA
                scale_RGB 1
                scale_Alpha 1
                constantColor 1 1 1 1
              }
            }
            textureUnit 1 {
              GL_TEXTURE_2D ON
              Use Texture2D_0            
            }
          }

我的目的是将 textureUnit 0中的TexEnvCombine 设置到 textureUnit 1 ,并将textureUnit 0中的删掉,我的实现如下:
osg::StateSet::TextureAttributeList& texAttriblist = state->getTextureAttributeList();

                        if (texAttriblist.size() == 2)
                        {
                                osg::TexEnvCombine *texenv = dynamic_cast<osg::TexEnvCombine*>(state->getTextureAttribute(0,osg::StateAttribute::TEXENV));  
                                if (texenv)
                                {
                                        state->removeAttribute(texenv);
                                        state->setTextureAttributeAndModes(1,texenv, osg::StateAttribute::ON);
                                }
                        }

完成后 textureUnit 1中的成功设置,但是 textureUnit 0中的没有删掉,请问我的实现有什么错误?谢谢!

该用户从未签到

发表于 2010-1-18 16:21:07 | 显示全部楼层
removeTextureAttribute !

该用户从未签到

 楼主| 发表于 2010-1-18 17:35:22 | 显示全部楼层
o,好了。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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