一 类及节点类型
SCNView // SceneKit 的3D视图
SCNSceneRenderer
SCNScene // 场景
SCNNode // 节点
SCNLight // 灯光
SCNLightTypeAmbient // 环境光
SCNLightTypeOmni // 点光
SCNLightTypeDirectional // 平行光
SNCLightTypeSpot // 聚焦光
SCNCamera // 摄像机
SCNMaterial // 材质
SCNAudioSource // 声音
SCNAction // 动作: 主要改变节点动画
SCNTransaction // 改变节点属性的事件
SCNGeometry // 内置3维几何体
SCNText // 文字
SCNShape // 二维平面: 可以拉伸成三维
SCNFloor // 地面
SCNBox // 六面体
SCNCapsule // 圆角圆柱
SCNCone // 圆锥
SCNCylinder// 圆柱
SCNPlane // 平面
SCNPyramid // 锥体
SCNSphere // 面球体
SCNGeosphere// 真球体
SCNTorus // 圆角圆环
SCNTube // 圆环
SCNParticleSystem // 粒子系统
SCNPhysicsField // 物理场
SCNPhysicsBody // 物理体
SCNPhysicsShape // 物理边界(用于碰撞检测) SCNGeometry类型
二 scnView视图属性
scnView.showsStatistics = true // 1.显示统计数据
scnView.allowsCameraControl = true // 2.打开相机控制
scnView.autoenablesDefaultLighting = true // 3.自动启用默认光源
scnView.backgroundColor = UIColor.black // 背景色
scnView.antialiasingMode = SCNAntialiasingMode.multisampling4X // 抗锯齿
三 SCNScene场景属性
scene.background.contents = ["right.jpg", "left.jpg", "top.jpg", "bottom.jpg", "front.jpg", "back.jpg"] // 天空盒子
stageScene.physicsWorld.contactDelegate = self // 物理世界反馈主体
scene.rootNode.childNode(withName: "floor", recursively: false) // 查找场景节点
scene.rootNode.addChildNode(节点名) // 添加节点
scene.removeFromParentNode // 移除所有节点
四 SCNNode节点属性
node.removeFromParentNode() // 删除节点
node.position = SCNVector3(x: 0, y: 10, z: 10) // 位置
node.physicsBody = PhysicsBody() // 物理体
五 PhysicsBody物理体
// Static(静态的):不可动, 不受力和碰撞影响;
// Dynamic(动态的):可以被力和碰撞影响;
// Kinematic(运动学的):可以移动, 不受力和碰撞影响;
let newPhysicsBody = SCNPhysicsBody(
//物理类型: .static/.dynamic/.kinematic
type: .dynamic,
// 物理形状
shape: SCNPhysicsShape(geometry: SCNCylinder(radius: 半径[对应scn模型里], height: 高度[对应scn模型里]), options: nil )
)
newPhysicsBody.mass = 1 // 重量
newPhysicsBody.restitution = 0.5 // 反弹系数
coinPhysicsBody.isAffectedByGravity = true // 重力
elasticity // 弹力:设置物体发生碰撞时的弹力,比如当物体碰撞时弹开的高度、角度的大小,物体的韧性等。
friction // 摩擦力:设置物体滑动时的摩擦力。
density // 密度:设置物体密度,密度越大加速度越大。
resistance // 阻力:设置物体滑动时的阻力,与`friction`不同的是,它只作用于线性滑动时。
angularResistance // 角度阻力:物体进行旋转运动时的阻力设置。
allowsRotation // 允许旋转: 该属性并不是模拟现实中的一些行为属性,它是物体是否可以旋转的开关属性。
// 碰撞联系
newPhysicsBody.categoryBitMask = 2 // 类别掩码,唯一,只能为2的次幂
newPhysicsBody.collisionBitMask = 6 // 碰撞掩码,可以跟那些物体进行碰撞(所有类别掩码相加)
newPhysicsBody.contactTestBitMask = 6 // 可以跟哪些物体进行碰撞检测
六 力
1. forces 三向力: 推力 /左转 /右转
// SCNVector3表示,使用applyForce(_: atPosition: impluse:)方法来添加一个力,并指定位置.一个力可以同时影响线速度和角速度. impluse脉冲状只作用一次,比如踢一个球,非脉冲状的则可以持续作用. Position位置可以影响力的作用效果
applyForce(_: atPosition: impluse:)
applyImpulse: 直接叠加速度
2. torque 力矩
// 力矩使用4维向量SCNVector4表示,使用applyTorque(_: impulse:)来添加一个力矩,力矩只影响角动量. x-,y-,z-指定旋转轴,w-指定旋转角度也就是大小值 Scene Kit使用国际单位制,因此质量单位是kg千克,力的单位是N牛,脉冲单位是N-s牛秒,力矩单位是N-m牛米.
applyTorque(_: impulse:)
七 加速器
CoreMotion
立意高远,以小见大,引发读者对社会/人性的深层共鸣。
文章已具雏形,需进一步聚焦核心问题。