我正在使用虚幻引擎在运行时使用Assimp导入3d Obj。我尝试导入纹理多亏了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
}
}
}谢谢。
发布于 2020-09-19 09:28:09
我希望我能根据您提供的内容在一定程度上回答您的问题。
根据我在你的问题中的理解,你有权访问保存你的纹理的文件名(这必须是完整的路径),并希望将其作为UTexture2D导入。我以前没有在C++中使用过导入,但我假设它和在蓝图中一样简单。在蓝图中,有一个现有的节点就是这样做的。看一下:Import File as Texture 2D
现在你必须记住,这样导入它实际上不会为你创建一个永久的材质,即使在重置游戏之后你也可以引用它。这将只是在你的游戏期间在运行时导入它,并在退出游戏后删除对它的所有引用。
至于把它放在MID中,我不确定MID是什么。你是说DMI (动态材料实例)吗?如果没有,请澄清,希望我能提供进一步的帮助。如果您指的是DMI,那么这也很简单,尽管不幸的是我也没有在C++中使用过它。不过,我将向您介绍一下蓝图,希望您能用C++自己解释它。
要创建DMI,您需要已经创建了一种材质,该材质包含您想要在创建DMI时更改的参数。下面是一个非常基本的示例,我将使用该示例进行演示:

如您所见,我已经创建了一个带有TextureObjectParameter的材质。将这个参数命名为您希望的名称,给它一个相关的名称是很重要的,因为这是您在修改DMI时要引用的名称(在本例中,我将其命名为"color")。
接下来,当您想要创建此材料的DMI时,在蓝图中是这样做的:

在这张图片中,我首先导入了我的纹理,然后创建了一个TestMaterial类的DMI,并修改了我在原始material类中创建的任何参数(在本例中,要更改的参数是"color“,我希望将其更改为我刚刚导入的纹理)。您可以根据需要修改任意多个参数,但请记住,这些参数必须首先存在于原始材质类中。但请记住,DMIs也只存在于运行时,所有对它们的引用都将在您退出游戏后删除,因此请谨慎使用它们!
我真的希望我正确地理解了你的问题,我很抱歉不能提供实际的C++帮助。祝你的游戏开发顺利!
https://stackoverflow.com/questions/63934818
复制相似问题