SKVideoNode 作为 SCNSphere 的纹理

2024-03-09

我正在尝试使用 SKVideoNode 作为 SCNView 中 SCNSphere 的视频纹理源

我正在关注这个答案:

SKVideoNode(嵌入在 SKScene 中)作为场景套件节点的纹理不起作用 https://stackoverflow.com/questions/32794733/skvideonode-embedded-in-skscene-as-texture-for-for-scene-kit-node-not-working

通过我的代码(粘贴在问题末尾),我确实可以播放视频和音频。

问题是,映射仅发生在球体的四分之一(所有 xy 正四分之一)上。

cameraNode 位于 (0,0,0) 球体内部并且独立于 sphereNode。

我确实对球体节点应用了比例,只是为了反转纹理的节点:

    sphereNode.scale = SCNVector3Make(-1, 1, 1)

但注释掉没有任何效果。

这都是在设备上测试的(iphone 6+,使用 iOS 9.1):

  let sphere = SCNSphere(radius: 1)
    .
    .
    .

       func setupView() {

    // setup the sphere
    sphere.segmentCount = 55

    // sphere material
    sceneMaterial = SCNMaterial()


    // setup the sphereNode
    sphereNode = SCNNode(geometry: sphere)
    sphereNode.position = SCNVector3Make(0, 0, 0)
    sphereNode.scale = SCNVector3Make(-1, 1, 1)

    let apperture = 75.0

    // setup the camera
    camera = SCNCamera()
    camera.xFov = apperture
    camera.zFar = 10000
    camera.yFov = apperture
    camera.zNear = 0.5
    camera.aperture = 1/10
    cameraNode.position = SCNVector3Make(0, 0, 0)
    cameraNode.camera = camera

    // light node
    let lightNode = SCNNode()
    lightNode.position = SCNVector3Make(0, 0, 0)

    // light
    let ambientLight = SCNLight()
    ambientLight.type = SCNLightTypeAmbient
    ambientLight.color = UIColor(white: 0.7, alpha: 1)
    lightNode.light = ambientLight


    // add top sceneView
    topScene.scene = scene
    bottomScene.scene = scene

    // setup the sceneView
    scene.rootNode.addChildNode(sphereNode)
    scene.rootNode.addChildNode(cameraNode)



    // video reader
    let path = NSBundle.mainBundle().pathForResource("tb", ofType: "mp4")
    let url  = NSURL(fileURLWithPath: path!)
    let asset = AVURLAsset(URL: url,options: nil)
    let playerItem = AVPlayerItem(asset: asset)
    let player = AVPlayer(playerItem: playerItem)
    let videoNode = SKVideoNode(AVPlayer: player)

    // check the sizes
    let size = CGFloat(1000.0)
    let spriteScene = SKScene(size: CGSizeMake(size,size))
    videoNode.size.width = size
    videoNode.size.height = size
    spriteScene.addChild(videoNode)

    // the image
    sceneMaterial.specular.contents = UIColor.whiteColor()
    sceneMaterial.doubleSided = true
    sceneMaterial.shininess = 1
    sceneMaterial.diffuse.contents = spriteScene


    sphere.materials = [sceneMaterial]
    videoNode.play()


}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SKVideoNode 作为 SCNSphere 的纹理 的相关文章

随机推荐