存储几何图形的索引

Store geometry's indices

本文关键字:索引 几何图形 存储      更新时间:2023-10-16

我读过很多关于OpenGL的东西,也有一些关于"架构"的问题。

  1. OpenGL有缓冲区,那么,将几何数据存储在类中有用吗?我可以在实时 OpenGL 缓冲区中进行编辑,对吧?
  2. OpenGL 索引缓冲区可以处理GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT和GL_UNSIGNED_INT,在我的课堂上,我如何管理这种不同的类型?我是否需要创建一个无符号 int 向量,一个 short 向量,...?
  3. 管理索引的无符号整数、无符号字节和无符号缩写是否有用?我之所以这么问,是因为只存储未签名的短模型会不那么痛苦,并且可以允许大小模型。

关于您的问题:

  1. OpenGL有缓冲区,那么,将几何数据存储在类中有用吗?我可以在实时 OpenGL 缓冲区中进行编辑,对吧?

这取决于您打算更新数据的频率以及您使用的 GPU 类型。 如果您使用的是独立的"桌面"GPU(例如,NVIDIA 或 ATI/AMD(,OpenGL 缓冲区会分配给显卡的内存,编辑(通过调用 glMapBuffer 或 vairants(缓冲区通常需要将数据从 GPU 复制回 CPU 的内存,或者在 CPU 中保留数据的"卷影副本",该副本在编辑后发送到 GPU。 无论哪种方式,编辑缓冲区中的数据都可能导致延迟。

编辑数据的另一种(通常更好(方法是使用 glBufferSubData 替换缓冲区的一部分,这可能有助于减少映射和取消映射缓冲区以进行交互式编辑的影响。 此调用需要 CPU 内存中的数据数组,这些数据将被复制到 GPU 以替换缓冲区中的数据。 可以使用glBufferSubData发送的数据量必须小于原始缓冲区的大小。

关于将数据保存在类中,如果您要经常更改数据,那么最好的方法可能是保留本地副本,然后glBufferSubData将其发送到 GPU。

  1. OpenGL 索引缓冲区可以处理GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT和GL_UNSIGNED_INT,在我的课堂上,我如何管理这种不同的类型?我是否需要创建一个无符号 int 向量,一个 short 向量,...?

不需要,您只需要一个最合适类型的缓冲区,具体取决于您需要索引的顶点数。 例如,您只能使用 GL_UNSIGNED_BYTE 索引访问 256 个折点。

  1. 管理索引的无符号整数、无符号字节和无符号缩写是否有用?我之所以这么问,是因为只存储未签名的短模型会不那么痛苦,并且可以允许大小模型。

再一次,您用于索引的数据类型实际上只对您想要访问的顶点数量很重要,因此GLushort是最好的存储格式,那就去做吧。

你问的只是一个设计选择的问题。最好选择适合您需求的实现,并且仅在您无法处理功能时才进行更改。在这一点上,您将有一些工作,并且更容易进行更改以支持新内容。我建议将unsigned int用作索引,将索引缓冲区用作直接在内存中的std::vector<unsigned int>,以便于使用。

拉兹万。