.dae中具有视频纹理的SCNNode不规则平面

时间:2018-07-24 00:35:19

标签: ios 3d augmented-reality arkit texture-mapping

我有一个不是SCNPlane的3d平面。这是一个来自.dae

的SCNNode

那是因为平面不规则不是完美的矩形。 我要应用视频(.mp4)作为与平面几何形状匹配的纹理。我已经能够将视频加载为SCNPlane的纹理,但这是在我决定使用自定义3d对象之前。

如果我将视频纹理应用于新的自定义几何图形,则该视频不适合该几何图形。

任何想法是正确的方法吗?视频加载并显示出来。.但是全部倾斜并且与形状不正确。

    let videoNode = SKVideoNode(avPlayer: self.theVideoPlayer)
    videoNode.play()
    let skScene = SKScene(size: CGSize(width: 4096, height: 720))
    skScene.addChild(videoNode)
    videoNode.position = CGPoint(x: skScene.size.width/2, y: skScene.size.height/2)
    videoNode.size = skScene.size
    //NodeTree: SKScene -> SKVideoNode

    let baseUrl = "art.scnassets/"
    let sceneUrl = baseUrl + "wallPlane/wallPlane.scn"
    let modelScene = SCNScene(named: sceneUrl)!
    let wallPlaneNode = modelScene.rootNode.childNodes.first! as SCNNode


    wallPlaneNode.geometry!.firstMaterial?.diffuse.contents = skScene
    wallPlaneNode.geometry!.firstMaterial?.isDoubleSided = true

    return wallPlaneNode

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,您不需要复杂的SKVideoNode>正确放置> SKScene>调整大小>分配给素材舞蹈以在SceneKit中进行视频。从iOS 11开始,您可以将AVPlayer分配为材质属性的内容,它将自动映射以填充纹理坐标空间。 (不要成为讨厌AVPlayer的人。)

但是,您仍然需要确保在几何体上设置了纹理坐标,以便一次重复纹理可以填充所需的尽可能多的表面。有两种方法可以做到:

  1. 在使用任何软件生成几何图形时,请设置纹理贴图(也称为UV生成),以使原点0,0位于您要在其上进行视频显示的脸部的一个角上,而1,1位于另一个角上。

  2. 在SceneKit材质属性上使用contentsTransform来拉伸或缩小纹理坐标空间,直到您的纹理适合您的方式为止。 (您可以在Xcode场景编辑器中通过反复试验来完成此操作,并将视频中的静止帧作为虚拟内容。)