【问题标题】:Cocos3D - Take various screenshots in the backgroundCocos3D - 后台截取各种截图
【发布时间】:2014-12-19 13:42:13
【问题描述】:

使用Cocos3D,能否在用户不知情的情况下,在后台截取3D模型?

出于预处理目的和其他用途,我想从各个角度截取 3D 模型的屏幕截图。使用 Render-To-Texture 功能后,我注意到当我的场景不可见时,drawSceneContentWithVisitor: 方法只执行一次,而不是在每个渲染周期执行一次。由于显而易见的原因,CC3GLFramebuffer* 不会更新新数据,因此,我只能截取初始屏幕截图。

谢谢。

【问题讨论】:

    标签: cocos3d


    【解决方案1】:

    在 Cocos3D 中,您可以将 3D 场景渲染到屏幕外表面。有关如何执行此操作的示例,请参阅 CC3DemoMashUp addTelevision 和 drawSceneContentWithVisitor: 方法。

    重要的是在您进行绘图时已经建立了 3D 绘图环境。最安全的地方是在您的 drawSceneContentWithVisitor: 方法中。但是如果要在其他地方渲染,则需要在渲染前后调用CC3Scene open3DWithVisitor: 和CC3Scene close3DWithVisitor: 方法。有关如何执行此操作的示例,请参阅 CC3Scene processInitializeScene 和 open 方法的实现。

    要从多个视点渲染场景,您需要向场景中添加多个摄像机,并适当设置绘图访问者的camera 属性以在渲染前选择摄像机。看看这是如何在 CC3DemoMashUpScene addTelevision 和 drawToTVScreen 方法中完成的。 drawToTVScreen 方法还展示了如何处理清除表面的颜色和深度缓冲区。

    【讨论】:

    • 对不起,我的问题不是很清楚,你是对的,我们可以使用多个相机从多个视角渲染纹理。我真正想做的是在增量时间内渲染动画 3D 模型,而不是静态 3D 模型。即在 5 秒的时间段内,3D 模型可能会制作动画,并且会捕获 x 个图像。由于 drawSceneContentWithVisitor: 在后台运行时只执行一次,我无法为 3D 角色设置动画。
    • 如果我理解正确,您想创建一系列动画快照...有点像翻转动画?而且我猜您想将图像保存到字典或文件中?看看CC3DemoMashUpScene saveTVImage 方法。它从 TV 纹理(即渲染纹理)的当前内容创建 CGImageRef,并将其保存到文件中。该示例由触摸事件触发,但通过在您的 drawSceneContentWithVisitor: 方法中执行它(在纹理渲染之后),您可以在场景动画化时尽可能频繁地拍摄这些快照。
    • 实际上,动画是在后台进行的,目的是为了进行预处理。因为它在后台,所以 drawSceneContentWithVisitor: 方法只执行一次,而不是在每个渲染周期。
    • Bill,如何生成具有透明背景的图像?我关注了saveTVImage:,但我的图像背景要么是原始背景,要么是黑色。
    • 我阅读了您的其他帖子,但不幸的是,我对将透明度提取到 CGImageRef 和 PNG 文件中没有任何特别的见解。挑战似乎在于在createCGImageFrom: 和saveTVImage 方法的变体中设置CGImageRef 规范。您可以在一般 iOS 图像处理论坛或 Apple 的图像处理文档中找到更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多