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

C++ 如何管理和组织动态和静态几何图形,c++,opengl,vbo,C++,Opengl,Vbo,我需要一些关于如何在opengl中处理不同几何图形(静态、动态)的指南 我试图开发一个图形引擎(作为学习),我对opengl有一些想法(我做了一些事情),我需要问一些google没有回答的问题: 1-在vbo中存储所有几何图形数据的正确方法是什么,以便以后绘制。如何将这些数据组织到vbo中?我认为: 一分为二 ->静态和动态数据 2-请记住,世界上有不同类型的3d几何图形,静态、动态等,哪种是处理它们的最佳方式?每个动态元素都应该有自己的vbo和ibo,因为它们在每一帧都会更新,但是静态元素应该

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

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

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

一分为二

->静态和动态数据

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

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

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

Ie:3个立方体放在同一个vbo中,5个锥体放在其他分离的vbo中,等等
  • 如上所述,分离动态和静态可绘制数组(
    GL\u STATIC\u DRAW
    GL\u dynamic\u DRAW
    数据提示,每个缓冲区)
  • 使用
    GL\u三角形\u条带
    获得最佳顶点吞吐量
  • 对于具有大量共享顶点的几何体,可以使用元素数组缓冲区,例如用于几何体着色器的
    GL\u TRIANGLE\u STRIP\u adjancy
    。这可以节省内存带宽和/或GPU时间(顶点着色器阶段可能只处理一次共享顶点)
  • VBO可能存在于每个模型中,作为以后的优化,可以在每个数据生命周期和世界分区的基础上分配VBO
  • 首先,您可以实现两个简单的案例:
    • 静态拉伸模型
    • 动态拉伸模型
  • 但是,请确保您的数据处理足够抽象,可以轻松地进行更改和扩展
  • 最近提出的有关性能的问题,有关更多信息:

  • 组织几何图形有什么帮助或想法吗?谢谢Sam,我帮了大忙!我只需要提出一个问题:你会在vbo中组织这个吗?3个静态立方体(具有相同的纹理),5个静态圆锥体(每个圆锥体具有不同的纹理),5个动态角色(所有3d模型都不同,每个帧中都有变化)和8个静态3d模型(所有模型都不同),我想知道我的想法是否正确。谢谢你是我!这个决定属于“数据生命周期和世界分区”类别。如果这些对象不是真正巨大的,并且是同时创建、绘制和销毁的,只需将它们紧急塞到单个缓冲区中即可。但是,与相当复杂的数据管理相比,中型对象的节省可以忽略不计。我基本上从每个对象一个VBO开始。然后,我将实现对象程序集类,稍后可能会使用共享缓冲区对其进行优化。