1

我想实现一个可以使用 Assimp(Assimp的链接)将 3D 模型加载到 OpenGL 中的程序。

我的 Qt 版本是 5.3.2。我使用 Qt Creator 并修改.pro文件以导入 Assimp 库:

INCLUDEPATH += H:\Study\assimp-3.1.1-win-binaries\assimp-3.1.1-win-binaries\include\assimp
LIBS += -lH:\Study\assimp-3.1.1-win-binaries\assimp-3.1.1-win-binaries\lib32\assimp

然后我尝试box.obj在我的程序中阅读:

#include <scene.h>
#include <postprocess.h>
#include <Importer.hpp>

int main(){
    Assimp::Importer importer;

    const aiScene* scene = importer.ReadFile("box.obj", NULL);

    if (!scene)
    {
        qDebug() << "Error loading file: (assimp:) " << importer.GetErrorString();
        return false;
    }

    .....// Other code to create a window

    return 0;
}

然后编译完成,没有错误。然后程序在启动后就崩溃了。

开始 G:\QtProject\QtTest\build-MyOpenGL-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Debug\debug\MyOpenGL.exe ...

G:\QtProject\QtTest\build-MyOpenGL-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Debug\debug\MyOpenGL.exe 崩溃

我尝试调试,但断点似乎不起作用。

我删除了一些代码并声明scene

#include <scene.h>
#include <postprocess.h>
#include <Importer.hpp>

int main(){
    //Assimp::Importer importer;

    const aiScene* scene;  // = importer.ReadFile("box.obj", NULL);

    /*if (!scene)
    {
        qDebug() << "Error loading file: (assimp:) " << importer.GetErrorString();
        return false;
    }*/

    .....// Other code to create a window

    return 0;
}

程序可以再次运行!

我现在真的很困惑。谁能帮我?

4

1 回答 1

2

将动态库添加到 Qt 的 debug/release(根据调试中的编译输出)目录。没有引用代码的程序:

ReadFile("box.obj", NULL);
GetErrorString();

会起作用,因为它不调用动态库中的函数,这就是它被称为动态库的原因。
还写:

LIBS += -L/path not -l
于 2014-11-06T15:15:25.580 回答