-4

我正在使用 OpenGL 4.0,我的场景中有 3 个东西,它们是 -

1- VBO 平面
2- 立方体贴图
3- 3D 模型 [3ds/obj]

我正在使用 Assimp 库导入 3D 模型,我为导入模型而构建的代码是在 YouTube 上来自“TheCPlusPlusGuy”的教程的帮助下完成的。

这是我面临的问题,我可以在我的场景中渲染飞机,我可以渲染立方体贴图,也就是天空盒,在我的场景中,我可以一起渲染它们。
但是当我渲染任何 3D 模型时,无论是 .3ds 还是 .obj,屏幕都不会更新。即使我调整屏幕大小,它也不会更新。
这仅在我渲染 3D 模型时发生。我在运行时使用了标志并启用了绘制 3D 模型,程序运行良好,直到我渲染模型,一旦我渲染模型,模型本身不会出现在屏幕上,但屏幕再次冻结。
我用谷歌搜索了它,但似乎没有其他人遇到过这样的问题。

我的主要诊断是因为我将 VBO 用于平面、立方体贴图和 3D 模型,所以我遇到了这个问题。

4

3 回答 3

2

以下是建议列表:

  • 使用 VBO 不是问题。也没有使用 Assimp。
  • 确保您在缓冲区和绘图调用中指定了正确数量的索引和图元,并且它们的格式正确。OpenGL 文档对于这些数字需要是什么(字节、索引、三角形?)可能含糊不清,因此请确保做得好。Wiki 在解释这一点方面做得更好。
  • 您的模型是否真的通过了加载阶段?你试过一个非常简单的模型吗?
  • 确保您只加载模型一次(即不在渲染循环中,如果是这样,则有一种机制可以确保它只加载一次)。反复告诉你的程序加载模型会使它运行得非常缓慢,并冒着耗尽你所有内存的风险。
  • 确保您已将模型从 Assimp 的数据结构正确转换为您自己的数据结构。检查是否正确设置了值。加载一个 OBJ 并打印您正在复制的值 - 它们是否与 .obj 文件对齐?
  • 加载模型时是否有有效的 OpenGL 上下文?从 Assimp 加载不需要,但从该数据结构到 VBO 需要。

我相信你已经完成了很多这样的事情,但我在完成这项任务时也遇到了棘手的问题。逐步完成将帮助您缩小问题范围。

于 2013-07-21T15:12:54.333 回答
1

我正在使用 Assimp 在我的编辑器中导入模型,但 Assimp 仅用于读取模型和网格数据,并且值以我自己的模型/网格格式存储。我假设我们都这样做?我对 Assimp 没有任何问题,而且我也被引导相信天空盒等应该在所有其他不透明对象之后渲染,这样你就可以做一些技巧来最小化渲染时间(天空盒被认为是最远的对象之一)。

我倾向于同意 Bartek 的观点。Assimp 似乎与您遇到的问题无关,我会考虑重新设计您的渲染方法。

于 2013-07-21T13:02:26.220 回答
1

渲染飞机后我忘了这样做->

glBindVertexArray(0);

在那之后,该程序就像一个魅力一样工作。

于 2013-07-23T11:07:19.697 回答