我有一个使用SceneKit的3d世界,效果很好,可以平移,放大/缩小,但是我想在更大的3d世界之上创建3d世界的迷你视图。因此,如果用户放大到非常高的分辨率,他们仍然知道他们在太空中的位置。

大多数示例似乎将像SpriteKit这样的不同VC叠加在SceneKit VC之上,并使用overlaySKScene这样的东西。迷你版本不会放大/缩小,但会平移,更改照明等,但不会接受手势。这更像是递归如何将最小化自我版本置于自我之上。

最佳答案

这是我的做法:

您可以简单地将另一个摄像机添加到场景,然后渲染到SCNLayer。然后,您可以将场景中的该层用作材质,也可以将其添加为场景顶部的自定义视图。

SCNScene *scene2 =[SCNScene scene];

// We duplicate the scene by cloning the root node.
// I found that you cannot share the scene if you
// use the layer within it.
[[scene2 rootNode] addChildNode:[root clone]];

// Create a SCNLayer, set the scene and size
SCNLayer *scnlayer = [SCNLayer layer];
scnlayer.scene = scene2;
scnlayer.frame = CGRectMake(0, 0, 600, 800);

// "Layer" should be the name of your second camera
scnlayer.pointOfView = [scene.rootNode childNodeWithName:@"Layer" recursively:YES];

// Make sure it gets updated
scnlayer.playing = YES;



// Make a parent layer with a black background
CALayer *backgroundLayer = [CALayer layer];
backgroundLayer.backgroundColor = CGColorGetConstantColor(kCGColorBlack);
backgroundLayer.frame = CGRectMake(0, 0, 600, 800);

// Add the SCNLayer
[backgroundLayer addSublayer:scnlayer];

// Set the layer as the emissive material of an object
SCNMaterial *material = plane.geometry.firstMaterial;
material.emission.contents = scnlayer;

我很确定这不是一个好方法,但是对我有用。

关于ios - 递归::如何在自身之上创建3d场景的迷你 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28766697/

10-08 21:39