Tag: 场景

如何使用SceneKit实现3D指南针

目前我在制作3D指南针function方面感到困惑。 使用SceneKit,我加载了一个箭头对象,然后像下面的代码一样获取传感器数据(效果就是这个video ) let motionManager = CMMotionManager() motionManager.deviceMotionUpdateInterval = 1.0/60.0 if motionManager.isDeviceMotionAvailable { motionManager.startDeviceMotionUpdates(to: OperationQueue.main, withHandler: { (devMotion, error) -> Void in arrow.orientation = SCNQuaternion(-CGFloat((motionManager.deviceMotion?.attitude.quaternion.x)!), -CGFloat((motionManager.deviceMotion?.attitude.quaternion.y)!), -CGFloat((motionManager.deviceMotion?.attitude.quaternion.z)!), CGFloat((motionManager.deviceMotion?.attitude.quaternion.w)!)) })} 完成后,如果用户在任何轴上旋转设备,箭头也可以旋转。 由于这是一个3D指南针,我需要箭头指向方向。 所以我通过CLLocationManager获取标题数据,然后问题就来了。 let gq1: GLKQuaternion = GLKQuaternionMakeWithAngleAndAxis(GLKMathDegreesToRadians(heading), 0, 0, 1) arrow.orientation = SCNVector4(gq1.x,gq1.y,gq1.z,gq1.w) 上面的代码在2D中像下面的图片一样完美,它正确地指向了东方向。 但我想在3D环境中,所以我喜欢下面 motionManager.deviceMotionUpdateInterval = 1.0/60.0 if motionManager.isDeviceMotionAvailable { motionManager.startDeviceMotionUpdates(to: OperationQueue.main, withHandler: { […]

从触摸位置快速获取SCNNode环境中的vector

我有我的相机的位置和方向,在屏幕上的CGPoint触摸位置,我需要在我的3d SCNNode环境中,我在屏幕上触摸的方向的线(最好是vector),我怎么能得到这个? 代码片段会非常有帮助。

在colorGrading属性里面工作?

有人使用SCNCamera的colorGrading属性来调整渲染的颜色吗? colorGrading的内容值必须是3D颜色查找表(LUT)或2D纹理图像,表示排列在水平条上的这样的表格。 所以我试着下载一些3D立体彩色查表文件,比如.cube格式,写一些Metal代码。 但是当我运行它,我得到了整个黑色的场景。 但是当我移动相机时,黑色消失了,但是ColorGranding并没有这样工作。 所以我想使用二维纹理图像,但我无法从互联网上find资源。 该文件说,你可以创build一个基本的颜色表格图像来创build自定义效果。 但是这是什么意思? 我如何创build一个基本的颜色表格图像?

angular色不在场景包中的所需场景中移动

我想移动我的angular色在场景工具包。我有一个地图,因为github Fpscontroller,我希望我的angular色在这个地图移动,但是当我触摸移动angular色跳跃,不知道去哪里是我的代码。 ` override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { for touch in touches { if CGRectContainsPoint(gameView.virtualDPadBounds(), touch.locationInView(gameView)) { if padTouch == nil { padTouch = touch controllerStoredDirection = float2(0.0) } } else if panningTouch == nil { panningTouch = touches.first } if padTouch != nil && panningTouch != nil { break } } […]

SCNCylinder上的设置内容(图像)反转(翻转)

我试图使用以下代码在SCNCylinder对象上呈现图像: let coinGeometry = SCNCylinder(radius: 50, height: 55) coinNode = SCNNode(geometry: coinGeometry) coinNode.position = SCNVector3Make(0.0, 25.0, 25.0) coinScene.rootNode.addChildNode(coinNode) //Add image on cylinder shape let frontFacingImageMaterial = SCNMaterial() frontFacingImageMaterial.diffuse.contents = UIImage(named: "map") frontFacingImageMaterial.specular.contents = UIColor.blueColor() frontFacingImageMaterial.shininess = 5.0 coinGeometry.firstMaterial = frontFacingImageMaterial 在圆柱体上,此图像显示为反转(翻转)。 我该如何解决? 谢谢

从three.js的例子,但如何实现使用SceneKit?

目标示例: 我看到three.js有这个例子。 这只是一个3D立方体,其表面上有许多球体。 我如何使用SceneKit做这样的事情?

在SceneKit中做什么?

在SceneKit编辑器中“烘烤”选项的目的是什么? 它是否对性能有影响? types提供2个选项:Ambient Occlusion和Light Map 目的地提供:纹理和顶点

Scenekit – physicsWorld设置,以防止运动节点相交

我的场景中有几个节点,我可以旋转和拖动。 我build立了一个physicsWorld委托,在我的节点中添加了types为kinematic的physicsBody,并检查了PhysicsWorld的didBeginContact – 到目前为止,一切正常,当我移动节点时,联系开始/结束触发。 我试图解决这个问题的方式是设置一个布尔variables,一旦联系开始,以防止进一步的运动,但变成案件(特别是如果我拖动节点太快),更改为真,节点获取一点点在另一个对象的内部。 我应该用不同的方法呢? 我不是真的要碰撞,只是另一个节点行事“坚实”,即使在更高的速度接触,也不允许交集。 编辑: 一些示例图像来进一步澄清问题: 为了简单起见,我只添加了2个节点来演示这个问题。 第一个图像是初始位置,第二个和第三个(侧视图)是在一个非常快的平底锅之后。 接触检测仅在节点已经相交后才被触发。 我尝试的一种方法是在联系被触发之前抓住最后一个位置,并在检测到接触后重新设置节点的位置,但结果是非常不稳定和不稳定,并且在一秒钟之内,有时可以看到物体相交,然后跳到最后“好”的位置。 我觉得必须有一些更简单的方法来实现这一点,但花费数小时后,通过可用的资源,我无法弄清楚。 编辑2 进一步的研究指出了扫描testing的线,技术上,如果我能检测到可能的碰撞之前,我移动节点,我应该能够限制运动停止之前发生交叉点 更新: Xcode指出另一个死胡同 Error: convexSweep only works with convex shapes

在SceneKit中追逐相机

假设我有一个节点是一个立方体,我正在将它移动到场景中,我怎么能在盒子后面有一个相机? 我知道有SCNLookAtConstraint ,但我所追求的是追逐相机。 一个实际上改变它的位置,以便它附在节点后面。 我还没有find任何示例代码,显示了实现这个方法,有没有人有任何想法?

在特殊的SCNBox的这些点添加球体?

有人可以帮助我吗? 我看到WWDC 2013幻灯片有这个例子,我尝试使用SCNGeometrySource。 这是我的代码如下 var box = SCNBox(width: 10, height: 10, length: 10, chamferRadius: 0) box.widthSegmentCount = 3 box.heightSegmentCount = 3 box.lengthSegmentCount = 3 let positionSource = box.getGeometrySources(for: .vertex)[0] positionSource.vectorCount positionSource.data.withUnsafeBytes{(vertexBuffer: UnsafePointer<Float>) in print("a") let a = positionSource.componentsPerVector for i in 0..<positionSource.vectorCount { print(SCNVector3(vertexBuffer[i * a], vertexBuffer[i * a + 1], vertexBuffer[i * a + […]