【问题标题】:OpenGL, screen doesn't update after adding Assimp 3D model [closed]OpenGL,添加Assimp 3D模型后屏幕不更新[关闭]
【发布时间】:2013-07-20 03:09:46
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 发布您遇到错误的代码。程序在哪里冻结?

标签: opengl 3d vbo assimp


【解决方案1】:

以下是建议列表:

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

我确信您已经完成了很多这样的事情,但我也曾在执行此任务时遇到过棘手的问题。循序渐进将帮助您缩小问题范围。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我从来没有说 Assimp 是个问题,我只是说我在导入 assimp 模型时可能会出错。
    【解决方案3】:

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

    glBindVertexArray(0);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 2012-04-25
      • 2018-05-11
      • 1970-01-01
      • 2020-12-26
      • 2013-08-19
      相关资源
      最近更新 更多