Ios 在SceneKit中显示3D模型,SpriteKit节点纹理中的视频不工作

Ios 在SceneKit中显示3D模型,SpriteKit节点纹理中的视频不工作,ios,3d,sprite-kit,scenekit,Ios,3d,Sprite Kit,Scenekit,我已经建立了一个3D视频播放器,它工作得很好。当我插入一个3D对象(在我的例子中是一个立方体)时,立方体会闪烁,并且仅部分可见(见下文) 我用来插入立方体的代码非常简单: let box = SCNBox(width: 0.25, height: 0.25, length: 0.25, chamferRadius: 0) let boxNode = SCNNode(geometry: box) boxNode.categoryBitMask = StereoCategoryMask.BothEy

我已经建立了一个3D视频播放器,它工作得很好。当我插入一个3D对象(在我的例子中是一个立方体)时,立方体会闪烁,并且仅部分可见(见下文)

我用来插入立方体的代码非常简单:

let box = SCNBox(width: 0.25, height: 0.25, length: 0.25, chamferRadius: 0)
let boxNode = SCNNode(geometry: box)
boxNode.categoryBitMask = StereoCategoryMask.BothEyes.rawValue
boxNode.position = SCNVector3(x: 1.0, y: 0.5, z: 0.5)
编辑:

视频是用360摄像头拍摄的,所以我创建了一个球体(SCNode),由于没有更好的术语,它成为了我的世界。在其内部,摄像头处于0,0,0;我需要和它保持相等的距离,以防止枪管变形

我使用的是一个SKNode,所以我可以通过SKVideoNode播放视频,然后将其映射到一个SCNode上作为纹理。它看起来像这样:
videoGeomNode.geometry?.firstMaterial?.diffuse.contents=texture
其中,texture是一个SKNode,videoGeomNode是我的球体

以下是放大的结果:


[编辑:不,不是答案,请参阅注释;保留原样,以防它会触动某人的大脑寻找正确答案]

看起来您相机的Z接近剪裁限制
zNear
太远了。立方体的一部分在相机的平截头体中,而另一部分不在

zNear
默认值为1.0。将其减少到接近0.0的值,或使用

camera.automaticallyAdjustsZRange = true

结果我把zNear设置为0.0;zNear不能为0。将其设置为0.1解决了我的问题


这很奇怪,因为如果我把一个立方体放在视频上,它会闪烁,而如果它放在空白处,它看起来会很好。我本以为如果这是一个zNear问题,那么它会以同样的方式影响两个多维数据集。

我只是尝试了一下。不走运。如果我把立方体放在一个没有视频的部件上,那么它看起来很好;视频被投影到1/2个球体上,因此另一半(或更少,取决于摄像机的性能)是黑色/空的。看起来,当视频以每秒60帧的速度更新时,立方体正在重新绘制,并且由于某种原因出现了故障。我不得不将视频映射到SceneKit节点作为纹理;我将尝试将视频在树层次结构中向下移动,看看这是否有任何影响。难以追踪:(我想如果你编辑你的问题并告诉我们更多关于场景和视图结构的信息会有所帮助。什么样的对象正在显示视频?可能是相关的。上面我的意思是我正在使用SKNode,这样我可以通过SKVideoNode播放视频,然后我将其作为纹理映射到SCNode上。它看起来像这样:
videoGeomNode.geometry?。首先材质?.diffuse.contents=纹理
其中纹理是一个SKNode。好吧,这是一个有点扭曲的想法,但是…让你的视频设置、球体等保持原样。制作一个SKScene,并将其用作sceneView的
叠加场景
。在该叠加上,放置一个单独的全屏SK3DNode,其中包含你的立方体或你需要的任何其他3D内容n在视频前面。嗨,杰森,你是说你能把一个场景变成360度视频吗?是的。有些方面有点棘手。例如,在iOS 8(内置于ModelIO For 9)上的纸板上实现立体桶失真.哇,太酷了!你有没有可能分享代码或技术?一种方法是从不同的有利位置拍摄场景的截图,然后将所有这些图像合并到视频中,但不确定这是否是将场景渲染成视频的最佳方法。不幸的是,我为其他人佩戴了它,所以我无法发布它。如果我是acrosIt’有空我会在GitHub上做一个例子。当然,明白了。你的技术与从不同的摄像机位置截图并将这些图像合并成视频有很大不同吗?