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

Posted

技术标签:

【中文标题】如何管理和组织动态和静态几何【英文标题】:how manage and organize dynamic and static geometry 【发布时间】:2013-11-15 23:23:08 【问题描述】:

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

我正在尝试开发图形引擎(作为学习),我对opengl有一些想法(我做过一些事情),我需要问一些google没有回应的问题:

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

全部分开

-> 静态和动态数据

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

假设游戏世界由 3 个静态立方体(具有相同纹理)、5 个静态锥体(每个具有不同纹理)、5 个动态角色(3d 模型各不相同,并且在每一帧中变化)和 8 个 3d模型静态(所有模型都是不同的)。你如何使用 vbo 组织这些几何图形??

我不提及顶点缓冲区对象的使用(我知道),我喜欢你如何使用 vbo 对每个元素进行分组:

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

【问题讨论】:

对组织几何有任何帮助或想法吗?? 【参考方案1】: 如上所述分离动态和静态可绘制数组(GL_STATIC_DRAWGL_DYNAMIC_DRAW 数据提示,每个缓冲区) 使用GL_TRIANGLE_STRIP 以获得最佳顶点吞吐量 可以将元素数组缓冲区用于具有大量共享顶点的几何图形,例如GL_TRIANGLE_STRIP_ADJACENCY 用于几何着色器。这可以节省内存带宽和/或 GPU 时间(顶点着色器阶段可能只处理一次共享顶点) 每个模型可能存在 VBO,作为以后的优化,可以基于每个数据生命周期和世界分区分配 VBO。 首先,您可以实现两个简单的案例: 静态可绘制模型 动态可绘制模型 但是,请确保您的数据处理已经足够抽象,可以轻松更改和扩展。 最近提出的关于性能的问题,更多信息:Does interleaving in VBOs speed up performance when using VAOs

【讨论】:

谢谢山姆,我帮了大忙!我只需要提出一个问题:你会在 vbo 中组织这个吗?3 个静态立方体(具有相同的纹理)、5 个静态锥体(每个具有不同的纹理)、5 个动态角色(3d 模型都不同,并且改变在每一帧中)和 8 个静态 3d 模型(所有模型都是不同的)我想知道我的想法是否正确。谢谢! 欢迎您!该决定将属于“数据生命周期和世界分区”类别。如果这些对象不是真的很大并且是一次创建、绘制和销毁的,只需将它们放入一个缓冲区即可。然而,与相当复杂的数据管理相反,中型对象的节省是相当微不足道的。我基本上会从每个对象一个 VBO 开始。然后,我将实现对象组装类,稍后可能会使用共享缓冲区对其进行优化。

以上是关于如何管理和组织动态和静态几何的主要内容,如果未能解决你的问题,请参考以下文章

在几何画板中切割三棱锥的方法

需要帮助组织 BSP 几何渲染的类型差异

tkinter的三种几何布局管理类

ArcGIS如何获取地理要素的几何属性

Direct3d 和 hlsl 不同大小的顶点和多维几何对象?

sierpinski地毯几何画板怎么做