首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储几何学指数

存储几何学指数
EN

Stack Overflow用户
提问于 2013-10-09 08:01:05
回答 2查看 360关注 0票数 0

我读过很多关于OpenGL的文章,我也有一些关于“架构”的问题。

  1. OpenGL有缓冲区,所以,在类中存储几何数据是有用的吗?我可以在实时OpenGL缓冲区中编辑,对吗?
  2. OpenGL索引缓冲区可以处理GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT和GL_UNSIGNED_INT,在我的类中,如何管理这些不同的类型?我是否需要创建一个无符号int向量,一个short向量,…?
  3. 管理无符号int、无符号字节和无符号索引是否有用?我是这样问的,因为仅仅存储未签名的短消息就不那么痛苦了,而且可以允许小的和大的模型。
EN

回答 2

Stack Overflow用户

发布于 2013-10-09 14:33:17

关于你的问题:

  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. 管理无符号int、无符号字节和无符号索引是否有用?我是这样问的,因为仅仅存储未签名的短消息就不那么痛苦了,而且可以允许小的和大的模型。

同样,用于索引的数据类型实际上只对要访问多少个顶点很重要,所以如果GLushort是最好的存储格式,那么就选择它。

票数 2
EN

Stack Overflow用户

发布于 2013-10-09 14:35:34

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

拉兹文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19266261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档