【问题标题】:How to change height width of 3D objects in SceneKit iOS如何在 SceneKit iOS 中更改 3D 对象的高度宽度
【发布时间】:2017-05-17 12:28:41
【问题描述】:

我在我的移动 App 中显示 3D(.obj 和 .stl)对象。 为了显示 3D 对象,我正在使用 SceneKit Framework.

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

【问题讨论】:

    标签: ios 3d scenekit


    【解决方案1】:

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

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

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

    推拉是根据与拍摄对象的距离来调换相机位置的过程;它正在看的那个。物体越远越小,越近越大。

    2。缩放对象

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

    【讨论】:

    • 我正在使用 SCNCamera 对象,但没有找到缩放属性,如果你有,请给我示例代码
    • 不幸的是,尽管 SceneKit 确实为 DOF 效果提供了光圈的虚拟控制,但您必须处理更传统的视野来更改缩放:developer.apple.com/reference/scenekit/scncamera/1436608-xfov
    • 如果可以的话,我会先将相机移动得更远/更靠近物体。因为这通常会提供更令人愉悦的“变焦”体验,因为视野保持不变,但物体离相机越来越近或越来越远。
    • @IOSDev 虽然这将需要使用约束或对(相机的)对象进行父级处理以使其变得简单。否则,您将不得不做一些数学运算来确定相机相对于场景空间中物体的位置。
    • 然后按比例缩放。 @IOSDev
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 2016-06-07
      • 2015-09-07
      • 2017-01-19
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多