Я хотел бы иметь возможность добавлять фигуры на поверхность сферы с помощью SceneKit
. Я начал с простого примера, когда я просто пытаюсь покрасить часть поверхности сферы другим цветом. Я хотел бы, чтобы это был объект, который можно использовать, выбран и т. Д., Поэтому я думал о добавлении фигур как SCNNodes
с использованием пользовательских объектов SCNShape
для геометрии.Добавить фигуру на поверхность сферы в SceneKit
У меня теперь синий квадрат, который я рисую из серии очков и добавляю к сцене, содержащей красную сферу. Это в основном заканчивается касательной к точке на сфере, но реальная цель - нарисовать ее на поверхности. Есть ли что-нибудь в SceneKit, которое позволит мне это сделать? Нужно ли мне делать математику/геометрию, чтобы сделать ее той же формой, что и сфера, или отобразить координаты сферы? Это то, что я пытаюсь сделать за пределами SceneKit?
Если этот вопрос слишком широк, я был бы рад, если бы кто-нибудь мог указать мне на книги или ресурсы, чтобы узнать, что мне не хватает. Я абсолютно новичок в SceneKit и 3D в целом, просто повеселюсь, играя с некоторыми идеями.
Вот некоторые площадки код для того, что я сейчас:
import UIKit
import SceneKit
import XCPlayground
class SceneViewController: UIViewController {
let sceneView = SCNView()
private lazy var sphere: SCNSphere = {
let sphere = SCNSphere(radius: 100.0)
sphere.materials = [self.surfaceMaterial]
return sphere
}()
private lazy var testScene: SCNScene = {
let scene = SCNScene()
let sphereNode: SCNNode = SCNNode(geometry: self.sphere)
sphereNode.addChildNode(self.blueChildNode)
scene.rootNode.addChildNode(sphereNode)
//scene.rootNode.addChildNode(self.blueChildNode)
return scene
}()
private lazy var surfaceMaterial: SCNMaterial = {
let material = SCNMaterial()
material.diffuse.contents = UIColor.redColor()
material.specular.contents = UIColor(white: 0.6, alpha: 1.0)
material.shininess = 0.3
return material
}()
private lazy var blueChildNode: SCNNode = {
let node: SCNNode = SCNNode(geometry: self.blueGeometry)
node.position = SCNVector3(0, 0, 100)
return node
}()
private lazy var blueGeometry: SCNShape = {
let points: [CGPoint] = [
CGPointMake(0, 0),
CGPointMake(50, 0),
CGPointMake(50, 50),
CGPointMake(0, 50),
CGPointMake(0, 0)]
var pathRef: CGMutablePathRef = CGPathCreateMutable()
CGPathAddLines(pathRef, nil, points, points.count)
let bezierPath: UIBezierPath = UIBezierPath(CGPath: pathRef)
let shape = SCNShape(path: bezierPath, extrusionDepth: 1)
shape.materials = [self.blueNodeMaterial]
return shape
}()
private lazy var blueNodeMaterial: SCNMaterial = {
let material = SCNMaterial()
material.diffuse.contents = UIColor.blueColor()
return material
}()
override func viewDidLoad() {
super.viewDidLoad()
sceneView.frame = self.view.bounds
sceneView.backgroundColor = UIColor.blackColor()
self.view.addSubview(sceneView)
sceneView.autoenablesDefaultLighting = true
sceneView.allowsCameraControl = true
sceneView.scene = testScene
}
}
XCPShowView("SceneKit", view: SceneViewController().view)
Просматривая ящик с наборами яблок с их исходным кодом, я вижу, что они фактически используют диффузный контент как «SKScene», но я не могу его воссоздать. Есть ли у вас какие-либо идеи относительно того, как вы собираетесь устанавливать диффузное содержимое в виде skscene? –