- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如何将 off-screen SCNScene
渲染到 UIImage
中?
我知道 SCNView
提供了一个 -snapshot
方法,但不幸的是,它不适用于离屏 View 。 similar question之前有人问过其中一个答案建议使用 glReadPixels
从 OpenGL 读取位图数据,但这种方法不适用于屏幕外场景。
我尝试使用 SCNRenderer
渲染到 GLKView
的上下文中,但没有成功。
最佳答案
带有 SCNRenderer 的 Swift 4:
您可以使用SCNRenderer 的快照方法轻松地将屏幕外的 SCNScene 渲染到 UIImage。
这里有一些注意事项,这使用了 Metal。我不知道设备/iOS 版本的截止点在哪里,但你需要更新的设备。您也无法在模拟器上运行它。
第 1 步 - 像往常一样设置场景:
// Set up your scene which won't be displayed
let hiddenScene = SCNScene()
[insert code to set up your nodes, cameras, and lights here]
第 2 步 - 设置 SCNRenderer——渲染器在模拟器上将为零:
// Set up the renderer -- this returns nil on simulator
let renderer = SCNRenderer(device: MTLCreateSystemDefaultDevice(), options: nil)
renderer!.scene = hiddenScene
第 3 步 - 将场景渲染到 UIImage:
// You can use zero for renderTime unless you are using animations,
// in which case, renderTime should be the current scene time.
let renderTime = TimeInterval(0)
// Output size
let size = CGSize(width:300, height: 150)
// Render the image
let image = renderer!.snapshot(atTime: renderTime, with: size,
antialiasingMode: SCNAntialiasingMode.multisampling4X)
如果您正在运行动画,则需要增加 renderTime 或将其设置为您要渲染的时间索引。例如,如果您想将帧渲染到场景中 4 秒,您可以将其设置为 4。这只会影响动画——它不会及时返回并向您显示场景的历史 View 。
例如,如果您正在使用 SCNNode.runAction 运行动画,您可能希望每 60 秒(0.16667 秒)保持递增 renderTime,这样无论何时您决定渲染,您都会得到一个更新的 renderTime:
var timer : Timer
var renderTime = TimeInterval(0)
timer = Timer.scheduledTimer(withTimeInterval: 0.016667, repeats: true, block: { (t) in
self?.renderTime += 0.016667
}
})
不过,使用 CADisplayLink 可能是更好的计时解决方案。
这是一个非常快速和肮脏的 implementation example .
关于ios - 将离屏 SCNScene 渲染到 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589151/
如何从 Android-Native-Screen 打开 flutter 屏幕? 我开了一个 Android-Native-Screen 从现有我们 flutter 项目 . 所以,在 Android
有人知道如何使用 java 和 google chrome 最大化 selenium webdriver 窗口吗? 我已经尝试过一些命令,例如maximize () window (),但没有成功。
Redmi A65 智能电视今天正式开卖,4K 超高清大屏 + 立体声扬声器,到手价 2599 元。 IT之家了解到,Redmi A65 智能电视搭载了一块 65 英寸 4K 屏,支持 HDR
9 月 26 日消息小米电视大师「至尊纪念版」将在 9 月 29 日发布,根据今天小米集团大家电部总经理李肖爽放出的海报显示,小米电视大师至尊版有两款。 小米电视大师「至尊纪念版」是小米首款
华为手环 6 今日在海外正式发布,英文名 Band 6。这款产品是华为手环 4 的升级版,屏幕尺寸由 0.96 英寸升级为 1.47 英寸 AMOLED 屏,分辨率 194 x 368。该手环外形类
我是一名优秀的程序员,十分优秀!