从 iPhone 上的 VBO 读取数据
Posted
技术标签:
【中文标题】从 iPhone 上的 VBO 读取数据【英文标题】:reading data back from VBO on iPhone 【发布时间】:2011-05-10 15:06:26 【问题描述】:我的应用程序将我的所有几何数据写入 VBO 以提高性能,但我需要在程序执行期间读取顶点数据以进行射线三角形相交测试。我注意到有一个函数应该映射到 VBO 数据的位置,glMapBufferOES,但它看起来只支持 GL_READ_ONLY。有谁知道绑定后在 iPhone 上读回 VBO 数据的方法?
【问题讨论】:
我从来没有见过这样的功能。如果 VBO 已加载到 GPU 内存中并被驱动程序丢弃,则读取 VBO 的成本会很高。你有多少个顶点? 300 万个顶点,但分布在 950 多个模型上。我遇到的问题是,如果我上传我的 VBO 以提高性能,那么我在 iPhone 和 iPad 上没有足够的 RAM 来将顶点也保存在本地数组中。显示我的大对象的唯一方法是只有一个顶点副本。如果我不做VBO,那么渲染速度是不能接受的。每次执行检查时,我都使用颜色 ID 仅对单个模型进行射线三角形测试,这只是偶尔。 ios 设备的基于 tile 的延迟渲染器上的任何读取操作都会非常慢,因为它会停止渲染管道(这样做可能会使帧速率降低 20% 以上)。此外,当 VBO 仍存在于 GPU 上时,您不会通过重新加载几何图形而导致内存峰值过高吗? 我假设顶点不是静态的,你不能对它们进行内存映射。是这样吗? 顶点是静态的,我不需要在执行过程中修改它们,只需将值读回来,这样我就可以进行交叉测试了。我将如何进行顶点的内存映射? 【参考方案1】:保存文件名,以便在需要时从文件中加载顶点,进行测试,然后再次清除。这与 Apple 指示您在为 iOS 设备进行开发时尽可能多地做的事情相一致。存储速度惊人。
【讨论】:
很高兴听到我们得出了相同的结论。它比我预期的要快得多。【参考方案2】:我想出了如何做到这一点。因为我不是每帧都这样做,所以我只是从我最初读入的文件中读取我选择的模型的顶点,执行射线三角形相交测试,然后再次清除顶点数组。在小型模型上,延迟是难以察觉的。在 100 万个多边形上,有半秒的延迟,这对我的目的来说是可以接受的。
【讨论】:
以上是关于从 iPhone 上的 VBO 读取数据的主要内容,如果未能解决你的问题,请参考以下文章
iphone,objective c,如何从音频文件中读取原始数据(未应用编解码器)
在 iPhone 中使用 Tesseract OCR 从驾驶执照中读取数据