我有一个不是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
答案 0 :(得分:1)
首先,您不需要复杂的SKVideoNode>正确放置> SKScene>调整大小>分配给素材舞蹈以在SceneKit中进行视频。从iOS 11开始,您可以将AVPlayer分配为材质属性的内容,它将自动映射以填充纹理坐标空间。 (不要成为讨厌AVPlayer的人。)
但是,您仍然需要确保在几何体上设置了纹理坐标,以便一次重复纹理可以填充所需的尽可能多的表面。有两种方法可以做到:
在使用任何软件生成几何图形时,请设置纹理贴图(也称为UV生成),以使原点0,0位于您要在其上进行视频显示的脸部的一个角上,而1,1位于另一个角上。
在SceneKit材质属性上使用contentsTransform
来拉伸或缩小纹理坐标空间,直到您的纹理适合您的方式为止。 (您可以在Xcode场景编辑器中通过反复试验来完成此操作,并将视频中的静止帧作为虚拟内容。)