首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Assimp load fbx纹理失败,可能出现问题:单元0 GLD_TEXTURE_INDEX_2D是可卸载的,并绑定到取样器类型(浮点数)

Assimp load fbx纹理失败,可能出现问题:单元0 GLD_TEXTURE_INDEX_2D是可卸载的,并绑定到取样器类型(浮点数)
EN

Stack Overflow用户
提问于 2022-05-29 10:05:11
回答 1查看 205关注 0票数 -1

我使用此代码加载FBX (注意:特定于FBX),纹理无法成功加载

代码语言:javascript
运行
复制
for (unsigned int i = 0; i < mat->GetTextureCount(type); i++) {
      aiString str;
      mat->GetTexture(type, i, &str);
      if (auto texture_inside = scene->GetEmbeddedTexture(str.C_Str())) {
        unsigned char *image_data = nullptr;
        int width, height, nrComponents;
        if (texture_inside->mHeight == 0) {
          image_data = stbi_load_from_memory(
              reinterpret_cast<unsigned char *>(texture_inside->pcData),
              texture_inside->mWidth, &width, &height, &nrComponents, 0);
        } else {
          image_data = stbi_load_from_memory(
              reinterpret_cast<unsigned char *>(texture_inside->pcData),
              texture_inside->mWidth * texture_inside->mHeight, &width, &height,
              &nrComponents, 0);
        }

        if (image_data) {
          GLenum format;
          if (nrComponents == 1)
            format = GL_RED;
          else if (nrComponents == 3)
            format = GL_RGB;
          else if (nrComponents == 4)
            format = GL_RGBA;

          unsigned int t_id;
          glGenTextures(1, &t_id);
          glBindTexture(GL_TEXTURE_2D, t_id);
          glTexImage2D(GL_TEXTURE_2D, 0, format, texture_inside->mWidth,
                       texture_inside->mHeight, 0, format, GL_UNSIGNED_BYTE,
                       image_data);
          glGenerateMipmap(GL_TEXTURE_2D);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

          glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
                          GL_LINEAR_MIPMAP_LINEAR);
          glBindTexture(GL_TEXTURE_2D, 0);

          delete image_data;

          AnimTexture texture;
          texture.id = t_id;
          texture.type_name = typeName;
          texture.file_path = str.C_Str();
          textures.push_back(texture);
        }
        LOG(INFO) << "loading texture from embeded: " << str.C_Str();
      }
}

然后我收到了这样的错误信息:

代码语言:javascript
运行
复制
UNSUPPORTED (log once): POSSIBLE ISSUE: unit 0 GLD_TEXTURE_INDEX_2D is unloadable and bound to sampler type (Float) - using zero texture because texture unloadable

我的问题是:

  1. 如何以正确可行的方式加载FBX嵌入式纹理?
  2. 我在这里错过了什么,可能造成了上述错误?

目前我只得到了错误的黑色黑色纹理。

EN

回答 1

Stack Overflow用户

发布于 2022-06-10 07:22:42

这是assimp项目中的一个常见问题。您可以在这里找到一个如何加载嵌入式纹理的示例:如何处理嵌入式纹理

简言之:

  1. 从嵌入的纹理中获取数据
  2. 用图像转换器对其进行编码
  3. 把它放到GPU上的纹理中
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72422707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档