我有一个不是 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
最佳答案
首先,您不需要复杂的 SKVideoNode > 正确定位 > SKScene > 正确调整大小 > 分配给 Material 舞来在 SceneKit 中做视频。从 iOS 11 开始,您可以将 AVPlayer 指定为 Material 属性的内容,它会自动映射以填充纹理坐标空间。 (不要讨厌 AVPlayer。)
但是,您仍然需要确保几何体上的纹理坐标已设置,以便纹理的一次重复可以填充所需的尽可能多的表面。有两种方法可以做到这一点:
在任何生成几何体的软件中,设置纹理映射(也称为 UV 生成),使原点 0,0 位于您想要视频的面部的一个角上,1,1 位于另一个角上。
在您的 SceneKit Material 属性上使用
contentsTransform
来拉伸(stretch)或收缩纹理坐标空间,直到您的纹理符合您喜欢的方式。 (您可以通过在 Xcode 场景编辑器中反复试验,将视频中的静止帧作为虚拟内容来完成此操作。)
关于ios - 来自 .dae 的具有视频纹理的 SCNNode 不规则平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488899/