如何在SceneKit iOS中更改三维对象的高度和宽度

如何在SceneKit iOS中更改三维对象的高度和宽度,ios,3d,scenekit,Ios,3d,Scenekit,我正在移动应用程序中显示3D(.obj和.stl)对象。 对于显示3D对象,我使用的是SceneKit框架。 -(void)spriteKitEx { sceneView = [[SCNView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 200)]; sceneView.playing = true ; sceneView.

我正在移动应用程序中显示3D(.obj和.stl)对象。 对于显示3D对象,我使用的是
SceneKit框架。

-(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对象中执行此操作,但无法更改宽度和高度

有人能帮我吗

我欢迎你的建议和指导


感谢高级版。

在3D场景中有两种方法可以做到这一点:

1。使用相机,更改变焦/镜头长度和/或推拉它

变焦通常用镜头长度或视野来描述。放大的虚拟长度越大,缩小的虚拟长度越小。相反,较大的视野正在缩小,较小的视野正在放大

推拉是根据相机与拍摄对象的距离变换相机位置的过程;它所看到的。对象显示得越远越小,越近越大

2。缩放对象


这很直截了当。但对于一个手势来说似乎很奇怪,因为只有一个对象会发生变化。如果你正在制作一个3D编辑应用程序,这可能就是你想要的。否则,您可能需要移动和/或缩放相机。

首先,如果这看起来过于简单,请道歉。我写的是如何缩放、移动或定向3D文件,而不知道您对Xcode的熟悉程度;查看和操作scnassets文件夹中的项目。最后,我不使用obj文件,但假设(希望如此)它们可以像dae文件一样在Xcode中编辑

打开项目导航器(⌘1) 并查找(希望)存在并包含obj文件的scnassets文件夹。从scnassets文件夹中,选择obj文件,对象应显示在编辑器中。打开“场景图”视图,然后选择需要根据宽度和高度调整大小的节点。在“实用程序”视图的节点检查器中(⌥⌘3) ,您将看到可以更改的节点的多个功能,其中之一是缩放。在“比例”下,您将看到要更改的节点的边界框尺寸

如果需要一次重缩放多个节点,我建议创建一个子节点,在场景图视图下使用+符号,然后将需要重缩放(或移动或重新定向)的节点移动到子节点中,然后将该子节点重缩放为所需的大小


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

我正在使用SCNCamera对象,但没有找到缩放属性。如果您有,请给我示例cod。不幸的是,尽管SceneKit确实提供了DOF效果的虚拟孔径控制,但您必须处理更传统的视野来更改缩放:如果可以,首先,我会将相机移得离物体更远/更近。因为这通常会提供更令人愉悦的“缩放”体验,因为视野保持不变,但对象会离摄影机更近或更远。@IOSDev,尽管这需要使用约束或对象(摄影机)的子对象来简化。否则,你们将不得不做一些数学运算来计算出摄像机相对于场景空间中的物体的位置。然后缩放它@奥斯德夫