虚幻引擎(UE)C++,加载读取本地路径图片Texture2D

Posted 巧克努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚幻引擎(UE)C++,加载读取本地路径图片Texture2D相关的知识,希望对你有一定的参考价值。

//通过路径获取单张图片,转为Texture2D

UFUNCTION(BlueprintCallable, Category = "Image")

static UTexture2D* LoadTexture2D(const FString ImagePath);

//获取指定路径下的所以有图片的名称

UFUNCTION(BlueprintCallable, Category = "Image")

static TArray GetFolderFiles(FString ImagePath);

//将指定路径下的所有图片转为Texture2D

UFUNCTION(BlueprintCallable, Category = "Image")

static TArray GetAllImageFromFiles(FString ImagePath);

//判断图片类型

static TSharedPtrGetImageWrapperByExtention(const FString ImagePath);

UTexture2D* ULoadImageToTexture::LoadTexture2D(const FString ImagePath)

UTexture2D* Texture = nullptr;

if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*ImagePath))

return nullptr;

TArray RawFileData;

if (!FFileHelper::LoadFileToArray(RawFileData, *ImagePath))

return nullptr;

TSharedPtr ImageWrapper = GetImageWrapperByExtention(ImagePath);

if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num()))

TArray UncompressedRGBBA;

if (ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBBA))

Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_R8G8B8A8);

if (Texture != nullptr)

void* TextureData = Texture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);

FMemory::Memcpy(TextureData, UncompressedRGBBA.GetData(), UncompressedRGBBA.Num());

Texture->PlatformData->Mips[0].BulkData.Unlock();

Texture->UpdateResource();

return Texture;

===============================================================================

TArray ULoadImageToTexture::GetFolderFiles(FString ImagePath)

TArrayfiles;

FPaths::NormalizeDirectoryName(ImagePath);

IFileManager& FileManager = IFileManager::Get();

FString FinalPath = ImagePath / TEXT("*");

FileManager.FindFiles(files, *FinalPath, true, true);

return files;

===============================================================================

TArray ULoadImageToTexture::GetAllImageFromFiles(FString ImagePath)

TArray ImgPath = GetFolderFiles(ImagePath);

TArrayTexture2DArr;

for (auto path : ImgPath)

UTexture2D* Texture2D = LoadTexture2D(ImagePath + "/" + path);

Texture2DArr.Add(Texture2D);

return Texture2DArr;

===============================================================================

TSharedPtr ULoadImageToTexture::GetImageWrapperByExtention(const FString ImagePath)

IImageWrapperModule& module = FModuleManager::LoadModuleChecked(FName("ImageWrapper"));

if (ImagePath.EndsWith(".png"))

return module.CreateImageWrapper(EImageFormat::PNG);

if (ImagePath.EndsWith(".jpg") || ImagePath.EndsWith("jpeg"))

return module.CreateImageWrapper(EImageFormat::JPEG);

return nullptr;

虚幻引擎 4,用 c++ 导入?

【中文标题】虚幻引擎 4,用 c++ 导入?【英文标题】:Unreal Engine 4, import with c++? 【发布时间】:2015-10-12 15:50:43 【问题描述】:

我需要使用 c++ 将 fbx 导入 UE4。这是为了最终编写一个批量导入器,在导入时设置材料连接等。

然而,我被困在了第一个障碍。

我在任何地方都找不到这方面的任何信息。

如何使用 c++ 将 fbx 模型加载到编辑器中?

编辑:

我不需要在运行时执行此操作,只需将模型导入编辑器,并在执行此操作时调整它们的位置/材质设置..

【问题讨论】:

【参考方案1】:

解析 .fbx(有足够多的文档),然后create the mesh at runtime 将是一种方法。

如果您只需要编辑器的东西,请查看 FbxMainImport.cpp

FFbxImporter::OpenFile
FbxNode* GetFirstFbxMesh(FbxNode* Node, bool bIsSkelMesh)

等等……

【讨论】:

谢谢!它正在解析我遇到问题的 fbx。我需要为导入创建一个 UFactory 吗?还是有简单的方法?也许我正在寻找错误的东西,但我找不到任何有用的信息。 手动,这将是我的第一个猜测,因为我强烈假设 UEs .fbx 导入器不会在运行时结束,而只会出现在编辑器中。不过,该格式有据可查且易于解析。 对不起,我可能不太清楚,(问题已编辑)我不需要在运行时执行此操作。进入编辑器。

以上是关于虚幻引擎(UE)C++,加载读取本地路径图片Texture2D的主要内容,如果未能解决你的问题,请参考以下文章

虚幻引擎UEUE4/UE5 功能性插件推荐及使用介绍

虚幻引擎 4,用 c++ 导入?

虚幻UE4中如何采集360度全景图片和VR视频

虚幻引擎 4 (ue4) 中带有自定义 c++ 蓝图函数库的蓝图循环/for/while 节点

虚幻引擎UE4 Http之异步请求数据

虚幻引擎UE4加载GIS数据《数字孪生&智慧城市》