首页 > 解决方案 > 顶点缓冲区未正确清除

问题描述

语境

我是 3D 图形的初学者,我从 Vulkan 开始,我已经知道不建议保存它,目前正在从事一个大学项目,以开发基于 Vulkan API 的 3D 计算机图形引擎的基础。

问题

运行应用程序以呈现经典 2D 三角形的示例

绘制三角形后绘制 3D 网格

因此,正如您在上面的图片中看到的那样,我希望能够:

  1. 运行发动机。
  2. 选择要绘制的对象。
  3. 关闭窗口。
  4. 选择另一个要绘制的对象。
  5. 打开相同的窗口备份,只有最后一个选择的对象可见。

我一直这样做的方式是基本上清理整个交换链并在窗口关闭并选择新对象后从头开始重新创建它。现在我知道这对任何计算机图形工程师来说可能听起来像是恐怖主义,但我这样做的原因是因为我不知道更好的方法,我刚刚完成了 vulkan 教程。

尝试的解决方案

  1. 我已经检查了我是否在当前顶点缓冲区上执行了 vkDestroyBuffer 和 vkFreeMemory,然后在我选择不同的对象后再次重新创建它。
  2. 我完全禁用了深度测试,以防它与它有关,它没有。

注意:代码很广泛,我真的不知道它的哪一部分可能与问题相关,所以我选择不弄乱问题,如果有特定部分你认为它可能会帮助你找到解决方案请索取。

感谢您花时间阅读我的问题。

标签: c++3d2dvulkan

解决方案


user369070 的评论最终让我注意到了我用来读取 OBJ 文件的函数,这让我意识到这个函数没有清理我用来存储选择要绘制的对象的顶点的数据结构,然后再将它们传递给顶点缓冲区。

我只需要vertices = {};在函数顶部添加即可解决它。


推荐阅读