如何管理和组织动态和静态几何图形

how manage and organize dynamic and static geometry

本文关键字:静态 几何图形 动态 何管理 管理      更新时间:2023-10-16

我需要一点关于如何在opengl中处理不同几何形状(静态,动态)的指南。

我试图开发一个图形引擎(作为一种学习),我对opengl有一些想法(我已经做了一些事情),我需要问一些谷歌没有回应的问题:

1 - 将所有几何数据存储在 VBO 中以便稍后绘制的正确方法是什么。我如何将这些数据组织到 vbo 中?我认为:

全部分离

->静态和动态数据

2 - 请记住,世界上有不同类型的 3D 几何形状 静态 , 动态 等,哪个是处理它们的最佳方法?动态元素应该有自己的 vbo 和 ibo,因为它们每帧都会更新,但静态元素应该被处理吗?

想象一下,游戏世界由 3 个静态立方体(具有相同的纹理)、五个静态圆锥体(每个圆锥体具有不同的纹理)、五个动态角色(3D 模型都不同,并且每帧都在变化)和 8 个静态 3D 模型(所有模型都不同)组成。如何使用 vbo 组织此几何图形?

我不是指使用顶点缓冲区对象(我知道),我喜欢您使用 vbo 对每个元素进行分组的方式:

即:3个立方体放在同一个vbo中,5个锥体放在其他分离的vbo中,等等

  • 如前所述,分离动态和静态可绘制数组(每个缓冲区GL_STATIC_DRAWGL_DYNAMIC_DRAW数据提示)
  • 使用GL_TRIANGLE_STRIP获得最佳顶点吞吐量
  • 可以将元素数组缓冲区用于具有大量共享顶点的几何图形,例如 GL_TRIANGLE_STRIP_ADJACENCY用于几何着色器。这可以节省内存带宽和/或 GPU 时间(顶点着色器阶段可能只处理一次共享顶点)
  • 每个模型可能存在 VCO,作为以后的优化,可以按数据生命周期和全局分区分配 VCO。
  • 首先,您可以实现两个简单的案例:
    • 静态可绘制对象模型
    • 动态可绘制模型
  • 但是,只要确保你的数据处理足够抽象,可以毫不费力地进行更改和扩展。
  • 最近提出的有关性能的问题,有关更多信息:使用 VAO 时,VBO 中的交错是否会加快性能