0

我正在使用 OpenGL 开发一个简单的 3D 模型加载器,我想添加纹理支持。但是,不想不必要地重写图像库,我下载了我在 NeHe 纹理映射教程中学到的 SOIL(简单 OpenGL 图像库)。它有一些非常有用的函数来处理多次加载图像并将它们传递给 OpenGL。

问题是这样的:在NeHe教程代码中,SOIL函数

SOIL_load_OGL_texture(char *, param,param,param) 

完全按照承诺,多边形映射到正确的图片。但是,我创建了一个加载 OBJ 和 MTL 文件(3D 模型文件)的类。当我尝试使用 SOIL 函数在此类中加载纹理时,我的程序崩溃了。

  • 我正在使用带有 Code::Blocks 的 GNU C++(我也在 Dev-C++ 中尝试过这段代码)
  • 我使用 -g -Wall 没有收到来自编译器的错误或警告。
  • 我已将所有内容正确链接并包含在我的项目中(如果我复制/粘贴 NeHe 代码,它会正常运行)。
  • SOIL 命令在任何类中都不起作用(我尝试创建另一个只执行 SOIL 函数的类,但我遇到了同样的问题)。
  • 传递给函数的文件路径都是正确的。我尝试过相对和绝对,所有格式的正斜杠和反斜杠。我将在 NeHe 代码中有效的绝对路径复制并粘贴到我的代码中,但它不起作用。
  • 我的其余代码工作正常 - 我可以使用环境/漫反射/等渲染我的形状。颜色和其他设置正确应用。
4

1 回答 1

3

听起来您在调用该函数时几乎没有有效的 OpenGL 上下文。

您确定只有您的 opengl 上下文初始化后才调用 SOIL 吗?(例如,没有在程序初始化时构造的对象的静态构造)。一个快速检查的方法是在你的 opengl 初始化上设置一个断点,看看你是否命中了 BP 或者你的程序是否首先崩溃。

此外,请确保 SOIL 调用与您的 opengl 上下文位于同一线程上。

于 2012-08-29T17:27:35.370 回答