Tag: scenekit

在场景中添加大量的自定义节点需要很长时间才能加载

我正在构build一个scenekit应用程序,但是我有一些更好的细节的问题。 我创build了一个scene ,我正在给它添加自定义的几何graphics,直到节点的数量达到大约100个,它才能正常工作。向场景添加大量节点是非常理想的,是否还有更简单的方法来实现? for i in 0..<modelArr!.count { let model = modelArr![i] let pos: [SCNVector3] = Parser.loadPosition(model) let norm:[SCNVector3] = Parser.loadNormals(model) let ind:[CInt] = Parser.loadIndices(model) let src = SCNGeometrySource(vertices: pos, count: pos.count) let norSrc = SCNGeometrySource(normals: norm, count: norm.count) //let indexData = NSData(bytes: ind, length: sizeof(CInt) * ind.count) let indexData = NSData(bytes: Array<CInt>(0..<CInt(ind.count)), length: ind.count […]

以video捕捉SkeneKit场景

我正在使用SceneKit与金属(不是OpenGL),并希望允许用户录制他玩游戏的video。 任何想法如何将场景渲染到video? (没有必要logging现场audio,这可能会使它更简单)

SceneKit:如何更新SCNGeometrySource

我正在做一个非常棒的iOS项目。 我决定使用sceneKit作为主要的框架。 我有一个问题: 当我在其上应用animation时,如何更新节点的SCNGeometrySource?

用于几何入口点的SceneKit着色器修改器适用于iOS,但不适用于OS X

我正在做一个SceneKit着色器修改器(用于几何入口点)的早期阶段,它根据高度贴图纹理来移动平面的几何。 计划是用它来创造地形。 在iOS中(编辑:iOS模拟器),着色器按照原样工作,但是将此警告打印到控制台: SceneKit:错误,无代码修饰无效 但是,当为OS X构build时,着色器会产生一个致命错误,而地形几何体只会显示为粉红色的矩形。 这是几何着色器修改器: uniform sampler2D displacementMap; const float intensity = 7.5; # pragma body vec4 displace = texture2D(displacementMap, _geometry.texcoords[0]); _geometry.position.z += displace.r * intensity; 这就是着色器如何连接到几何。 terrainScene是高度贴图,它位于着色器修改器中的漫reflection内容和自定义displacementMap贴图采样器值中: //displacement shader let mat = SCNMaterial() mat.diffuse.contents = terrainScene var displacementShader: String? guard let path = NSBundle.mainBundle().pathForResource("DisplaceGeometry", ofType: "shader") else {return} do { displacementShader = […]

为什么在SceneKit中不调用联系人委托?

我正在开发一款游戏,并且在SceneKit中的联系人代表面临着一个问题。 我在ViewController中声明了正确的委托,并使用它来设置委托: sceneView.scene?.physicsWorld.contactDelegate = self 它应该工作,事实上,它与XCode 6.4,但与testing版XCode 7它没有。 相同的代码。 我的问题是:这里有人能够知道一个临时修复吗?

修改三维模型的边界框大小

这个function应该是在一个狭窄的空间里添加一个3D模型来屏幕: func addCharacter(gridPosition: SCNVector3, levelNode: SCNNode){ let carScene = SCNScene(named: "assets.scnassets/Models/cube.dae") // Create a material using the model_texture.tga image let carMaterial = SCNMaterial() carMaterial.diffuse.contents = UIImage(named: "assets.scnassets/Textures/model_texture.tga") carMaterial.locksAmbientWithDiffuse = false // Create a clone of the Car node of the carScene – you need a clone because you need to add many cars let carNode […]

在SceneKit中,SCNLightTypeAmbienttypes的SCNLight是否忽略categoryBitMask参数?

这似乎! 这里categoryBitMask被忽略: ambientLight = [SCNLight light]; ambientLight.color = [UIColor colorWithRed:0.994 green:0.715 blue:0.179 alpha:1.000]; ambientLight.type = SCNLightTypeAmbient; ambientLight.categoryBitMask = 1; 这里工作! ambientLight = [SCNLight light]; ambientLight.color = [UIColor colorWithRed:0.994 green:0.715 blue:0.179 alpha:1.000]; ambientLight.type = SCNLightTypeOmni; ambientLight.categoryBitMask = 1;

SceneKit,SCNMaterial的翻转方向

对于SceneKit来说非常新颖,所以在这里寻找帮助: 我有一个SCNSphere与它的中心相机 我创build一个SCNMaterial,doubleSided,并将其分配给球体 由于相机在中心,图像看起来垂直翻转,当文本里面的东西完全混乱了。 所以我怎样才能翻转材料,或图像(虽然以后它会从video帧),任何其他build议是值得欢迎的。 这个解决scheme,顺便说一句,我失败了,normalImage作为一种材料应用(但图像翻转时,从球内看),但分配flippedImage结果没有任何材料(白色屏幕) let normalImage = UIImage(named: "text2.png") let ciimage = CIImage(CGImage: normalImage!.CGImage!) let flippeCIImage = ciimage.imageByApplyingTransform(CGAffineTransformMakeScale(-1, 1)) let flippedImage = UIImage(CIImage: flippeCIImage, scale: 1.0, orientation: .Left) sceneMaterial.diffuse.contents = flippedImage sceneMaterial.specular.contents = UIColor.whiteColor() sceneMaterial.doubleSided = true sceneMaterial.shininess = 0.5

在创build新的SCNNode之前移除SCNNode不释放内存

我正在构build一个应用程序,使用Scenekit来显示基于从数据库返回的信息的场景。 我创build了一个类func的自定义类创build一个SCNNode包含需要绘制的一切,并将其返回到我的SCNView。 在调用这个函数之前,我删除所有现有的节点 一切工作很好,直到我需要再次调用它。 删除旧的SCNNode之后在创build新内存之前,不会释放内存。 有没有一个标准的方式来删除和更换SCNNode,而不会超载内存? 我是iOS开发新手,从来没有真正完成graphics。 谢谢

相机不在Scenekit中跟踪飞机

我有一个飞行的飞机,我正在跟踪,我也显示了飞机已经跟随的道路。 我正在绘制圆柱体作为绘制path的线。 它的types在2点之间画线。 我有一个最初设置为(0,200,200)的cameraNode。 那时我可以看到飞机。 但是当我开始我的飞行。 它走出屏幕。 我想要2件事情: 只要按照飞机(path无关紧要)。 显示整个path,也是飞机。 我试图find最小广告最大x,y和z和平均值,但它没有工作。 如果你看到下面的gif太缩放,飞机已经移出屏幕 以下是我如何设置我的相机: – (void)setUpCamera { SCNScene *workingScene = [self getWorkingScene]; _cameraNode = [[SCNNode alloc] init]; _cameraNode.camera = [SCNCamera camera]; _cameraNode.camera.zFar = 500; _cameraNode.position = SCNVector3Make(0, 60, 50); [workingScene.rootNode addChildNode:_cameraNode]; SCNNode *frontCameraNode = [SCNNode node]; frontCameraNode.position = SCNVector3Make(0, 100, 50); frontCameraNode.camera = [SCNCamera camera]; frontCameraNode.camera.xFov […]