我需要做一个如何接近一个应用程序的设计决定,这需要渲染一个图像纹理上的一些3D对象。结果需要呈现并另存为UIImage。图形化设计(客户端)期望标准的UIKit控件能够操纵3D世界。
OpenGL视图(CAEAGLLayer层)需要在UIScrollView中实现廉价和自然的滚动和缩放。只有几个额外的控件来操纵少数3D对象的旋转、缩放和过渡。不需要太多三角形(最多100-200个)和2-3个纹理(1个蒙版)。它甚至不需要不断刷新,只需在某些转换和缩放发生变化时即可。CAEAGLLayer不需要是不透明的。
我会使用核心动画解决方案,但不支持将3D变换的CALayers渲染为CGContextRef (也不支持蒙版)。
将CAEAGLLayer放入UIScrollView中并将其与少量UIKit视图混合使用时,实际的性能成本是多少?我可以期望每秒渲染多少三角形以平滑的帧速率(30fps就可以了),这样我就可以做出最好的决定了?
我知道已经有类似的问题了,但没有一个答案提供了具体的数字,这可能有助于估计预期的渲染结果。
发布于 2012-03-15 08:18:43
根据Allan Schaffer的说法,OpenGL本身并不是一个特例--任何改变都会导致它上面的一切重新组合。我特别和他谈到了一个应用程序,在实时更新的OpenGL视图下有一个实时更新的视频视图,他说这种事情是病态的最坏的情况。在顶部抛出几个非常静态的视图通常不是很昂贵,比如使用UILabel在OpenGL游戏上显示当前比分。
在您的情况下,我认为您可能可以在很大程度上避免这个问题。不要将GL视图放在滚动视图中,而是使滚动视图不透明,并将GL视图放在它后面。捕获scrollViewDidScroll: (以及相应的缩放消息)并进行相关的OpenGL调整。根据我的经验,我可以说我已经在iPad 1上做到了这一点,没有任何性能问题。特别是对于你所说的那种模型,我想不会有问题。
https://stackoverflow.com/questions/9712043
复制相似问题