C++ 存储几何图形';s指数
我已经读了很多关于OpenGL的东西,我有一些关于“架构”的问题C++ 存储几何图形';s指数,c++,opengl,architecture,C++,Opengl,Architecture,我已经读了很多关于OpenGL的东西,我有一些关于“架构”的问题 OpenGL有缓冲区,所以在类中存储几何体的数据是有用的?我可以在实时OpenGL缓冲区中编辑,对吗 OpenGL索引缓冲区可以处理GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT和GL_UNSIGNED_INT,在我的类中如何管理这些不同的类型?我是否需要创建一个无符号int向量,一个短向量 管理索引的无符号int、无符号字节和无符号缩写有用吗?我这样问是因为只存储未签名的空头将不那么痛苦,并且可以允许大小型
关于你的问题:
glMapBuffer
或vairants)缓冲区通常需要将数据从GPU复制回CPU内存,或保留“卷影副本”在编辑后发送到GPU的CPU中的数据。无论哪种方式,编辑缓冲区中的数据都可能导致延迟
另一种编辑数据的方法(通常更好)是使用glBufferSubData
替换缓冲区的一部分,这可能有助于减少映射和取消映射缓冲区以进行交互式编辑的影响。此调用需要CPU内存中的数据数组,该数组将被复制到GPU以替换缓冲区中的数据。使用glBufferSubData
发送的数据量必须小于原始缓冲区的大小
关于在类中保存数据,如果要经常更改数据,那么最好的方法可能是保存本地副本,然后glBufferSubData
将其发送到GPU
GL\u UNSIGNED\u BYTE
索引只能访问256个顶点
同样,用于索引的数据类型实际上只对要访问的顶点数量重要,因此如果
GLushort
是最佳存储格式,那么就使用它 你问的只是设计选择的问题。最好是采用适合您需求的实现,只有在您无法处理某个功能时才进行更改。在这一点上,你将有一些工作,它将更容易作出改变,以支持新的东西。
我建议使用unsigned int
作为索引,索引缓冲区作为std::vector
直接存储在内存中,以便于使用
技术上,正确的术语是“DeStency”。我建议你在开始使用像OpenGL那样先进的东西之前,要充分学习和理解C++。而且,你几乎从不想使用无符号字节来存储索引。是否使用unsigned int或unsigned short取决于是否可以将所有内容都放入unsigned short。请使用尽可能最小的类型,但避免使用
GL\u unsigned\u BYTE
,它不是一种硬件友好的索引类型。使用较小的类型可以减少存储/总线通信量,这是一种双赢的方式,只要硬件支持该类型(16-/32位类型在桌面GPU上普遍受支持)。+1:但关于使用基于顶点数的“最合适类型”,请注意,我应该补充一点,桌面GPU不能为post-T&L缓存使用8位索引(它们只支持16/32位)。这通常意味着,如果使用8位元素数组,驱动程序将在运行时将元素填充到16位,并且从长远来看,您不会保存任何内存,只会为驱动程序添加额外的工作。在D3D中,甚至不支持8位索引,我认为在嵌入式图形设备上,硬件是否支持它们更是一个灰色地带。