首先,我想向大家介绍我的问题,因为它非常复杂,所以您需要完全理解它。
我正在尝试使用Scene Kit和Swift做一些事情:我想要再现我们可以在电视节目Doctor Who中看到的情况,即博士的飞船内部比外部更大,就像您可以在此视频中看到的那样。
当然,Scene Kit Framework不支持此类虚幻维度,因此我们需要做一些手脚才能实现它。
现在让我们用简单的英语谈谈我的想法
实际上,我们想要做的是在同一位置显示两种完全不同的维度;所以我想:
- 一个用于飞船内部的第一维; - 第二个用于飞船外部的维数。
现在,假设您在船外,您将处于“外部维度”,在这个外部维度中,我的目标是在门口展示内部维度的一部分,以产生摄像机在外面但我们清楚地可以看到内部更大的效果。 我们将从内部使用等效原则。 现在让我们谈谈游戏逻辑
我认为表示这些维度的好方法是使用两个场景。我们将称外部场景为外部,内部场景为内部。 因此,如果我们再次看图片,这在场景级别会是这样的:
要使其看起来逼真,内部视图需要跟随外部摄像机的移动,这就是为什么我认为这两个相机的所有属性都必须相同的原因:
![enter image description here](https://istack.dev59.com/a8kFA.webp)
左侧是外部场景,右侧是内部场景。 我用橙色表示摄像机视野。
我正在尝试使用Scene Kit和Swift做一些事情:我想要再现我们可以在电视节目Doctor Who中看到的情况,即博士的飞船内部比外部更大,就像您可以在此视频中看到的那样。
当然,Scene Kit Framework不支持此类虚幻维度,因此我们需要做一些手脚才能实现它。
现在让我们用简单的英语谈谈我的想法
实际上,我们想要做的是在同一位置显示两种完全不同的维度;所以我想:
- 一个用于飞船内部的第一维; - 第二个用于飞船外部的维数。
现在,假设您在船外,您将处于“外部维度”,在这个外部维度中,我的目标是在门口展示内部维度的一部分,以产生摄像机在外面但我们清楚地可以看到内部更大的效果。 我们将从内部使用等效原则。 现在让我们谈谈游戏逻辑
我认为表示这些维度的好方法是使用两个场景。我们将称外部场景为外部,内部场景为内部。 因此,如果我们再次看图片,这在场景级别会是这样的:
![The same image than before, here, all the outside of the ship is colored in green, and the inside that we can see by the doors is colored in yellow, actually the green parts of the images represents the outsideScene (this is the scene that we are in), and the yellow parts (the rectangle of the open doors) represents the insideScene, I want to display this scene in the outsideScene](https://istack.dev59.com/KS7Bd.webp)
![enter image description here](https://istack.dev59.com/a8kFA.webp)
![enter image description here](https://istack.dev59.com/zjwka.webp)
如果外部场景相机向右移动,内部场景相机将完全执行相同的操作,如果外部场景相机旋转,内部场景相机将以相同的方式旋转...你明白原理了。
那么我的问题是:我可以使用什么来遮盖某个场景的某个部分(在这种情况下是外部视图中的黄色区域),并使用另一个视图(内部视图)的相机“看到”的内容?
起初,我认为我可以简单地从内部场景中获取NSImage,然后将其放置在外部场景中的一个表面上作为纹理,但问题是Scene Kit将计算其透视、光照等等...所以它看起来只像我们正在显示屏幕上的东西,而这不是我想要的。