[英]How to apply textures to a model in openscenegraph?
I have a flt model which has references to *tga texture files. 我有一个flt模型,其中引用了* tga纹理文件。 I converted these *.tga files into *.dds files using Nvidia texture utiilty tool (nvdxt.exe).
我使用Nvidia纹理实用工具(nvdxt.exe)将这些* .tga文件转换为* .dds文件。
I know how to read and apply single .dds texture file to my model (terrain.flt) :- 我知道如何读取单个.dds纹理文件并将其应用于我的模型(terrain.flt):-
osg::ref_ptr<osg::Node> terrainModel (osgDB::readNodeFile("c:/my_folder/terrain.flt"));
osg::ref_ptr<osg::Texture2D> tex (new osg::Texture2D);
osg::ref_ptr<osg::Image> image (osgDB::readImageFile("c:/my_folder/road.dds "));
tex->setImage(image.get());
osg::ref_ptr<osg::StateSet> state=terrainModel->getOrCreateStateSet();
state->setTextureAttributeAndModes(0,tex.get(),osg::StateAttribute::ON);
but i don't know how to read and apply all these textures *.dds to my model (terrain.flt). 但是我不知道如何将所有这些纹理* .dds应用于我的模型(terrain.flt)。
my attempt :- 我的尝试:-
osg::ref_ptr<osg::Node> terrainModel (osgDB::readNodeFile("c:/my_folder/terrain.flt"));
osg::ref_ptr<osg::Texture2DArray> texArray (new osg::Texture2DArray);
for(int i=0;i<my_folder_files.size();i++)
{
osg::ref_ptr<osg::Image> image (osgDB::readImageFile("c:/my_folder/"+file(i)));
texArray->setImage(i,image);
}
osg::ref_ptr<osg::StateSet> state=terrainModel->getOrCreateStateSet();
state->setTextureAttributeAndModes(0,texArray.get(),osg::StateAttribute::ON);
but, it is not working. 但是,它不起作用。 Help me.
帮我。
osg::ref_ptr<osg::Node> terrainModel (osgDB::readNodeFile("c:/my_folder/terrain.flt"));
osg::Texture2D* texture = new osg::Texture2D;
osg::ref_ptr<osg::Image> image (osgDB::readImageFile("c:/my_folder/road.dds "));
texture->setImage(image.get());
texture->SetWrap(osg::Texture2D::WrapParameter::wrap_s,osg::Texture2D::Wrapmode::Mirror);
texture->SetWrap(osg::Texture2D::WrapParameter::wrap_t,osg::Texture2D::Wrapmode::Mirror);
texture->SetWrap(osg::Texture2D::WrapParameter::wrap_r,osg::Texture2D::Wrapmode::Mirror);
texture->setFilter(osg::texture2D::FilterParameter::MIN_FILTER,osg::Texture2D::FilterMode::LINEAR);
texture->setFilter(osg::texture2D::FilterParameter::MAG_FILTER,osg::Texture2D::FilterMode::LINEAR);
osg::material *material = new osg::material;
osg::stateset *stateset = new osg::stateset;
stateset->setTextureAttribute(0,texture,osg::stateattribute::OVERRIDE);
stateset->setTextureMode(0,GL_TEXTURE_2D,osg::stateattribute::ON|osg::stateattribute::OVERRIDE);
stateset->setTextureMode(0,GL_TEXTURE_GEN_S,osg::stateattribute::ON|osg::stateattribute::OVERRIDE);
stateset->setTextureMode(0,GL_TEXTURE_GEN_T,osg::stateattribute::ON|osg::stateattribute::OVERRIDE);
stateset->setAttribute(material,osg::stateattribute::OVERRIDE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.