Как применить текстуры к модели в openscenegraph?

У меня есть модель flt, в которой есть ссылки на файлы текстур * tga. Я конвертировал эти * .tga файлы в * .dds файлы с помощью утилиты nvidia texture utiilty (nvdxt.exe).

Я знаю, как читать и применять один файл текстуры .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);

но я не знаю, как читать и применять все эти текстуры * .dds к моей модели (terrain.flt).

моя попытка: —

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);

Но это не работает. Помоги мне.

1

Решение

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);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]