【发布时间】:2022-12-14 22:31:54
【问题描述】:
我目前正在开发一个 Android 项目,我需要在 Android 平台上使用 ASSIMP 加载 .obj 文件。我的实现方式是先使用 AssetManager 将 .obj 文件加载到内存中,然后使用 importer.ReadFileFromMemory() 函数创建 aiScene 对象。我已经设法导入了所有顶点数据,但我发现纹理丢失了。我实际上是从 ASSIMP GitHub 页面上读到的,其中提到 ReadFileFromMemory() 不会跨文件读取内容,因此我认为它没有读取应用纹理的 .mtl 文件。我想使用 importer.ReadFile() 函数,但我不知道如何在 Android 平台上使用它。有人有建议吗?
附件是我对 loadModelFromMemory 的实现,类似于 LearnOpenGL 的 loadModel。
void Model::loadModelFromMemory(const void* pbuffer, size_t pLength)
{
Log::Message("Enter loadModelFromMemory", LOG_INIT);
// read file via ASSIMP
Assimp::Importer importer;
const aiScene* scene = importer.ReadFileFromMemory(pbuffer, pLength, aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs | aiProcess_CalcTangentSpace);
// check for errors
if(!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) // if is Not Zero
{
Log::Message(strcat("ERROR::ASSIMP::", importer.GetErrorString()), LOG_ERROR);
return;
}
// process ASSIMP's root node recursively
processNode(scene->mRootNode, scene);
}
我试过使用ReadFile,但它不适用于 Android 上下文。我还尝试使用 ASSIMP 提供的 MemoryIOWrapper,但不知道从哪里开始。
【问题讨论】:
标签: android android-ndk assimp .obj gles