标签: scenekit

Xcode 6.1 Swift问题 - 'init()'不可用:导入 - [NSObject init]取代

我刚刚将我的Xcode升级到6.1,现在得到一个奇怪的编译错误.

'init()'不可用:导入 - [NSObject init]取代

我是SCNNode的子类,并且对我定义的相同类型的其他类有可选引用.即

import UIKit
import SceneKit

    class BayNode: SCNNode {

        var leftBay:BayNode?
        var rightBay:BayNode?


        func addLeftBay()
        {

            leftBay = BayNode()   // 'init()' is unavailable: superseded by import of -[NSObject init]

        }


    }
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题.

非常感谢

scenekit swift ios8 xcode6.1

14
推荐指数
1
解决办法
3699
查看次数

如何使用SceneKit在场景中找到鼠标点?

我在SceneKit中设置了一个场景,并发出了一个命中测试来选择一个项目.但是,我希望能够在场景中沿着平面移动该项目.我继续接收鼠标拖动事件,但不知道如何将这些2D坐标转换为场景中的3D坐标.

我的情况很简单.摄像机位于0,0,50并指向0,0,0.我只想沿z平面拖动我的对象,其z值为0.

命中测试就像魅力一样,但是如何将拖动事件中的鼠标点转换为我拖动的3D对象的场景中的新位置?

opengl 3d mouse-picking scenekit

13
推荐指数
1
解决办法
6681
查看次数

如何设置SceneKit碰撞检测

您好我已经仔细阅读了文档,无法弄清楚如何在场景工具包中设置碰撞检测.有人可以举个例子.请帮助我非常绝望地想出这个.谢谢!

编辑:您好,非常感谢,对不起,我忘了提到我的项目很快.没什么大不了的,我可以在很大程度上翻译自己.

我有BitMasks正常工作,因为对象相互碰撞和反弹.但是我似乎无法使功能发挥作用

func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact){
    let contactMask = contact.nodeA.physicsBody!.categoryBitMask | contact.nodeB.physicsBody!.categoryBitMask
    if (contactMask == (CollisionBallCategory | CollisionTerminatorCategory)) {
        println("Collided")
    }
}
Run Code Online (Sandbox Code Playgroud)

看看文档,我需要以某种方式将场景物理世界委托分配给此方法.我不知道该怎么做.

scenekit swift

13
推荐指数
1
解决办法
1万
查看次数

场景套件性能与立方体测试

在学习游戏的3D图形编程时,我决定通过使用Scene Kit 3D API开始简单.我的第一个游戏目标是构建一个非常简化的模拟MineCraft.只是立方体的游戏 - 它有多难.

下面是我写的一个循环,用于放置100 x 100立方体(10,000)并且FPS性能非常差(~20 FPS).对于Scene Kit,我的初始游戏目标是否过多,或者有更好的方法来解决这个问题吗?

我已经阅读了StackExchange上的其他主题,但感觉不到他们回答我的问题.将暴露的表面块转换为单个网格将不起作用,因为SCNGeometry是不可变的.

func createBoxArray(scene : SCNScene, lengthCount: Int, depthCount: Int) {
    let startX : CGFloat = -(CGFloat(lengthCount) * CUBE_SIZE) + (CGFloat(lengthCount) * CUBE_MARGIN) / 2.0
    let startY : CGFloat = 0.0
    let startZ : CGFloat = -(CGFloat(lengthCount) * CUBE_SIZE) + (CGFloat(lengthCount) * CUBE_MARGIN) / 2.0

    var currentZ : CGFloat = startZ

    for z in 0 ..< depthCount {
        currentZ += CUBE_SIZE + CUBE_MARGIN

        var currentX = startX
        for x in …
Run Code Online (Sandbox Code Playgroud)

3d optimization performance scenekit swift

13
推荐指数
1
解决办法
2301
查看次数

随着iOS设备的移动,cameranode旋转

这是360度视频播放器项目.

我添加了一个cameranode(SCNNode)到一个根节点,cameranode被放在了中心(0,0,0)SCNSphere,它现在可以播放视频了.

现在我必须使用devicemotion.设备移动时我需要旋转相机.不只是旋转一定的角度.(不只是设备移动,当我拿着设备时,我的移动方式就像设备移动一样.因为我发现如果我使用deviceMotion.attitude.roll,cameranode仅在设备自行移动时移动,而不是当我绕着设备移动时)

当设备位于(x1,y1,z1)位置时,cameranode将随设备移动而旋转,当设备再次位于(x1,y1,z1)位置时,视图应与我们离开的最后一个相同.

这就是我所做的:

if (self.motionManager.gyroAvailable) {
        self.motionManager.gyroUpdateInterval = 1.0/60.0;
        [self.motionManager startGyroUpdatesToQueue:self.queue withHandler:^(CMGyroData *gyroData, NSError *error){
            if (error) {
                [self.motionManager stopGyroUpdates];
                NSLog(@"Gyroscope encountered error:%@",error);
            }else {
                CGFloat tempX = 0;
                CGFloat tempY = 0;
                CGFloat tempZ = 0;
                if ((fabs(gyroData.rotationRate.y)/60) > 0.002) {
                    tempY = gyroData.rotationRate.y/60;
                }
                tempX = gyroData.rotationRate.x/60;
                tempZ = gyroData.rotationRate.z/60;
                [self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0]];
            }
        }];
    }else {
        NSLog(@"This device has no gyroscope");
    }
Run Code Online (Sandbox Code Playgroud)

数学可能是错误的,我不知道为什么我会划分60,但它似乎是我使用时所需的最接近的值 [self.cameraNode runAction:[SCNAction rotateByX:-tempY …

ios cmmotionmanager scenekit scnnode

13
推荐指数
1
解决办法
2404
查看次数

我可以结合多个透明SCNShape对象吗?

我正在向ARSCNSceneView场景添加多个透明SCNShape对象.

  • 这些形状基于用户输入,应该重叠.
  • 它们都是在同一平面上用UIBezierPath制成的扁平形状
  • 形状必须是透明的,因此用户可以看到后面的摄像头输入

问题是重叠的形状是非常明显的,我希望它显示为一个单一的形状 - 所有形状的结合.

失败的方法:

  • 将它放在同一节点下并使用父不透明度.
  • 合并UIBezier路径.
  • 混合模式
  • 透明模式
  • 使用原始三角形而不是UIBezierPath绘图

想要与目前的结果

ios uibezierpath scenekit swift arkit

13
推荐指数
1
解决办法
459
查看次数

查找iOS设备相机和用户脸部之间的距离

我试图在现实世界中找到iOS设备的前置摄像头和用户脸部之间的距离.

到目前为止,我已经尝试过ARKit/SceneKit,并且使用ARFaceAnchor我能够检测用户与相机的面部距离; 但它只能靠近(最大约88厘米).我的应用要求面部距离检测高达200厘米.

我假设这可以在不使用trueDepth数据(正在使用ARFaceAnchor)的情况下实现.

你能把我放在正确的方向吗?

ios scenekit swift arkit

13
推荐指数
1
解决办法
874
查看次数

从Blender导出到COLLADA/.dae格式时包含纹理,以便在SceneKit中使用

我可以使用COLLADA/.dae格式导出在Blender中创建的网格,以便在SceneKit中使用 - 但iOS设备上不显示任何纹理.

此外,OS X上的预览不会打开从Blender导出的任何COLLADA文件 - 但是侧边栏预览显示网格.出口使这项工作需要哪些选项?

blender collada ios scenekit

12
推荐指数
1
解决办法
1万
查看次数

将SceneKit对象放在SCNCamera当前方向的前面

我想在用户点击屏幕时创建一个新的SceneKit节点,并让它以预定距离直接出现在摄像机前面.对于测试,这将是一个SCNText读取"你在这里点击"的读数.它也应该与视线成直角 - 也就是说,"面向相机".

那么,鉴于self.camera.orientationSCNVector4(或类似),我该如何:

  1. 产生SCNVector3,将节点置于摄像机的"前方"给定距离?
  2. 生成SCNVector4(或SCNQuaternion),它定向节点,使其"面对"相机?

我怀疑(2)的答案是它与`self.camera.orientation相同?但是(1)让我有点失落.

我看到了许多类似的问题,比如这个,但没有答案.

scenekit swift3

12
推荐指数
3
解决办法
2万
查看次数

从scene.rootNode中删除SCNNode节点导致在SceneKit中崩溃

我试图从我的场景中删除表示路径的节点集.它们是SCNSphere几何节点和表示线的自定义几何的组合,使用SCNGeometrySource和SCNGeometryElement创建.

我没有在任何类型的数组中保留这些节点.相反,我按照名称搜索场景中rootNode的节点树的第一级,以及后续调用使它们淡出的动作序列,并且它们应该从根节点中删除它们自己.

代码如下:

func clearPath() {
    //
    let disappear = SCNAction.fadeOut(duration: 0.1)
    let remove = SCNAction.removeFromParentNode()
    let sequence = SCNAction.sequence([disappear, remove])

    if let pathNodesToRemove = pathNodes() {
        //
        for node in pathNodesToRemove {
            //
            node.removeAllActions()
            node.runAction(sequence)
        }
    }

    if let lineNodesToRemove = lineNodes() {
        for node in lineNodesToRemove {
            //
            node.removeAllActions()
            node.runAction(sequence)
        }
    }

    path.removeAll()
}
Run Code Online (Sandbox Code Playgroud)

哪里:

func pathNodes() -> [SCNNode]? {
    //

...        

    let nodes = rootNode.childNodes.filter { (node) -> Bool in
        //
        guard let name = node.name else …
Run Code Online (Sandbox Code Playgroud)

ios scenekit swift

12
推荐指数
1
解决办法
611
查看次数