Tag: 场景包

SceneKit视图呈现向后

我正在尝试我的第一个SceneKit应用程序。 我的目标是模拟地球表面的视图,并能够将设备的摄像机指向任意方向,并在摄像机视图上叠加信息。 首先,我只是试图让SceneKit相机视图匹配设备的方向。 为了validation它是否正常工作,我在特定的经度和纬度坐标处添加了一堆球体。 除了一个重要的问题,一切都在起作用。 该视图从应该显示的内容镜像左/右(东/西)。 我花了几个小时尝试调整相机的不同排列。 以下是我的完整testing应用程序视图控制器 我无法弄清楚正确的变化组合,让场景正确渲染。 北极的球体是正确的。 按我自己目前的经度从北极延伸到赤道的球体线如预期的那样出现在头顶上。 这是领域的其他线是不正确的。 它们从东西向镜像,就像镜子在我自己的经度上一样。 如果你想testing这个代码,使用SceneKit创build一个新的游戏项目。 将模板GameViewController.swiftreplace为下面的文件。 您还需要在Info.plist中添加“隐私 – 使用说明中的位置”键。 我也build议调整for lon in …行中的for lon in …以便数字以您自己的经度开始或结束。 然后您可以看到球体是否正在显示的正确部分上绘制。 这可能还需要对UIColor(hue: CGFloat(lon + 104) * 2 / 255.0颜色UIColor(hue: CGFloat(lon + 104) * 2 / 255.0 。 import UIKit import QuartzCore import SceneKit import CoreLocation import CoreMotion let EARTH_RADIUS = […]

SceneKit Rigged Character Animation增加性能

我有*.DAE文件,每个字符有45-70个骨头,我想在屏幕上有大约100个animationangular色。 但是当我有60个人物的时候,animation需要13ms的更新循环,这个代价非常昂贵,并且让我几乎没有其他任务的余地。 当我想要交换animation时,我将animation“CAAnimationGroup”设置为网格SCNNode 。我将fadeOut设置为0.2并添加新的FadeIn设置为0.2的animation,以删除以前的animation。 – >这不好吗? 我应该暂停一个以前的animation,并播放一个新的? 还是更糟? 有没有更好的方法来animation在SceneKit操纵angular色可能使用GPU或其他? 请让我开始正确的方向,以减less更新循环中的animation开销。 通过Bug雷达联系Apple后更新我通过电子邮件收到了这个问题: 这个问题正在努力修复在未来的更新,我们会让你知道,只要我们有一个testing版本,你可以testing和validation这个问题。 感谢您的耐心等待。 所以让我们拭目以待苹果工程师将会加强它:)

SCNNode与.dae导致问题的静态身体

我已经在搅拌机中build立了一个景观模型,导出到.dae并添加到我的xcode项目中。 我已经加载的场景,然后附加到我的landscapeNode的孩子(风景网格网格),这完全加载。 然而,当我将一个静态的物理体附加到landscspeNode上时,我的英雄节点似乎在试图在土地上空飞行时撞上了无形的墙。 我正在寻找的function是与我所build模的土地发生明显的碰撞,所以英雄节点不能在土地上飞行,并被迫移动。 注意:我没有在搅拌机中进行任何y轴的转换,xcode也只是简单地将节点90度旋转到-x轴。 编辑:代码我试图添加物理形状 landscapeNode.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:[SCNPhysicsShape shapeWithNode: [landscapeScene.rootNode childNodeWithName:@"Grid" recursively:NO] options:@{SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron}]]; landscapeNode.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:[SCNPhysicsShape shapeWithNode: landscapeNode options:@{SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron}]]; landscapeNode.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:[SCNPhysicsShape shapeWithGeometry: landscapeNode.geometry options:@{SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron}]];

如何将二维点转换为三维使用SceneKit的unprojectPoint没有深度值?

是否可以使用SceneKit的unprojectPoint将2D点转换为3D而不具有深度值? 我只需要在XZ平面中find3D位置。 因为我没有使用它,所以Y可以是0或者任何值。 我正在尝试为iOS 8 Beta做这个。 我有类似的JavaScript和Three.js(WebGL)是这样的: function getMouse3D(x, y) { var pos = new THREE.Vector3(0, 0, 0); var pMouse = new THREE.Vector3( (x / renderer.domElement.width) * 2 – 1, -(y / renderer.domElement.height) * 2 + 1, 1 ); // projector.unprojectVector(pMouse, camera); var cam = camera.position; var m = pMouse.y / ( pMouse.y – cam.y […]

iDevice态度:稳定四元数

我试图使用iDevice的态度self.motionManager.deviceMotion.attitude.quaternion设备搁在桌子上,但价值观是不一样的。 如何稳定这些值而不会导致不好的旋转? 我正在使用设备姿态旋转相机节点。 (x = -0.0055437298906573507, y = -0.0078092851375721247, z = -0.041180405121897398, w = 0.999105828407855) (x = -0.0061666945840810842, y = -0.0067849414785486747, z = -0.041464744435584115, w = 0.99909789881469635) (x = -0.0057767614213563457, y = -0.0075097232630314727, z = -0.041803806548186787, w = 0.99908091506248087) (x = -0.0054897030127900098, y = -0.0077124534854605253, z = -0.04219926058901851, w = 0.99906436410664467) (x = -0.0052714642886002782, y […]

SceneKit修改3D对象并导出文件

在我的应用程序中,我使用SceneKit框架在SCNView中显示3D对象,并导出修改后的文件,如颜色,温度等一些小的变化。但是我将原始文件导出到文档文件夹后。 在这里,我可以显示和做一些3D对象的修改,这看起来不错,我可以看到模拟器中SCNView的变化。 sceneView = [[SCNView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height – 100)]; [sceneView setBackgroundColor:[UIColor orangeColor]]; [self.view addSubview:sceneView]; sceneView.allowsCameraControl = true ; // Load 3D object NSString *path = [[NSBundle mainBundle] pathForResource:@“test” ofType:@"obj"]; NSURL * url = [NSURL fileURLWithPath:path]; scene = [SCNScene sceneWithURL:url options:nil error:nil]; sceneView.scene = scene ; // Processing— SCNLight *light =[[SCNLight alloc] init]; […]

SceneKit:关于使用Tron灯光周期来重现发光的光迹的build议

目标是在SceneKit中重现类似于下面的图像的光迹。 步道不需要如此详细,但是想法是达到类似的视觉效果。 我们尝试使用0.5左右不透明度的薄立方体。 我们连在一起200左右,并附加到一个节点作为一个光线。 那根本就不是高性能的。 这篇文章build议使用粒子发射器,但是当另一个物体碰到轨迹时,我们也需要检测碰撞。 类文件说,与粒子发射器的碰撞检测也不performance。 任何build议,以最好的方式来模拟一个类似的光迹? 一些考虑: 1)就像在Tron游戏中一样,这些光迹将长得更长。 对于基本的边界,假设将有2000 – 4000个节点损害这些光迹(每个玩家大约200个)。 我们可以把FPS降到30左右。 2)这些轨迹是否与来自devise者的图像/网格更好地组合,或者将它们构造出SCNShapes? 3)光迹必须能够检测到碰撞。 谢谢您的帮助!

SceneKit – 将立方体贴图映射到框

我看起来像一个立方体的纹理 我想在SceneKit视图中的立方体上使用它。 我正在使用SceneKit几何SCNBox 。 不幸的是,结果是纹理完全投射到每个面上,而不是仅使用相应的部分: let videoGeometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0) videoGeometry.firstMaterial?.isDoubleSided = true videoGeometry.firstMaterial?.diffuse.contents = UIImage(named: "test")! 我知道我可以在几何体上使用着色器修改器,但是我不确定从哪里开始。 由于纹理目前使用了六次,我的直觉是SCNBox几何可能不适合我的目标,但是我不知道如何改变它。

将离屏SCNScene渲染到UIImage中

我怎样才能渲染一个离屏的 SCNScene到UIImage ? 我知道SCNView提供了一个-snapshot方法,但不幸的是这对于离屏视图不起作用。 在其中一个答案build议使用glReadPixels从OpenGL读取位图数据之前,也曾经有过类似的问题 ,但是这种方法对于我来说不适用于离屏场景。 我试图使用SCNRenderer没有成功的渲染到GLKView的上下文中。

SceneKit中的自定义顶点属性

我正在使用SceneKit来生成一些自定义几何。 这工作正常,但我努力find一种方法来包括自定义顶点属性。 具体来说,我期望在每个顶点包含一个额外的SCNVector3。 我发现很多使用shaderModifiers的例子包含了依赖于自定义统一值的GLSL / Metal代码,但还没有遇到包含顶点属性的方法 。 这是可能与SceneKit,或者是我的思想倒退?