如何管理和组织动态和静态几何图形
how manage and organize dynamic and static geometry
我需要一点关于如何在opengl中处理不同几何形状(静态,动态)的指南。
我试图开发一个图形引擎(作为一种学习),我对opengl有一些想法(我已经做了一些事情),我需要问一些谷歌没有回应的问题:
1 - 将所有几何数据存储在 VBO 中以便稍后绘制的正确方法是什么。我如何将这些数据组织到 vbo 中?我认为:
全部分离
->静态和动态数据
2 - 请记住,世界上有不同类型的 3D 几何形状 静态 , 动态 等,哪个是处理它们的最佳方法?动态元素应该有自己的 vbo 和 ibo,因为它们每帧都会更新,但静态元素应该被处理吗?
想象一下,游戏世界由 3 个静态立方体(具有相同的纹理)、五个静态圆锥体(每个圆锥体具有不同的纹理)、五个动态角色(3D 模型都不同,并且每帧都在变化)和 8 个静态 3D 模型(所有模型都不同)组成。如何使用 vbo 组织此几何图形?
我不是指使用顶点缓冲区对象(我知道),我喜欢您使用 vbo 对每个元素进行分组的方式:
即:3个立方体放在同一个vbo中,5个锥体放在其他分离的vbo中,等等
- 如前所述,分离动态和静态可绘制数组(每个缓冲区
GL_STATIC_DRAW
和GL_DYNAMIC_DRAW
数据提示) - 使用
GL_TRIANGLE_STRIP
获得最佳顶点吞吐量 - 可以将元素数组缓冲区用于具有大量共享顶点的几何图形,例如
GL_TRIANGLE_STRIP_ADJACENCY
用于几何着色器。这可以节省内存带宽和/或 GPU 时间(顶点着色器阶段可能只处理一次共享顶点) - 每个模型可能存在 VCO,作为以后的优化,可以按数据生命周期和全局分区分配 VCO。
- 首先,您可以实现两个简单的案例:
- 静态可绘制对象模型
- 动态可绘制模型
- 但是,只要确保你的数据处理足够抽象,可以毫不费力地进行更改和扩展。
- 最近提出的有关性能的问题,有关更多信息:使用 VAO 时,VBO 中的交错是否会加快性能
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 如何管理和组织动态和静态几何图形