美文网首页
SCNNode类

SCNNode类

作者: 追梦_1c31 | 来源:发表于2019-11-24 17:53 被阅读0次

    SCNNode 被称为节点,一个大型的游戏场景结构就是由无数个小的节点组成,它有自己的位置和自身坐标系统,我们可以把几何模型,灯光,摄像机的游戏中的真实元素,吸附到SCNNode 节点上

    class名称

    CIFilter过滤器 筛选

    SCNLight灯光

    SCNCamera相机

    SCNGeometry几何学

    SCNSkinner-

    SCNMorpher变形器

    SCNConstraint约束

    SCNPhysicsBody物理体

    SCNPhysicsField物理领域

    SCNPhysicsBody-

    SCNHitTestResult点击测试结果

    SCNRenderer渲染器

    渲染代理

    @property(nonatomic,assign,nullable)id rendererDelegate;

    指定接收器的渲染器委托对象

    设置渲染器委托可防止SceneKit渲染器绘制节点,并允许您使用自定义OpenGL代码

    自定义渲染的首选方法是调整节点几何的不同材质的材质属性。 SCNMaterial符合SCNShadable协议,并允许使用GLSL进行更高级的渲染。

    您通常使用具有没有几何节点,并且仅用作空间中位置的渲染代理。 例如将粒子系统附加到该节点,并用自定义的OpenGL代码渲染它。

    当一个节点被渲染时调用

    -(void)renderNode:(SCNNode*)node renderer:(SCNRenderer*)renderer arguments:(NSDictionary<NSString*,id>*)arguments;

    node:要渲染的节点

    renderer:渲染到的场景渲染器

    arguments:(参数) 字典,其值是包装在NSValue对象中的SCNMatrix4矩阵

    自定义渲染的首选方法是调整节点几何的不同材质的材质属性。 SCNMaterial符合SCNShadable协议,并允许使用GLSL进行更高级的渲染。

    您通常使用具有没有几何的节点的渲染器代理,并且仅用作空间中的位置。 一个例子是将粒子系统附加到该节点,并用自定义的OpenGL代码渲染它。

    只有绘图调用和实现它们的方法应该在渲染器委托回调期间执行,模型(节点,几何体...)中的任何更改都会导致意外的结果。

    FOUNDATION_EXTERN NSString*constSCNModelTransform;//模型转换FOUNDATION_EXTERN NSString*constSCNViewTransform;//视图转换FOUNDATION_EXTERN NSString*constSCNProjectionTransform;//投影转换FOUNDATION_EXTERN NSString*constSCNNormalTransform;//正常转换FOUNDATION_EXTERN NSString*constSCNModelViewTransform;//正常模型视图转换FOUNDATION_EXTERN NSString*constSCNModelViewProjectionTransform;//模型视图投影转换

    可移动的提示

    typedefNS_ENUM(NSInteger,SCNMovabilityHint){SCNMovabilityHintFixed,//fixed 固定的SCNMovabilityHintMovable,//Movable 可移动的}

    节点

    +(instancetype)node;

    创造和初始化一个节点实例

    创建并初始化附加了指定几何的节点实例

    +(SCNNode *)nodeWithGeometry:(nullableSCNGeometry *)geometry;

    geometry:要附加的几何体

    复制节点

    - (instancetype)clone;

    返回接收器的副本。 返回的实例是自动释放的

    复制是递归的:每个子节点也将被克隆。 对于非递归复制,请改用复制

    复制的节点将与原始实例共享其附加对象(光,几何,摄像机,...)

    如果您想要独立于原始对象更改副本的材质,则必须单独复制节点的几何。

    平面克隆

    -(instancetype)flattenedClone;

    返回包含连接节点层次结构中包含的所有几何的几何的节点的克隆。

    返回的克隆是自动释放的

    管理节点属性

    @property(nonatomic,copy,nullable)NSString *name;

    确定接收器的名称

    光源

    @property(nonatomic,retain,nullable)SCNLight *light;

    确定附加到接收器的光

    相机

    @property(nonatomic,retain,nullable)SCNCamera *camera;

    确定附加到接收器的相机

    geometry

    @property(nonatomic,retain,nullable)SCNGeometry *geometry;

    返回附加到接收器的几何体

    skinner

    @property(nonatomic,retain,nullable)SCNSkinner *skinner

    返回附加到接收器的skinner

    形态结构贴图

    @property(nonatomic,retain,nullable)SCNMorpher *morpher;

    返回附加到接收器的形态结构贴图

    修饰节点的改变

    改变

    @property(nonatomic)SCNMatrix4 transform;

    确定接收器的变化

    变换是下面定义的位置,旋转和刻度的组合。 因此,当设置变换时,接收器的位置,旋转和缩放比例将更改为匹配新的变换

    位置

    @property(nonatomic)SCNVector3 position;

    确定接收器的位置

    旋转

    @property(nonatomic)SCNVector4 rotation;

    确定接收器的旋转

    旋转是轴角旋转。 三个第一分量是轴,第四分量是旋转(弧度)

    方向

    @property(nonatomic)SCNQuaternion orientation

    将接收器的方向确认为方向四元数

    欧拉角

    @property(nonatomic)SCNVector3 eulerAngles

    确认接收器的欧拉角.动画

    此向量中组件的顺序与旋转轴相匹配:

    1.节距(x分量)是关于节点x轴的旋转(以弧度表示)

    2.Yaw(y分量)是围绕节点的y轴的旋转(以弧度表示)

    3.滚动(z分量)是关于节点的z轴的旋转(以弧度表示)

    SceneKit以与组件相反的顺序应用这些旋转:

    1.首先滚动/转动

    2.然后偏航

    3.然后俯仰

    规模/比例

    @property(nonatomic)SCNVector3 scale;

    确定接收器比例

    枢轴/中心

    @property(nonatomic)SCNMatrix4 pivot;

    确定接收器的中心

    返回接收器的世界改变

    @property(nonatomic,readonly)SCNMatrix4 worldTransform;

    一个世界变化是相对于场景变化的

    修饰节点的可见性

    @property(nonatomic,getter=isHidden)BOOL hidden;

    确认是否显示接收器.默认为NO

    不透明的/不透明度

    @property(nonatomic)CGFloat opacity;

    确认接收器的不透明度.默认为1

    渲染顺序/渲染命令

    @property(nonatomic)NSInteger renderingOrder;

    确定接收器的渲染顺序

    渲染顺序是最后渲染最大节点.默认为0

    投下阴影

    @property(nonatomic)BOOL castsShadow;

    确定节点是否在阴影贴图中呈现.默认为YES

    可移动的线索

    @property(nonatomic)SCNMovabilityHint movabilityHint;

    提示忽略接收器的可移动性。 有关详细信息,请参阅上面的枚举。 默认为SCNMovabilityHintFixed

    管理节点层次

    父节点

    @property(nonatomic,readonly,nullable)SCNNode *parentNode;

    返回接收器的父节点

    子节点

    @property(nonatomic,readonly)NSArray *childNodes;

    返回接收器的子节点数组

    添加子节点

    -(void)addChildNode:(SCNNode*)child;

    child:要添加到接收器子节点数组的节点

    返回:将节点追加到接收器的子节点数组

    在指定索引处的子节点数组中插入节点

    -(void)insertChildNode:(SCNNode*)child atIndex:(NSUInteger)index;

    child:要插入的节点

    index:在子节点数组中插入节点的索引

    从父节点删除

    - (void)removeFromParentNode;

    删除的节点是来自于接收器父节点的子节点数组

    从接收者的childNode数组中删除`child',如果非零,则插入'child2'

    -(void)replaceChildNode:(SCNNode*)oldChild with:(SCNNode*)newChild;

    oldChild:要替换的节点在childNodes数组中

    newChild:将替换前一个节点的新节点。替换oldChild

    如果child的parentNode不是接收者,则行为是未定义的

    搜索节点的层次结构

    -(nullableSCNNode *)childNodeWithName:(NSString *)namerecursively:(BOOL)recursively;

    name:要搜索的节点名称

    recursively:如果你想搜索通过[递归]

    返回在指定的节点树中找到的第一个节点,用遍历去搜索预订的树

    通过测试的子节点

    -(NSArray<SCNNode*>*)childNodesPassingTest:(NS_NOESCAPEBOOL(^)(SCNNode*child,BOOL*stop))predicate;

    predicate:(谓语、断言)应用于接收器的子节点的block。 该block有两个参数:“child”是子节点,“stop”是对布尔值的引用。 该block可以将值设置为YES以停止进一步处理节点层次结构。 stop参数是一个out-only参数。 您应该只在block内将此布尔设置为YES。 该block返回一个布尔值,指示“child”是否通过测试。

    返回在给定的block中通过测试的接收器的子节点,搜索是递归的,并且使用预定树遍历

    罗列使用block的子节点

    -(void)enumerateChildNodesUsingBlock:(NS_NOESCAPEvoid(^)(SCNNode*child,BOOL*stop))block;

    block:应用于接收器子节点的block。 该block有两个参数:“child”是子节点,“stop”是对布尔值的引用。 该block可以将值设置为YES以停止进一步处理节点层次结构。 stop参数是一个out-only参数。 你应该只在block内将此布尔设置为YES。

    在接收器下的每个子节点上执行给定的block,搜索是递归的,并且使用预定树遍历

    列举使用block的层级

    -(void)enumerateHierarchyUsingBlock:(NS_NOESCAPEvoid(^)(SCNNode*node,BOOL*stop))block;

    block:应用于接收器及其子节点的block。 该block采用两个参数:“节点”是接收器(包括接收器)的层次结构中的节点,“停止”是对布尔值的引用。 该block可以将值设置为YES以停止进一步处理节点层次结构。 stop参数是一个out-only参数。 你应该只在block内将此布尔设置为YES。

    执行在接收器和子节点上给定的block,搜索是递归的,并且使用预定树遍历

    在节点坐标系之间转换

    改变位置:到节点,将接收器的坐标系统的位置转换为指定节点的位置

    -(SCNVector3)convertPosition:(SCNVector3)positiontoNode:(nullableSCNNode *)node;

    position:(位置) 在接收器的本地坐标系中指定的位置

    node:(节点)要转换其坐标系“位置”的节点. 如果“node”为nil,此方法将转换为世界坐标

    改变位置: 从节点,将位置从给定节点的坐标系转换为接收器的坐标系

    -(SCNVector3)convertPosition:(SCNVector3)positionfromNode:(nullableSCNNode *)node;

    position:在"节点"的局部坐标系中指定位置)

    node:要转换其坐标系“位置”的节点。 如果“node”为nil,则此方法将从世界坐标转换。

    将接收器的坐标系统的变换转换为指定节点的坐标系

    -(SCNMatrix4)convertTransform:(SCNMatrix4)transformtoNode:(nullableSCNNode *)node;

    transform:(变换,改变,使...变形),在接收器的局部坐标系中指定的变换

    node:要转换其坐标系“变换”的节. 如果“node”为nil,此方法将转换为世界坐标

    将从给定节点的坐标系变换到接收器的坐标系的变换

    -(SCNMatrix4)convertTransform:(SCNMatrix4)transformfromNode:(nullableSCNNode *)node;

    transform:在“node”的局部坐标系中指定的变换)

    node:要转换其坐标系“变换”的节点。 如果“node”为nil,则此方法将从世界坐标转换

    管理SCNNodel的物理体,接收器的物理体的描述

    @property(nonatomic,retain,nullable)SCNPhysicsBody *physicsBody;

    管理节点的物理场

    @property(nonatomic,retain,nullable)SCNPhysicsField *physicsField;

    接收器的物理场的描述,默认为nil

    管理节点的约束

    @property(copy,nullable)NSArray *constraints;

    应用于接收器的SCNConstraint数组

    可以基于当前事务来隐式动画添加或删除约束

    访问节点的过滤器

    @property(nonatomic,copy,nullable)NSArray *filters;

    应用于接收器及其子节点的渲染的Core Image过滤器数组。

    默认为nil。 应该通过在过滤器附加到的每个节点上调用setValue:forKeyPath:来修改过滤器属性。 如果在将过滤器附加到节点之后直接修改过滤器的输入,则行为是未定义的

    访问描述节点

    @property(nonatomic,readonly)SCNNode *presentationNode;

    返回包含当前事务开始时所有属性的节点的副本,并应用任何活动动画

    这给出了当前显示的节点的版本的近似,尝试以任何方式修改返回的节点的效果未定义。 返回的节点不具有父节点和子节点

    暂停

    @property(nonatomic,getter=isPaused)BOOL paused;

    控制节点的动作和动画是否已更新或已暂停. 默认为NO

    Hit Testing in the Node,命中测试从段到点:到点:选项:

    -(NSArray<SCNHitTestResult*>*)hitTestWithSegmentFromPoint:(SCNVector3)pointA toPoint:(SCNVector3)pointB options:(nullableNSDictionary<NSString*,id>*)options;

    pointA:段相对于接收器的第一点

    pointB:段相对于接收器的第二点

    options:可选参数(有关可用选项,请参阅SCNSceneRenderer.h中的“命中测试选项”一节

    返回接收器子树中与指定段相交的每个节点的SCNHitTestResult数组

    有关屏幕空间命中测试方法,请参阅SCNSceneRenderer.h

    相关文章

      网友评论

          本文标题:SCNNode类

          本文链接:https://www.haomeiwen.com/subject/hejqyctx.html