我有一个使用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/