2017-01-03 45 views
3

我在我的移动应用程序中显示3D(.obj和.stl)对象。 为了显示3D对象我使用SceneKit Framework.如何更改SceneKit中3D对象的高度宽度iOS

-(void)spriteKitEx 
{ 
    sceneView = [[SCNView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 200)]; 
    sceneView.playing = true ; 
    sceneView.allowsCameraControl = true ; 
    scene = [SCNScene sceneNamed:@"realship.obj"]; 

    //Try to change color here using Scenlight 
    SCNLight *light =[[SCNLight alloc] init]; 
    light.type = SCNLightTypeAmbient; 
    light.color = [UIColor redColor]; 

    SCNNode *lightNode = [[SCNNode alloc] init]; 
    lightNode.light = light ; 
    lightNode.scale = SCNVector3Make(1.0, 500.0, 2.0); 
    [scene.rootNode addChildNode:lightNode]; 
    sceneView.scene = scene; 
    [sceneView setBackgroundColor: [UIColor redColor]]; 

    [self.view addSubview:sceneView]; 
} 

现在我的要求是根据用户手势来改变3D对象的宽度和高度。

我试图在我的SceneView对象中做到这一点,但无法改变宽度和高度。

任何人都可以帮助我解决这个问题。

我欢迎您的建议和指导。

谢谢先进。

回答

3

有两种方法在三维场景中做到这一点:

1.使用中的摄像机,变焦改变/镜头的长度和/或小车它

放大镜头长度通常被描述或视野。虚拟长度越大,缩小越小。相反,较大的视野会缩小,而较小的视野会放大。

拖拽是将摄像机的位置与其主体的距离置换的过程;它正在看的。物体越远,物体越小,越接近越大。

2比例的对象

这是非常简单的。但是对于一个手势看起来很奇怪,因为只有一个对象会出现变化。如果你正在制作3D编辑应用程序,这可能是你想要的。否则,您可能想要移动和/或缩放相机。

+0

我使用SCNCamera对象,但并没有发现变焦性能u能请给我样品鳕鱼,如果你有 – Tech

+0

不幸的是,虽然SceneKit确实提供了光圈,景深效果的虚拟控制,你必须处理的一个比较传统的领域查看更改缩放:https://developer.apple.com/reference/scenekit/scncamera/1436608-xfov – Confused

+0

如果可以,我会首先将相机进一步/靠近对象。由于这通常会提供更令人愉快的“变焦”体验,因为视场保持不变,但物体距离相机越来越近。 – Confused

2

首先,道歉,如果这件事发生简单化。我正在写关于如何在不知道您对Xcode熟悉程度的情况下如何缩放,移动或定位3D文件;查看和操作scnassets文件夹中的项目。最后需要注意的是,我不使用obj文件,但假设(希望,真的),他们可以像在dae文件中一样在Xcode中进行编辑。

打开Project Navigator(⌘1)并查找希望存在并包含obj文件的scnassets文件夹。从你的scnassets文件夹中选择你的obj文件,你的对象应该出现在编辑器中。打开场景图视图并选择需要调整宽度和高度的节点。在Utilities视图的节点检查器(⌥⌘3)中,您会看到可以更改的节点的几个功能,其中之一是Scale。在“缩放”下,您会看到要更改节点的边界框尺寸。

如果您需要一次重新调整几个节点,我建议使用场景图视图下的+号创建一个子节点,然后将需要重新缩放(或移动或重新定向)的节点移动到子节点,然后将该子节点重新缩放到您需要的大小。

此外,作为预防措施,请在每次更改后保存到您的obj文件中。 Xcode 8.2.1更加稳定,但8.2之后会在dae/scn文件每更改一次或两次后崩溃。希望所有这些都有所帮助。

相关问题