现在我正在测试ARKit/SceneKit实现.屏幕的基本渲染有点工作,所以我想尝试将我在屏幕上看到的内容录制成视频.
只是为了录制Scene Kit我找到了这个要点:
//
// ViewController.swift
// SceneKitToVideo
//
// Created by Lacy Rhoades on 11/29/16.
// Copyright © 2016 Lacy Rhoades. All rights reserved.
//
import SceneKit
import GPUImage
import Photos
class ViewController: UIViewController {
// Renders a scene (and shows it on the screen)
var scnView: SCNView!
// Another renderer
var secondaryRenderer: SCNRenderer?
// Abducts image data via an OpenGL texture
var textureInput: GPUImageTextureInput?
// Recieves image data from textureInput, shows it on screen
var gpuImageView: …Run Code Online (Sandbox Code Playgroud) 我想做一个在屏幕上显示AR并同时记录它的应用程序。最简单的想法是从iOS11的新屏幕录制功能中录制它,但是您无法控制录制行为,所以这不适合我。使用 ReplayKit 是一个好主意,我实际上尝试过,但我无法让它为未知错误工作。我也在以不同的方式研究这个问题,所以让我在这里排除这个话题。
作为我的选择之一,我采用的方法是使用 ARSCNView 进行查看,并在顶部使用单独的 SCNRenderer 专门用于记录。
这种方法看起来不错,因为它在屏幕上显示模型并记录到文件中。
但是渲染结果很奇怪,使用 SCNRenderer 的渲染结果不同,有点像隐藏平面去除不起作用。(见下图,角上的图是SCNRenderer的渲染结果,和记录到文件里的完全一样。)这里不能显示,但是动画也出错了。
当然,我打算以相同的方式为两者设置所有内容,但是还有其他设置参数或需要考虑的事项吗?还是给模型的方式不对?
场景/渲染器设置的代码如下所示。两个渲染器之间的同步是在 ARKit 的委托方法中完成的,这里没有展示。
// sceneView is instance variable, which is an ARSCNView
sceneView.delegate = self
//
// Create a empty scenes and wrapper nodes
//
sceneView.scene = SCNScene(named: "art.scnassets/scene.dae")!
secondaryScene = SCNScene(named: "art.scnassets/scene.dae")!
charNode = SCNNode();
sceneView.scene.rootNode.addChildNode(charNode)
charNode2 = SCNNode();
secondaryScene.rootNode.addChildNode(charNode2);
//
// Load the model
//
let url = Bundle.main.url(forResource: "art.scnassets/idle",withExtension: "dae");
let scene = try! SCNScene(url: url!, options: nil);
for child in idleScene.rootNode.childNodes {
charNode.addChildNode(child) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个简单的音乐音序器应用程序。这种应用程序倾向于具有必须保存/加载的复杂数据结构,因此Codable在Swift4中引入协议对我来说是个好消息。
我的问题是:我必须有一个非编码属性。它不必进行编码,因为它是一个临时变量,仅在应用程序处于活动状态时才保持活动状态。因此,我只是尝试通过实现来排除CodingKey,但编译器仍然给我错误“类型'Song'不符合协议'Decodable'”。
具体来说,我想在下面的代码中排除“ musicSequence”。
class Song : Codable { //Type 'Song' does not conform to protocol 'Decodable'
var songName : String = "";
var tempo : Double = 120;
// Musical structure
var tracks : [Track] = [] // "Track" is my custom class, which conforms Codable as well
// Tones
var tones = [Int : ToneSettings] (); // ToneSettings is also my custom Codable class
var musicSequence : MusicSequence? = nil; // I get the …Run Code Online (Sandbox Code Playgroud)