查看: 3003|回复: 7

如何用融合实现透明纹理

[复制链接]

该用户从未签到

发表于 2009-2-17 09:27:43 | 显示全部楼层 |阅读模式
在OPENGL中可以用BLEND的方法实现纹理中某一颜色(比如纯黑或者纯白),在OSG中能实现这样的效果吗,我现在是以视频文件中的每一帧作为纹理,想实现黑色的部分为透明色,但不知道该怎么做。
如果用osg::Image直接打开一个带alpha通道的纹理是有透明效果的,但是如果自己定义了一个osg::Image然后填充数据却实现不了透明效果。我觉得可能是我填充数据时可能有问题,代码如下。请大家帮帮忙啊!

                osg::Image* osgImg = new osg::Image();
                osgImg->setImage(
                        cvImg->width, //s
                        cvImg->height, //t
                        3, //r
                        GL_LINE_STRIP, //GLint internalTextureformat, (GL_LINE_STRIP, 0x0003)
                        GL_RGB, // GLenum pixelFormat, (GL_RGB, 0x1907)
                        GL_UNSIGNED_BYTE, // GLenum type, (GL_UNSIGNED_BYTE, 0x1401)
                        (BYTE*)(cvImg->imageData), // unsigned char* data
                        osg::Image::AllocationMode::NO_DELETE // AllocationMode mode (shallow copy)
                        );//int packing=1);

该用户从未签到

发表于 2009-2-17 10:44:14 | 显示全部楼层
我想这个应该不是那样的吧,,,视频应该不能通过简单的ALPHA来控制吧~~~~~

该用户从未签到

 楼主| 发表于 2009-2-17 10:53:34 | 显示全部楼层
那一副普通的不带ALPHA通道的贴图能做出透明效果来吗?

该用户从未签到

发表于 2009-2-17 13:03:09 | 显示全部楼层
不能,,,透明贴图都是经过处理的贴图~~~

该用户从未签到

 楼主| 发表于 2009-2-17 13:04:37 | 显示全部楼层
但是普通贴图在OPENGL中能做出融合的效果,半透明或者指定颜色透明

该用户从未签到

发表于 2009-2-17 13:20:33 | 显示全部楼层
那样的话,,你也可以把贴图先读进来再读里面的数据,,同样也可以设置透明纹理~~~

该用户从未签到

 楼主| 发表于 2009-2-17 14:32:48 | 显示全部楼层
我已经搞定了,读进来的纹理先必须加一位保存ALPHA信息,同时setImage的参数设置比特殊,还是谢谢版主啦!

该用户从未签到

发表于 2009-2-19 09:48:17 | 显示全部楼层
参数如何设置,分享以下嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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