(UE4 Assimp) Проблемы с загрузкой текстуры mtl во время выполнения

#c #runtime #textures #unreal-engine4 #assimp

#c #время выполнения #Текстуры #unreal-engineer4 #assimp

Вопрос:

Я использую Assimp для импорта 3d Obj во время выполнения с помощью Unreal Engine. Я пытаюсь импортировать текстуры благодаря файлу mtl, я могу получить файл текстуры с именем, но моя проблема в том, как использовать его для импорта текстуры в UTexture2D и поместить ее в MID?

 if (scene->HasMaterials())
    {
        for (unsigned int m = 0; m < scene->mNumMaterials;   m)
        {
            aiMaterial* material = scene->mMaterials[m];
            aiString materialName;
            aiReturn ret;

            ret = material->Get(AI_MATKEY_NAME, materialName);
            if (ret != AI_SUCCESS) materialName = "";

            //Diffuse maps
            int numTextures = material->GetTextureCount(aiTextureType_DIFFUSE);
            aiString textureName;

            if (numTextures > 0)
            {
               
                ret = material->Get(AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE, 0), textureName);

                std::string textureType = "diffuse_";
                std::string textureFileName = textureType   textureName.data;//Name Texture file 
            }
        }
    }
  

Спасибо.

Ответ №1:

Я надеюсь, что смогу в некоторой степени ответить на ваш вопрос, основываясь на том, что вы предоставили.

Насколько я понимаю из вашего вопроса, у вас есть доступ к имени файла (это должен быть полный путь), который содержит вашу текстуру, и вы хотите импортировать его как UTexture2D. Я раньше не работал с импортом на C , но я предполагаю, что это так же просто сделать, как и в чертежах. В чертежах есть существующий узел, который делает именно это. Посмотрите: импортируйте файл как текстуру 2D

Теперь вы должны помнить, что импорт ее как таковой на самом деле не создаст для вас постоянный материал, на который вы можете ссылаться даже после перезагрузки вашей игры. Это просто импортирует ее во время выполнения на время вашей игры и удаляет все ссылки на нее после выхода из игры.

Что касается помещения ее в MID, я не уверен, что такое MID. Вы имеете в виду DMI (экземпляр динамического материала)? Если нет, пожалуйста, уточните, и, надеюсь, я буду вам полезен. Если вы имеете в виду DMI, то это тоже довольно просто, хотя, к сожалению, я тоже не работал с этим в C . Однако я ознакомлю вас с планом, и, надеюсь, вы сможете интерпретировать это на C самостоятельно.

Чтобы создать DMI, вам необходимо уже создать материал, содержащий параметры, которые вы хотите затем изменить при создании DMI. Вот простой пример, который я буду использовать для демонстрации: Тестовый материал Как вы можете видеть, я создал материал с параметром TEXTUREOBJECT. Назовите этот параметр так, как вы хотите, важно дать ему соответствующее имя, поскольку это то, на что вы будете ссылаться при изменении вашего DMI (в данном примере я называю его «color»).

Далее, когда вы захотите создать DMI из этого материала, вот как это делается в чертежах: введите описание изображения здесь На этом рисунке, просто для вашего примера, я сначала импортирую свою текстуру, затем создаю DMI класса TestMaterial и изменяю любой параметр, который я создал в исходном классе материалов, на то, каким я хочу его видеть (в этом примере параметр для изменения — «цвет», и я хочу, чтобы он был изменен на текстуру, которую я только что импортировал). Вы можете изменять столько параметров, сколько хотите, но помните, что эти параметры должны существовать в первую очередь в вашем исходном классе материалов. Помните, что DMI также существуют только во время выполнения, и все ссылки на них будут удалены после выхода из игры, поэтому используйте их осторожно!

Я действительно надеюсь, что правильно понял ваш вопрос, и мне очень жаль, что я не смог предоставить реальную помощь C . Однако желаю удачи в дальнейшей разработке вашей игры!