c++ - 顶点缓冲区未正确清除
问题描述
语境
我是 3D 图形的初学者,我从 Vulkan 开始,我已经知道不建议保存它,目前正在从事一个大学项目,以开发基于 Vulkan API 的 3D 计算机图形引擎的基础。
问题
因此,正如您在上面的图片中看到的那样,我希望能够:
- 运行发动机。
- 选择要绘制的对象。
- 关闭窗口。
- 选择另一个要绘制的对象。
- 打开相同的窗口备份,只有最后一个选择的对象可见。
我一直这样做的方式是基本上清理整个交换链并在窗口关闭并选择新对象后从头开始重新创建它。现在我知道这对任何计算机图形工程师来说可能听起来像是恐怖主义,但我这样做的原因是因为我不知道更好的方法,我刚刚完成了 vulkan 教程。
尝试的解决方案
- 我已经检查了我是否在当前顶点缓冲区上执行了 vkDestroyBuffer 和 vkFreeMemory,然后在我选择不同的对象后再次重新创建它。
- 我完全禁用了深度测试,以防它与它有关,它没有。
注意:代码很广泛,我真的不知道它的哪一部分可能与问题相关,所以我选择不弄乱问题,如果有特定部分你认为它可能会帮助你找到解决方案请索取。
感谢您花时间阅读我的问题。
解决方案
user369070 的评论最终让我注意到了我用来读取 OBJ 文件的函数,这让我意识到这个函数没有清理我用来存储选择要绘制的对象的顶点的数据结构,然后再将它们传递给顶点缓冲区。
我只需要vertices = {};
在函数顶部添加即可解决它。
推荐阅读
- c# - 隐藏所有 LibVLCSharp 元素
- java - 以编程方式为 moveTo 块选择目标节点
- python - 在 python 上合并 Netcdf 文件
- redis - 如何从 redis 3.0.2 迁移到 redis 4 或 redis 5
- javascript - 使用 RegEX JavaScript 捕获变量名称?
- javascript - 如何根据沙盒向我的 crud 添加撤消功能?
- javascript - 将输出命令与 javascript 一起使用时,如何获得换行符?
- sql - 如何确保从特定表中仅选择第一条记录,该表可以在 DB2 中创建多个相同 ID 的记录
- mysql - 如何在 Mysql 中使用 Sql 从表中查找丢失的数据?
- geometry - 在正方形上找到给定 3 个点的原点