顶点缓冲区未正确清除
Vertex buffer not clearing properly
上下文
我是 3D 图形的初学者,我刚开始使用 Vulkan,我已经知道不推荐使用它,请保存它,目前正在从事一个大学项目,以开发基于 3D 计算机图形引擎的基础在 Vulkan 上 API.
问题
Example of running the app to render the classic 2D triangle
Drawing a 3D mesh after having drawn the triangle
正如您在上图中看到的那样,我希望能够:
- 运行 引擎。
- 选择要绘制的对象。
- 关闭 window.
- 选择另一个要绘制的对象。
- 打开相同的 window 备份,只有最后一个选择的对象可见。
而我一直这样做的方法是,一旦 window 关闭并选择了一个新对象,就基本上清理整个交换链并从头开始重新创建它。现在我知道这对任何计算机图形工程师来说可能听起来像是恐怖主义,但我这样做的原因是因为我不知道更好的方法,我刚刚完成了 vulkan 教程。
尝试过的解决方案
- 我已经检查过我在当前顶点缓冲区上执行了 vkDestroyBuffer 和 vkFreeMemory,然后在我选择不同的对象后再次重新创建它。
- 我完全禁用了深度测试以防它与它有关,但事实并非如此。
注意:代码很长,我真的不知道它的哪一部分可能与问题相关,所以我选择不把问题弄乱,如果有特定部分您认为它可以帮助您找到解决方案,请请求它。
感谢您花时间阅读我的问题。
user369070 的评论最终引起了我对我用来读取 OBJ 文件的函数的注意,这让我意识到这个函数并没有清理我用来存储选择要绘制的对象的顶点的数据结构在将它们传递到顶点缓冲区之前。
我只需要在函数的顶部添加vertices = {};
就可以解决它。
上下文
我是 3D 图形的初学者,我刚开始使用 Vulkan,我已经知道不推荐使用它,请保存它,目前正在从事一个大学项目,以开发基于 3D 计算机图形引擎的基础在 Vulkan 上 API.
问题
Example of running the app to render the classic 2D triangle
Drawing a 3D mesh after having drawn the triangle
正如您在上图中看到的那样,我希望能够:
- 运行 引擎。
- 选择要绘制的对象。
- 关闭 window.
- 选择另一个要绘制的对象。
- 打开相同的 window 备份,只有最后一个选择的对象可见。
而我一直这样做的方法是,一旦 window 关闭并选择了一个新对象,就基本上清理整个交换链并从头开始重新创建它。现在我知道这对任何计算机图形工程师来说可能听起来像是恐怖主义,但我这样做的原因是因为我不知道更好的方法,我刚刚完成了 vulkan 教程。
尝试过的解决方案
- 我已经检查过我在当前顶点缓冲区上执行了 vkDestroyBuffer 和 vkFreeMemory,然后在我选择不同的对象后再次重新创建它。
- 我完全禁用了深度测试以防它与它有关,但事实并非如此。
注意:代码很长,我真的不知道它的哪一部分可能与问题相关,所以我选择不把问题弄乱,如果有特定部分您认为它可以帮助您找到解决方案,请请求它。
感谢您花时间阅读我的问题。
user369070 的评论最终引起了我对我用来读取 OBJ 文件的函数的注意,这让我意识到这个函数并没有清理我用来存储选择要绘制的对象的顶点的数据结构在将它们传递到顶点缓冲区之前。
我只需要在函数的顶部添加vertices = {};
就可以解决它。