opengl Assimp加载fbx纹理失败,可能的问题:单元0 GLD_TEXTURE_INDEX_2D不可加载并绑定到采样器类型(浮点型)

icomxhvb  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(576)

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

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();
      }
}

然后我收到了如下错误消息:

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嵌入纹理?
1.我错过了什么可能导致上述错误?
目前我只得到了错误的黑色暗纹理。

bd1hkmkf

bd1hkmkf1#

这是assimp-project中的一个常见问题。你可以在这里找到一个如何加载嵌入纹理的例子:How to deal with embedded textures
简而言之:
1.从嵌入纹理中获取数据
1.用图像转换器编码
1.将其放入GPU上的纹理中

相关问题