*)createBackgroundNode{ /// 创建一个背景色 SCNNode* bgNode = [SCNNode node]; bgNode.position = SCNVector3Make *)createShadowNode{ SCNNode *shadowNode = [SCNNode node]; shadowNode.geometry= [SCNPlane planeWithWidth *)createPlayNode{ SCNNode* playNode = [SCNNode node]; playNode.geometry = [SCNPlane planeWithWidth *)createMoreNode{ SCNNode* moreNode = [SCNNode node]; moreNode.geometry = [SCNPlane planeWithWidth *)createLowVoiceNode{ SCNNode* voiceLowNode = [SCNNode node]; voiceLowNode.geometry = [SCNPlane
jpARSCNView.delegate = self; <ARSCNViewDelegate> -(void)renderer:(id<SCNSceneRenderer>)renderer didAddNode:(SCNNode )node forAnchor:(ARAnchor *)anchor ; -(void)renderer:(id<SCNSceneRenderer>)renderer didUpdateNode:(SCNNode )node forAnchor:(ARAnchor *)anchor ; -(void)renderer:(id<SCNSceneRenderer>)renderer didRemoveNode:(SCNNode ]init]; SCNBox * jpBox = [SCNBox boxWithWidth:0.1 height:0.1 length:0.1 chamferRadius:0]; SCNNode * jpNode = [SCNNode nodeWithGeometry:jpBox]; jpNode.position = SCNVector3Make(0, 0, -0.5);
*pyramidNode = [SCNNode nodeWithGeometry:pyramid]; pyramidNode.position = SCNVector3Make(0, 0, 0); [ SCNSphere sphereWithRadius:1]; sphere.firstMaterial.diffuse.contents = [UIImage imageNamed:@"1.PNG"]; SCNNode *cylinderNode =[SCNNode nodeWithGeometry:cylinder]; cylinderNode.position = SCNVector3Make(0, 0, *shapdeNode =[SCNNode nodeWithGeometry:shape]; [scnView.scene.rootNode addChildNode:shapdeNode]; --- *torusNode = [SCNNode nodeWithGeometry:torus]; // 设置节点的位置 torusNode.position = SCNVector3Make(0, 0,
代码: SCNNode *drayFieldNode = [SCNNode node]; drayFieldNode.physicsField = [SCNPhysicsField dragField] 创建一个围绕轴旋转的力 + (SCNPhysicsField *)vortexField; 代码: - (void)addVortexField{ SCNNode *vortexFieldNode = 线性力 + (SCNPhysicsField *)linearGravityField; 代码: -(void)addLineGravity{ SCNNode *lineGravityNode = [SCNNode 代码: -(void)addElectricField{ SCNNode *electricFieldNode = [SCNNode node]; electricFieldNode.physicsField 给段代码自己看看,后面会专门讲解 SCNNode *boxNode = [SCNNode node]; boxNode.geometry = [SCNBox boxWithWidth:4 height:
*node))block; + (SCNAction *)runBlock:(void (^)(SCNNode *node))block queue:(dispatch_queue_t)queue; ---- 自定义动画介绍 + (SCNAction *)customActionWithDuration:(NSTimeInterval)seconds actionBlock:(void (^)(SCNNode scene]; 设置游戏场景 scnView.scene = [SCNScene scene]; 添加照相机 SCNCamera *camera = [SCNCamera camera]; SCNNode *cameraNode =[SCNNode node]; cameraNode.camera = camera; cameraNode.position = SCNVector3Make(0, 0, *boxNode =[SCNNode node]; boxNode.position = SCNVector3Make(0, 0, 0); boxNode.geometry = box; [scnView
设置物理世界执行的速度 self.scnView.scene.physicsWorld.speed = 5; 添加照相机 SCNCamera *camera = [SCNCamera camera]; SCNNode *cameraNode = [SCNNode node]; cameraNode.camera = camera; cameraNode.position = SCNVector3Make(0, 10 添加地板 SCNFloor *floor = [SCNFloor floor]; floor.firstMaterial.diffuse.contents = @"floor-frames.jpg"; SCNNode *floorNode = [SCNNode nodeWithGeometry:floor]; [self.scnView.scene.rootNode addChildNode:floorNode]; floorNode.physicsBody = [SCNPhysicsBody staticBody]; 添加一个聚焦灯光 SCNNode *lightNode = [SCNNode node];
TRUE; // 允许手动控制 [self.view addSubview:scnView]; 4.添加照相机到场景中去 SCNCamera *camera = [SCNCamera camera]; SCNNode *cameraNode = [SCNNode node]; cameraNode.camera = camera; camera.automaticallyAdjustsZRange = TRUE *text1 = [self createTextNodeWithString:@"库"]; SCNNode *text2 = [self createTextNodeWithString:@"走"] ; SCNNode *text3 = [self createTextNodeWithString:@"天"]; SCNNode *text4 = [self createTextNodeWithString *node =[SCNNode nodeWithGeometry:text]; // 创建一个物理身体,使用指定的形状 node.physicsBody = [SCNPhysicsBody bodyWithType
SCNScene sceneNamed:@"Model.scnassets/tjgc.scn"]; if (portalScene == nil) return; SCNNode *)portalNode imageName:(NSString *)imageName { SCNNode * childNode = [portalNode childNodeWithName *)portalNode imageName:(NSString *)imageName { SCNNode * childNode = [portalNode childNodeWithName *)portalNode imageName:(NSString *)imageName { SCNNode * childNode = [portalNode childNodeWithName == 代理方法 ============================== - (void)renderer:(id<SCNSceneRenderer>)renderer didAddNode:(SCNNode
import <SceneKit/SceneKit.h> 第四步 创建一个3D场景 self.scene = [SCNScene scene]; 第五步 创建一个球体 然后将其添加到场景中去 SCNNode *sphereNode = [SCNNode node]; sphereNode.geometry = [SCNSphere sphereWithRadius:SHPERE_RADIUS]; sphereNode.rotation sphereNode]; 第六步 我们知道现在球体是有了,但是我们还需要一个眼睛去观察球体,在全景下,眼睛是根据重力感应,来调节观察的角度,所以我们下面创建一个眼睛节点,然后将其放入场景的中心点 SCNNode *eyeNode = [SCNNode node]; eyeNode = [SCNNode node]; eyeNode.camera = [SCNCamera camera]; // 创建照相机对象
其实这个约束的原理是更改节点的transform的属性 4.怎么创建 // target 就是指向的那个目标节点 + (instancetype)lookAtConstraintWithTarget:(SCNNode 设置为NO 使用自身坐标系 + (instancetype)transformConstraintInWorldSpace:(BOOL)world withBlock:(SCNMatrix4 (^)(SCNNode *handNode = [SCNNode node]; handNode.geometry = [SCNBox boxWithWidth:20 height:20 length:20 chamferRadius ; upperArm.pivot = SCNMatrix4MakeTranslation(0, 50, 0); [upperArm addChildNode:lowerArm]; // 创建控制点 SCNNode *node = [SCNNode node]; node.position = SCNVector3Make(arc4random_uniform(100), arc4random_uniform(100
self.scnView.scene.rootNode addChildNode:sunNode]; 7.创建地月系(有点复杂哦) // 1.我们需要先创建一个地月系节点.并且设置它为太阳系的子节点 SCNNode *earthMoonNode = [SCNNode node]; earthMoonNode.position = SCNVector3Make(10, 0, 0); [sunNode addChildNode :earthMoonNode]; //2.创建一个地球节点,添加到地月系节点上去 SCNNode *earthNode = [SCNNode node]; earthNode.geometry = 9.创建两个视角 // 1.我们创建一个场景范围内的第三视角 @property(nonatomic,strong)SCNNode *thirdViewCamera; self.thirdViewCamera *firstViewCamera; self.firstViewCamera = [SCNNode node]; self.firstViewCamera.camera =[SCNCamera camera
每个虚拟物体都可以用 SCNNode 来代表,SCNNode 在 SCNScene 中展现,而无数SCNScene 组成 3D 世界。 我们可以通过这个代理方法得知我们添加一个虚拟物体到AR场景下的锚点(AR现实世界中的坐标) SCNNode SCNNode代表一个虚拟物体。 通过 SCNNode 可以对虚拟物体进行变换和旋转,还可以做几何变换,光照等操作。 SCNScene 在ARKit中它代表一个场景。SCNScene 包括背景 和 虚似物体。 而虚拟物体由 rootNode 存储,它就是前面介绍的 SCNNode。 ARAnchor 包含真实世界位置和方向的信息。通过它可以轻松地将虚拟物体添加,更新或从会话中删除。 @interface transDimenRoom : SCNNode @property (nonatomic, strong) SCNNode *walls; +(instancetype)transDimenRoomAtPosition
[self.sceneView.session pause]; } - (void)renderer:(id<SCNSceneRenderer>)renderer didAddNode:(SCNNode imageAnchor.referenceImage; if ([referenceImage.name isEqual: @"lcw"]) { SCNNode * tempNode = [SCNNode new]; CGFloat w = referenceImage.physicalSize.width;
,然后将SCNView 设置为plane渲染的内容 下面是全部代码 let scene = SCNScene() // 创建照相机 let cameraNode = SCNNode cameraNode) cameraNode.position = SCNVector3(x: 0, y: 10, z: 100) // 创建灯光 let lightNode = SCNNode SCNVector3(x: 0, y: 10, z: 10) scene.rootNode.addChildNode(lightNode) let ambientLightNode = SCNNode UIColor.black // 创建一面墙 let plane = SCNPlane(width: 50, height: 50) let planeNode = SCNNode let cameraNode1 = SCNNode() cameraNode1.camera = SCNCamera() sceneShip.rootNode.addChildNode(
UIColor blackColor]; self.scnView.scene = [SCNScene scene]; 添加摄像头 SCNCamera *camera = [SCNCamera camera]; SCNNode *cameraNode = [SCNNode node]; cameraNode.camera = camera; cameraNode.position = SCNVector3Make(0, 5, 10); [self.scnView.scene.rootNode addChildNode:cameraNode]; 添加聚光灯 SCNNode *lightNode = [SCNNode node text.font = [UIFont systemFontOfSize:2]; text.firstMaterial.diffuse.contents = @"1.PNG"; //绑定到节点上 SCNNode *textNode =[SCNNode nodeWithGeometry:text]; // 随机节点位置 textNode.position = SCNVector3Make(-arc4random_uniform
[SCNScene sceneNamed:@"art.scnassets/Menchi.dae"]; // 取出场景中根结点的第一个结点(目录根结点也就一个子结点,就是我们素材中的Menchi) SCNNode :action]; // 素材放大5倍(由于我们素材的尺寸太小了) node.transform = SCNMatrix4MakeScale(5, 5, 5); // �创建一个摄像机并放入场景中 SCNNode ]; // �摆放摄像机位置 cameraNode.position = SCNVector3Make(0, 5, 15); // 创建�灯光并放入场景中 SCNNode *lightNode = 10, 10); [scene.rootNode addChildNode:lightNode]; // create and add an ambient light to the scene SCNNode *ambientLightNode = [SCNNode node]; ambientLightNode.light = [SCNLight light]; ambientLightNode.light.type
- (void)renderer:(id <SCNSceneRenderer>)renderer willUpdateNode:(SCNNode *)node forAnchor:(ARAnchor * )anchor; - (void)renderer:(id <SCNSceneRenderer>)renderer didUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor; 比如我们要放置一张京剧脸谱贴合到用户脸上,我们可以生成一个脸谱的SCNNode - (SCNNode *)textureMaskNode { if (! - (void)renderer:(id<SCNSceneRenderer>)renderer willUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *) - (SCNNode *)occlusionMaskNode { if (!
*boxNode = [SCNNode node]; boxNode.geometry = box; boxNode.position = SCNVector3Make(0, 0, -11); // 把节点的位置固定在(0,0,-11) SCNNode *sphereNode = [SCNNode node]; sphereNode.geometry = sphere; sphereNode.position *lightNode = [SCNNode node]; lightNode.position = SCNVector3Make(0, 0, 100); // 设置光源节点的位置 lightNode.light *lightNode = [SCNNode node]; lightNode.position = SCNVector3Make(0, 0, -9); // 设置光源节点的位置 lightNode.light *lightNode = [SCNNode node]; lightNode.position = SCNVector3Make(0, 0, 0); // 设置光源节点的位置 lightNode.light
255.0 green:245/255.0 blue:245/255.0 alpha:1]; //创建场景 self.scnView.scene = [SCNScene scene]; 第六步 添加照相机 SCNNode *cameraNode =[SCNNode node]; cameraNode.camera = [SCNCamera camera]; cameraNode.position = SCNVector3Make (0, 0, 20); [self.scnView.scene.rootNode addChildNode:cameraNode]; 第七步 添加平行光 SCNNode *lightNode = [SCNNode SCNLightTypeDirectional; [self.scnView.scene.rootNode addChildNode:lightNode]; 第八步 创建文字几何模型 添加到场景中去 self.textNode = [SCNNode
scnView.scene = [SCNScene scene]; scnView.allowsCameraControl = true; [self.view addSubview:scnView]; 第四步 添加照相机 SCNNode *cameraNode = [SCNNode node]; cameraNode.position = SCNVector3Make(0, 0, 20); cameraNode.camera = [SCNCamera = @"mapImage.png"; g2.firstMaterial.diffuse.contents = @"mapImage.png"; 第七步 把第一个几何体绑定到节点上添加到场景中去 SCNNode *planeNode = [SCNNode node]; [scnView.scene.rootNode addChildNode:planeNode]; planeNode.geometry = g1 再看我们的代码怎么写 NSURL *url3 = [[NSBundle mainBundle]URLForResource:@"foldingMap" withExtension:@"dae"]; SCNNode