gpt4 book ai didi

c++ - 存储几何的索引

转载 作者:行者123 更新时间:2023-11-28 03:07:49 24 4
gpt4 key购买 nike

我已经阅读了很多关于 OpenGL 的资料,并且对“架构”有一些疑问。

  1. OpenGL 有缓冲区,所以,将几何数据存储在一个类中有用吗?我可以在实时 OpenGL 缓冲区中进行编辑,对吗?
  2. OpenGL 索引缓冲区可以处理 GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT 和 GL_UNSIGNED_INT,在我的类(class)中我如何管理这些不同的类型?我是否需要创建一个 unsigned int vector ,一个 short vector ,...?
  3. 管理 unsigned int、unsigned byte 和 unsigned short 索引有用吗?我这样问是因为只存储 unsigned short 会更轻松,并且可以允许小型和大型模型。

最佳答案

关于您的问题:

  1. OpenGL have Buffers, so, it is usefull to store geometry's data in a class? I can edit in live OpenGL buffers, right?

这取决于您打算多久更新一次数据,以及您使用的 GPU 类型。如果您使用的是独立的“桌面”GPU(例如,NVIDIA 或 ATI/AMD),OpenGL 缓冲区会分配到显卡的内存中,并且通常会编辑(通过调用 glMapBuffer 或 vairants)缓冲区需要将数据从 GPU 复制回 CPU 的内存,或者在 CPU 中保留数据的“影子拷贝”,编辑后发送到 GPU。无论哪种方式,您都可能会因编辑缓冲区中的数据而导致延迟。

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

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

  1. OpenGL index buffers can handle GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT and GL_UNSIGNED_INT, in my class how can I manage this different types? Did I need to create one vector of unsigned int, one vector of short, …?

不,根据需要索引的顶点数量,您只需要一个最合适类型的缓冲区。例如,您只能使用 GL_UNSIGNED_BYTE 索引访问 256 个顶点。

  1. Is it useful to manage unsigned int, unsigned byte and unsigned short for indices? I'm asking that because storing just unsigned short would be less painfull and could allow small and big models.

再一次强调,您用于索引的数据类型实际上只对您要访问的顶点数量很重要,所以如果 GLushort 是最好的存储格式,那就选择它吧。

关于c++ - 存储几何的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19266261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com