首先,我只想向你们介绍我的问题,因为它真的很复杂,所以你需要这个来正确理解它。
我正在尝试使用 Scene Kit 和 Swift 做一些事情:我想重现我们在电视节目Doctor Who中看到的内容,其中医生的宇宙飞船内部更大,正如您在此视频中看到的那样。
当然,Scene Kit 框架不支持那种不真实的维度,所以我们需要做一些hackery 来实现它。
现在用通俗的英语说一下我的想法,
其实我们要做的就是在同一个地方展示两个完全不同的维度;所以我在想:
- 宇宙飞船内部的第一个维度。
- 宇宙飞船外部的第二个维度。
现在,假设您在船外,您将在外部维度中,并且在这个外部维度中,我的目标是在门的水平面上显示内部维度的一部分,以产生这种效果,其中相机在外面,但我们可以清楚地看到里面更大:
我们将从内部使用等效原理。
现在让我们谈谈游戏逻辑:
我认为表示这些维度的一个好方法是两个使用两个场景。
我们将 outsideScene 称为外部场景,将 insideScene 称为内部场景。
因此,如果我们再次拍摄照片,这将在场景级别给出:
为了让它看起来更逼真,内部的视图需要跟随外部摄像机的运动,这就是为什么我认为这两个摄像机的所有属性都是相同的:
左边是outsideScene,右边是insideScene。我用橙色表示相机视野。
如果outsideScene 相机向右移动,insideScene 相机会做同样的事情,如果outsideScene 相机旋转,insideScene 相机也会以同样的方式旋转……你懂的原理。
所以,我的问题如下:我可以用什么来掩盖某个场景的某个部分(在这种情况下是outsideView中的黄色区域)与另一个视图(insideView)的相机“看到”什么?
首先,我认为我可以简单地从 insideScene 获取 NSImage,然后将其作为表面的纹理放在 outsideScene 中,但问题是 Scene Kit 会计算它的透视、照明等......所以它只会看起来我们正在屏幕上显示一些东西,这不是我想要的。