我正在做一个 iOS 游戏,并想使用这种方法进行碰撞检测。
由于有很多(50+)点要检查每一帧,我想知道这种方法是否在 iDevice 的图形硬件上运行。
跟进@DavidRönnqvist 的观点:是否“硬件加速”并不重要。重要的是它是否足够快以满足您的目的,然后您可以使用 Instruments 检查它在哪里吃饭并尝试改进。
将代码移至 GPU 不会自动使其更快;事实上,它可以让它变得更慢,因为你必须将所有数据拖到 GPU 内存中,这很昂贵。理想情况下,要在 GPU 上运行,您希望将所有数据移动一次,然后执行大量昂贵的矢量操作,然后将数据移回(或只是将其放在屏幕上)。如果你不能让问题看起来像那样,那么 GPU 不是正确的工具。
它可能是 NEON 加速的,但这又是无关紧要的;编译器 NEON 加速了很多事情(在 NEON 上运行并不总是意味着它运行得更快)。也就是说,如果您可以针对相同的曲线测试大量点(数百或数千),我敢打赌这种问题在 NEON 上运行得最好。
对于“我有一条随机曲线和一个随机点”的一般情况,您应该假设它CGPathContainsPoint()
的编写速度非常快。如果您的问题看起来像这样,您似乎不太可能在他们自己的硬件上击败 Apple 工程师(50 分不超过 1)。例如,我假设他们已经在为您检查边界框并且您的重新检查是在浪费时间(但我会确定它的轮廓)。
但是,如果您可以将问题更改为其他内容,例如“我有一条已知曲线和数万个点”,那么您可能可以手动编写更好的解决方案,并且应该查看 Accelerate 甚至手写 NEON 来攻击它.
先分析,再优化。即使您的问题是“数学”,也不要假设“矢量处理器”完全等同于“快速”。图形处理器更是如此。