osg.Texture
是OpenSceneGraph的贴图类,用于加载、渲染和操作纹理数据。
osg.Texture
通过读取外部纹理文件、生成空白纹理或者从应用程序中传递纹理数据的方式,获取纹理数据并存储在图形硬件中,以供后续渲染使用。
在 osg::State
状态机中设置 osg.Texture
对象并将其与 osg::Geometry
类或其它 Drawable
类关联,即可在将来的渲染过程中使用。
osg::Texture::Texture();
osg::Texture::Texture(osg::Image* image);
void setFilter(osg::Texture::FilterMode min_filter, osg::Texture::FilterMode mag_filter);
void setWrap(osg::Texture::WrapMode s_wrap, osg::Texture::WrapMode t_wrap);
void setImage(osg::Image* image);
void setBorderColor(const osg::Vec4& color);
void setInternalFormat(GLenum internal_format);
void setUnRefImageDataAfterApply (bool unRefImageDataAfterApply);
如何加载纹理文件?
使用 osgDB::readImageFile
函数加载图片文件,并利用 osg::Texture
对象的 setImage
方法设置纹理图像数据。
#include <osg/Texture>
#include <osgDB/ReadFile>
osg::ref_ptr<osg::Image> img = osgDB::readImageFile("texture.jpg");
osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
texture->setImage(img);
如何在多个纹理之间切换?
可以使用 osg::Texture
对象的 bind
方法绑定纹理,使用 osg::Texture
的 unbind
方法取消绑定。
//绑定纹理
texture->bind(unit);
//绑定纹理后执行渲染操作...
//取消绑定
texture->unbind(unit);
如何设置纹理过滤器和纹理包装?
设置纹理过滤器和纹理包装可以控制纹理在应用到几何体上时的质量与表现方式。
//设置最小和最大过滤器
texture->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR);
texture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
//设置s、t方向的纹理包装模式
texture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
如何在使用完纹理后释放内存?
如果在渲染过程中不再需要该纹理,可设置 osg::Texture
对象的 setUnRefImageDataAfterApply(true)
方法,在每次渲染完毕后自动释放内存。
//启用自动释放内存
texture->setUnRefImageDataAfterApply(true);