存储几何图形的索引
Store geometry's indices
我读过很多关于OpenGL的东西,也有一些关于"架构"的问题。
- OpenGL有缓冲区,那么,将几何数据存储在类中有用吗?我可以在实时 OpenGL 缓冲区中进行编辑,对吧?
- OpenGL 索引缓冲区可以处理GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT和GL_UNSIGNED_INT,在我的课堂上,我如何管理这种不同的类型?我是否需要创建一个无符号 int 向量,一个 short 向量,...?
- 管理索引的无符号整数、无符号字节和无符号缩写是否有用?我之所以这么问,是因为只存储未签名的短模型会不那么痛苦,并且可以允许大小模型。
关于您的问题:
- OpenGL有缓冲区,那么,将几何数据存储在类中有用吗?我可以在实时 OpenGL 缓冲区中进行编辑,对吧?
这取决于您打算更新数据的频率以及您使用的 GPU 类型。 如果您使用的是独立的"桌面"GPU(例如,NVIDIA 或 ATI/AMD(,OpenGL 缓冲区会分配给显卡的内存,编辑(通过调用 glMapBuffer
或 vairants(缓冲区通常需要将数据从 GPU 复制回 CPU 的内存,或者在 CPU 中保留数据的"卷影副本",该副本在编辑后发送到 GPU。 无论哪种方式,编辑缓冲区中的数据都可能导致延迟。
编辑数据的另一种(通常更好(方法是使用 glBufferSubData
替换缓冲区的一部分,这可能有助于减少映射和取消映射缓冲区以进行交互式编辑的影响。 此调用需要 CPU 内存中的数据数组,这些数据将被复制到 GPU 以替换缓冲区中的数据。 可以使用glBufferSubData
发送的数据量必须小于原始缓冲区的大小。
关于将数据保存在类中,如果您要经常更改数据,那么最好的方法可能是保留本地副本,然后glBufferSubData
将其发送到 GPU。
- OpenGL 索引缓冲区可以处理GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT和GL_UNSIGNED_INT,在我的课堂上,我如何管理这种不同的类型?我是否需要创建一个无符号 int 向量,一个 short 向量,...?
不需要,您只需要一个最合适类型的缓冲区,具体取决于您需要索引的顶点数。 例如,您只能使用 GL_UNSIGNED_BYTE
索引访问 256 个折点。
- 管理索引的无符号整数、无符号字节和无符号缩写是否有用?我之所以这么问,是因为只存储未签名的短模型会不那么痛苦,并且可以允许大小模型。
再一次,您用于索引的数据类型实际上只对您想要访问的顶点数量很重要,因此GLushort
是最好的存储格式,那就去做吧。
你问的只是一个设计选择的问题。最好选择适合您需求的实现,并且仅在您无法处理功能时才进行更改。在这一点上,您将有一些工作,并且更容易进行更改以支持新内容。我建议将unsigned int
用作索引,将索引缓冲区用作直接在内存中的std::vector<unsigned int>
,以便于使用。
拉兹万。
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 跟随整数索引列表的自定义类迭代器
- 如何在for循环中包含两个索引值的测试条件
- D3D11-将混合权重和索引传递到顶点着色器
- 将转换字符键入 int 以用作向量C++的索引
- 在 C++ 中访问数组负索引处的内存不会返回垃圾
- 如何为圆环创建索引
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- 查找字符在两个索引之间出现的次数
- Azure Kinect 使用正文索引映射裁剪正文
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 数组索引重载错误
- 存储几何图形的索引