【问题标题】:SCNNode irregular Plane from .dae with Video Texture来自 .dae 的 SCNNode 不规则平面,带有视频纹理
【发布时间】:2018-12-31 12:03:13
【问题描述】:

我有一个不是 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

【问题讨论】:

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


    【解决方案1】:

    首先,您不需要复杂的 SKVideoNode > 正确定位 > SKScene > 正确调整大小 > 分配给 Material Dance 以在 SceneKit 中制作视频。从 iOS 11 开始,您可以将 AVPlayer 指定为材质属性的内容,它会自动映射以填充纹理坐标空间。 (不要成为 AVPlayer 的仇恨者。)

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

    1. 在生成几何图形的任何软件中,设置纹理映射(也称为 UV 生成),使原点 0,0 位于您要播放视频的面部的一个角上,而 1,1 位于另一个角上。

    2. 在 SceneKit 材质属性上使用 contentsTransform 来拉伸或收缩纹理坐标空间,直到纹理适合您喜欢的方式。 (您可以通过在 Xcode 场景编辑器中使用视频中的静止帧作为虚拟内容进行反复试验来做到这一点。)

    【讨论】:

    • Ohhh.. 有趣的是,我认为诀窍在于导出模型的 0,0 1,1。让我看看。感谢您提供有关 AVPlayer 的提示,反正我已经在使用 AVPlayer。
    猜你喜欢
    • 2012-08-11
    • 2018-12-23
    • 2014-03-30
    • 2015-10-23
    • 2016-03-05
    • 1970-01-01
    • 2012-01-19
    • 2015-05-17
    • 2020-12-25
    相关资源
    最近更新 更多