添加Assimp 3D模型后,OpenGL,屏幕不会更新

时间:2013-07-21 06:25:18

标签: opengl 3d vbo assimp

我正在使用OpenGL 4.0,我的场景中有3件事,他们是 -
1- VBO平面
2-立方体地图
3- 3D模型[3ds / obj]

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

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

我的主要诊断是因为我使用VBO进行飞机,立方体贴图和3D模型我遇到了这个问题。

3 个答案:

答案 0 :(得分:2)

以下是建议清单:

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

我确信你已经完成了很多这些事情,但我也很难完成这项任务。逐步完成将帮助您缩小问题范围。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

渲染平面后,我忘了这样做 - >

glBindVertexArray(0);

之后,该计划就像一个魅力。