- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人让 SCNMorpher 工作吗?如果是这样,你到底做了什么?
我现在正在执行一个小型测试程序,它应该显示一个红色圆锥体,当我点击屏幕时,它应该(应该!)将其变形为一个球体/球。但唯一发生的事情是,第一个几何体消失了(变得非常小),而第二个几何体(Morphers 第一个目标)从未出现。
我必须错过一些非常简单的事情。有人可以帮我上马吗?
import SceneKit
private let DISTANCE_FAKTOR = CGFloat(sqrt(3.0)/2.0)
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let (scene, view) = configScene(self.view.frame)
self.view = view
// Position camera to see picture full screen and light at same position
let pov = SCNVector3(x: 0.0, y: 0.0, z: Float(max(view.frame.width, view.frame.height) * DISTANCE_FAKTOR))
let pol = SCNVector3(x: 0.0, y: 0.0, z: Float(max(view.frame.width, view.frame.height) * DISTANCE_FAKTOR))
scene.rootNode.addChildNode(makeShapes()) // Create and add background plane
scene.rootNode.addChildNode(makeCamera(pov)) // Add camera to scene
scene.rootNode.addChildNode(makeLight(pol)) // Add light to scene
// add a tap gesture recognizer
view.gestureRecognizers = [UITapGestureRecognizer(target: self, action: "handleTap:")]
}
func handleTap(gestureRecognize: UIGestureRecognizer) {
NSLog("Tapped")
if let effectNode = (view as? SCNView)?.scene?.rootNode.childNodeWithName("EFFECT", recursively: true) {
NSLog("Animating")
animate(effectNode)
}
}
func makeShapes() -> SCNNode {
// First shape is a cone
let torus = SCNCone(topRadius: 0.0, bottomRadius: view.frame.width/2.0, height: view.frame.width/4.0)
torus.firstMaterial = SCNMaterial()
torus.firstMaterial?.diffuse.contents = UIColor.redColor()
// Now an additional sphere/ball
let sphere = SCNSphere(radius: view.frame.width/2.0)
sphere.firstMaterial = SCNMaterial()
sphere.firstMaterial?.diffuse.contents = UIColor.greenColor()
// Put all in the node
let node = SCNNode()
node.geometry = torus
node.morpher = SCNMorpher()
node.morpher?.targets = [sphere]
node.name = "EFFECT"
// I would expect now something between a ball and a torus in red/green
node.morpher?.setWeight(0.5, forTargetAtIndex: 0)
return node
}
func animate(node: SCNNode) {
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(5.0)
node.morpher?.setWeight(1.0, forTargetAtIndex: 0) // From torus to ball
SCNTransaction.setCompletionBlock {
NSLog("Transaction completing")
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(2.5)
node.morpher?.setWeight(0.0, forTargetAtIndex: 0) // And back
SCNTransaction.commit()
}
SCNTransaction.commit()
}
func configScene(frame: CGRect) -> (scene: SCNScene, view: SCNView) {
let view = SCNView()
view.frame = frame
view.autoresizingMask = UIViewAutoresizing.allZeros
view.backgroundColor = UIColor.blueColor()
let scene = SCNScene()
view.scene = scene
return (scene, view)
}
func makeCamera(pov: SCNVector3) -> SCNNode {
let camera = SCNCamera()
camera.zFar = Double(pov.z)
let node = SCNNode()
node.position = pov
node.camera = camera
return node
}
func makeLight(pol: SCNVector3) -> SCNNode {
let light = SCNLight()
light.type = SCNLightTypeOmni
light.zFar = CGFloat(pol.z)
let node = SCNNode()
node.position = pol
node.light = light
return node
}
override func shouldAutorotate() -> Bool {
return true
}
override func prefersStatusBarHidden() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> Int {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
} else {
return Int(UIInterfaceOrientationMask.All.rawValue)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
}
当我在代码中交换球和圆锥时,我可以看到球并在点击屏幕时消失,但圆锥从未出现。如果你想运行这段代码,只需在 Xcode 中创建一个新的 GameScene 项目并将这段代码复制到 GameViewController.swift
最佳答案
Has anybody got the SCNMorpher to work?
是的,我已经让 SCNMorpher 在自定义几何图形和从文件加载的几何图形之间工作。
您缺少的部分是所有变形目标需要具有相同数量的顶点,并且顶点需要具有相同的排列。这在 targets
属性的文档中进行了讨论:
The base geometry and all target geometries must be topologically identical — that is, they must contain the same number and structural arrangement of vertices.
您的示例(球体和圆锥体之间的早晨)不满足此要求,并且预计不会起作用。
您可以尝试在两个不同的球体(具有相同数量的段!)之间变形,看看它确实工作。
关于ios - 场景套件 SCNMorpher 不适用于 SCNSphere 等原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29252017/
我正在使用 SceneKit 构建一个小型动画应用程序。我的 .scn 文件中有一个 3D 模型,该文件有 6 个 SCNMorpher 目标(即 BlendShapes)。它们都是名为 dinoNo
我正在 iOS SceneKit 中使用 SCNMorpher 在从 Blender 导出为 DAE 文件的 3D 面部模型上的不同面部表情之间进行变形。变形本身效果很好。 在我第一次在变形器上调用
有人让 SCNMorpher 工作吗?如果是这样,你到底做了什么? 我现在正在执行一个小型测试程序,它应该显示一个红色圆锥体,当我点击屏幕时,它应该(应该!)将其变形为一个球体/球。但唯一发生的事情是
我正在尝试一个简单的示例,使用 SCNMorpher 在多边形球体之间进行混合。除了点的位置之外,它们在拓扑上是相同的 每个都存储在 .scn 文件中,我得到的形状如下: sphereNode = S
我正在尝试使用场景套件和使用 SCNMorpher/Key Shapes 从 Blender 导出的资源来制作脸部变形动画。 在导入的 DAE 文件中,我使用 ColladaMorphAdjuster
我在 iOS 11 的早期测试版中认识到,调整变形器权重(对于中等复杂的人体模型)会产生一个完整的扁平化模型。 我增加权重值越多,对象就越扁平。 我在 XCodes 预览模式(对于 scn 文件)中也
我是一名优秀的程序员,十分优秀!