SCNNode 被稱為節(jié)點,一個大型的游戲場景結構就是由無數(shù)個小的節(jié)點組成,它有自己的位置和自身坐標系統(tǒng),我們可以把幾何模型矾飞,燈光,攝像機的游戲中的真實元素呀邢,吸附到SCNNode 節(jié)點上
class | 名稱 |
---|---|
CIFilter | 過濾器 篩選 |
SCNLight | 燈光 |
SCNCamera | 相機 |
SCNGeometry | 幾何學 |
SCNSkinner | - |
SCNMorpher | 變形器 |
SCNConstraint | 約束 |
SCNPhysicsBody | 物理體 |
SCNPhysicsField | 物理領域 |
SCNPhysicsBody | - |
SCNHitTestResult | 點擊測試結果 |
SCNRenderer | 渲染器 |
渲染代理
@property(nonatomic,assign,nullable)id <SCNNodeRendererDelegate> rendererDelegate;
指定接收器的渲染器委托對象
設置渲染器委托可防止SceneKit渲染器繪制節(jié)點洒沦,并允許您使用自定義OpenGL代碼
自定義渲染的首選方法是調整節(jié)點幾何的不同材質的材質屬性。 SCNMaterial符合SCNShadable協(xié)議价淌,并允許使用GLSL進行更高級的渲染申眼。
您通常使用具有沒有幾何節(jié)點,并且僅用作空間中位置的渲染代理蝉衣。 例如將粒子系統(tǒng)附加到該節(jié)點括尸,并用自定義的OpenGL代碼渲染它。
當一個節(jié)點被渲染時調用
- (void)renderNode:(SCNNode *)node renderer:(SCNRenderer *)renderer arguments:(NSDictionary<NSString *, id> *)arguments;
node
:要渲染的節(jié)點
renderer
:渲染到的場景渲染器
arguments
:(參數(shù)) 字典病毡,其值是包裝在NSValue對象中的SCNMatrix4矩陣
自定義渲染的首選方法是調整節(jié)點幾何的不同材質的材質屬性濒翻。 SCNMaterial符合SCNShadable協(xié)議,并允許使用GLSL進行更高級的渲染啦膜。
您通常使用具有沒有幾何的節(jié)點的渲染器代理有送,并且僅用作空間中的位置。 一個例子是將粒子系統(tǒng)附加到該節(jié)點僧家,并用自定義的OpenGL代碼渲染它雀摘。
只有繪圖調用和實現(xiàn)它們的方法應該在渲染器委托回調期間執(zhí)行,模型(節(jié)點啸臀,幾何體...)中的任何更改都會導致意外的結果届宠。
FOUNDATION_EXTERN NSString *const SCNModelTransform;//模型轉換
FOUNDATION_EXTERN NSString *const SCNViewTransform;//視圖轉換
FOUNDATION_EXTERN NSString *const SCNProjectionTransform;//投影轉換
FOUNDATION_EXTERN NSString *const SCNNormalTransform;//正常轉換
FOUNDATION_EXTERN NSString *const SCNModelViewTransform;//正常模型視圖轉換
FOUNDATION_EXTERN NSString *const SCNModelViewProjectionTransform;//模型視圖投影轉換
可移動的提示
typedef NS_ENUM(NSInteger, SCNMovabilityHint) {
SCNMovabilityHintFixed,//fixed 固定的
SCNMovabilityHintMovable,//Movable 可移動的
}
節(jié)點
+ (instancetype)node;
創(chuàng)造和初始化一個節(jié)點實例
創(chuàng)建并初始化附加了指定幾何的節(jié)點實例
+ (SCNNode *)nodeWithGeometry:(nullableSCNGeometry *)geometry;
geometry
:要附加的幾何體
復制節(jié)點
- (instancetype)clone;
返回接收器的副本。 返回的實例是自動釋放的
復制是遞歸的:每個子節(jié)點也將被克隆乘粒。 對于非遞歸復制豌注,請改用復制
復制的節(jié)點將與原始實例共享其附加對象(光,幾何灯萍,攝像機轧铁,...)
如果您想要獨立于原始對象更改副本的材質,則必須單獨復制節(jié)點的幾何旦棉。
平面克隆
- (instancetype)flattenedClone;
返回包含連接節(jié)點層次結構中包含的所有幾何的幾何的節(jié)點的克隆齿风。
返回的克隆是自動釋放的
管理節(jié)點屬性
@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
形態(tài)結構貼圖
@property(nonatomic,retain,nullable)SCNMorpher *morpher;
返回附加到接收器的形態(tài)結構貼圖
修飾節(jié)點的改變
改變
@property(nonatomic)SCNMatrix4 transform;
確定接收器的變化
變換是下面定義的位置,旋轉和刻度的組合绑洛。 因此救斑,當設置變換時,接收器的位置真屯,旋轉和縮放比例將更改為匹配新的變換
位置
@property(nonatomic)SCNVector3 position;
確定接收器的位置
旋轉
@property(nonatomic)SCNVector4 rotation;
確定接收器的旋轉
旋轉是軸角旋轉脸候。 三個第一分量是軸,第四分量是旋轉(弧度)
方向
@property(nonatomic)SCNQuaternion orientation
將接收器的方向確認為方向四元數(shù)
歐拉角
@property(nonatomic)SCNVector3 eulerAngles
確認接收器的歐拉角.動畫
此向量中組件的順序與旋轉軸相匹配:
- 1.節(jié)距(x分量)是關于節(jié)點x軸的旋轉(以弧度表示)
- 2.Yaw(y分量)是圍繞節(jié)點的y軸的旋轉(以弧度表示)
- 3.滾動(z分量)是關于節(jié)點的z軸的旋轉(以弧度表示)
SceneKit以與組件相反的順序應用這些旋轉:
- 1.首先滾動/轉動
- 2.然后偏航
- 3.然后俯仰
規(guī)模/比例
@property(nonatomic)SCNVector3 scale;
確定接收器比例
樞軸/中心
@property(nonatomic)SCNMatrix4 pivot;
確定接收器的中心
返回接收器的世界改變
@property(nonatomic,readonly)SCNMatrix4 worldTransform;
一個世界變化是相對于場景變化的
修飾節(jié)點的可見性
@property(nonatomic,getter=isHidden)BOOL hidden;
確認是否顯示接收器.默認為NO
不透明的/不透明度
@property(nonatomic)CGFloat opacity;
確認接收器的不透明度.默認為1
渲染順序/渲染命令
@property(nonatomic)NSInteger renderingOrder;
確定接收器的渲染順序
渲染順序是最后渲染最大節(jié)點.默認為0
投下陰影
@property(nonatomic)BOOL castsShadow;
確定節(jié)點是否在陰影貼圖中呈現(xiàn).默認為YES
可移動的線索
@property (nonatomic)SCNMovabilityHint movabilityHint;
提示忽略接收器的可移動性。 有關詳細信息运沦,請參閱上面的枚舉泵额。 默認為SCNMovabilityHintFixed
管理節(jié)點層次
父節(jié)點
@property(nonatomic,readonly,nullable)SCNNode *parentNode;
返回接收器的父節(jié)點
子節(jié)點
@property(nonatomic,readonly)NSArray<SCNNode *> *childNodes;
返回接收器的子節(jié)點數(shù)組
添加子節(jié)點
- (void)addChildNode:(SCNNode *)child;
child
:要添加到接收器子節(jié)點數(shù)組的節(jié)點
返回:將節(jié)點追加到接收器的子節(jié)點數(shù)組
在指定索引處的子節(jié)點數(shù)組中插入節(jié)點
- (void)insertChildNode:(SCNNode *)child atIndex:(NSUInteger)index;
child
:要插入的節(jié)點
index
:在子節(jié)點數(shù)組中插入節(jié)點的索引
從父節(jié)點刪除
- (void)removeFromParentNode;
刪除的節(jié)點是來自于接收器父節(jié)點的子節(jié)點數(shù)組
從接收者的childNode數(shù)組中刪除`child',如果非零携添,則插入'child2'
- (void)replaceChildNode:(SCNNode *)oldChild with:(SCNNode *)newChild;
oldChild
:要替換的節(jié)點在childNodes數(shù)組中
newChild
:將替換前一個節(jié)點的新節(jié)點嫁盲。替換oldChild
如果child的parentNode不是接收者,則行為是未定義的
搜索節(jié)點的層次結構
- (nullableSCNNode *)childNodeWithName:(NSString *)name recursively:(BOOL)recursively;
name
:要搜索的節(jié)點名稱
recursively
:如果你想搜索通過[遞歸]
返回在指定的節(jié)點樹中找到的第一個節(jié)點烈掠,用遍歷去搜索預訂的樹
通過測試的子節(jié)點
- (NSArray<SCNNode *> *)childNodesPassingTest:(NS_NOESCAPEBOOL (^)(SCNNode *child,BOOL *stop))predicate;
predicate
:(謂語羞秤、斷言)應用于接收器的子節(jié)點的block。 該block有兩個參數(shù):“child”是子節(jié)點向叉,“stop”是對布爾值的引用锥腻。 該block可以將值設置為YES以停止進一步處理節(jié)點層次結構。 stop參數(shù)是一個out-only參數(shù)母谎。 您應該只在block內將此布爾設置為YES瘦黑。 該block返回一個布爾值,指示“child”是否通過測試奇唤。
返回在給定的block中通過測試的接收器的子節(jié)點,搜索是遞歸的,并且使用預定樹遍歷
羅列使用block的子節(jié)點
- (void)enumerateChildNodesUsingBlock:(NS_NOESCAPEvoid (^)(SCNNode *child,BOOL*stop))block;
block
:應用于接收器子節(jié)點的block幸斥。 該block有兩個參數(shù):“child”是子節(jié)點,“stop”是對布爾值的引用咬扇。 該block可以將值設置為YES以停止進一步處理節(jié)點層次結構甲葬。 stop參數(shù)是一個out-only參數(shù)。 你應該只在block內將此布爾設置為YES懈贺。
在接收器下的每個子節(jié)點上執(zhí)行給定的block,搜索是遞歸的,并且使用預定樹遍歷
列舉使用block的層級
- (void)enumerateHierarchyUsingBlock:(NS_NOESCAPEvoid (^)(SCNNode *node,BOOL*stop))block;
block
:應用于接收器及其子節(jié)點的block经窖。 該block采用兩個參數(shù):“節(jié)點”是接收器(包括接收器)的層次結構中的節(jié)點,“停止”是對布爾值的引用梭灿。 該block可以將值設置為YES以停止進一步處理節(jié)點層次結構画侣。 stop參數(shù)是一個out-only參數(shù)。 你應該只在block內將此布爾設置為YES堡妒。
執(zhí)行在接收器和子節(jié)點上給定的block配乱,搜索是遞歸的,并且使用預定樹遍歷
在節(jié)點坐標系之間轉換
改變位置:到節(jié)點,將接收器的坐標系統(tǒng)的位置轉換為指定節(jié)點的位置
- (SCNVector3)convertPosition:(SCNVector3)position toNode:(nullableSCNNode *)node;
position
:(位置) 在接收器的本地坐標系中指定的位置
node
:(節(jié)點)要轉換其坐標系“位置”的節(jié)點. 如果“node”為nil,此方法將轉換為世界坐標
改變位置: 從節(jié)點,將位置從給定節(jié)點的坐標系轉換為接收器的坐標系
- (SCNVector3)convertPosition:(SCNVector3)position fromNode:(nullableSCNNode *)node;
position
:在"節(jié)點"的局部坐標系中指定位置)
node
:要轉換其坐標系“位置”的節(jié)點皮迟。 如果“node”為nil搬泥,則此方法將從世界坐標轉換。
將接收器的坐標系統(tǒng)的變換轉換為指定節(jié)點的坐標系
- (SCNMatrix4)convertTransform:(SCNMatrix4)transform toNode:(nullableSCNNode *)node;
transform
:(變換,改變,使...變形),在接收器的局部坐標系中指定的變換
node
:要轉換其坐標系“變換”的節(jié). 如果“node”為nil伏尼,此方法將轉換為世界坐標
將從給定節(jié)點的坐標系變換到接收器的坐標系的變換
- (SCNMatrix4)convertTransform:(SCNMatrix4)transform fromNode:(nullableSCNNode *)node;
transform
:在“node”的局部坐標系中指定的變換)
node
:要轉換其坐標系“變換”的節(jié)點忿檩。 如果“node”為nil,則此方法將從世界坐標轉換
管理SCNNodel的物理體,接收器的物理體的描述
@property(nonatomic,retain,nullable)SCNPhysicsBody *physicsBody;
管理節(jié)點的物理場
@property(nonatomic,retain,nullable)SCNPhysicsField *physicsField;
接收器的物理場的描述,默認為nil
管理節(jié)點的約束
@property(copy,nullable)NSArray<SCNConstraint *> *constraints;
應用于接收器的SCNConstraint數(shù)組
可以基于當前事務來隱式動畫添加或刪除約束
訪問節(jié)點的過濾器
@property(nonatomic,copy,nullable)NSArray<CIFilter *> *filters;
應用于接收器及其子節(jié)點的渲染的Core Image過濾器數(shù)組爆阶。
默認為nil燥透。 應該通過在過濾器附加到的每個節(jié)點上調用setValue:forKeyPath:來修改過濾器屬性代赁。 如果在將過濾器附加到節(jié)點之后直接修改過濾器的輸入,則行為是未定義的
訪問描述節(jié)點
@property(nonatomic,readonly)SCNNode *presentationNode;
返回包含當前事務開始時所有屬性的節(jié)點的副本兽掰,并應用任何活動動畫
這給出了當前顯示的節(jié)點的版本的近似,嘗試以任何方式修改返回的節(jié)點的效果未定義。 返回的節(jié)點不具有父節(jié)點和子節(jié)點
暫停
@property(nonatomic,getter=isPaused)BOOL paused;
控制節(jié)點的動作和動畫是否已更新或已暫停. 默認為NO
Hit Testing in the Node,命中測試從段到點:到點:選項:
- (NSArray<SCNHitTestResult *> *)hitTestWithSegmentFromPoint:(SCNVector3)pointA toPoint:(SCNVector3)pointB options:(nullableNSDictionary<NSString *,id> *)options;
pointA
:段相對于接收器的第一點
pointB
:段相對于接收器的第二點
options
:可選參數(shù)(有關可用選項徒役,請參閱SCNSceneRenderer.h中的“命中測試選項”一節(jié)
返回接收器子樹中與指定段相交的每個節(jié)點的SCNHitTestResult數(shù)組
有關屏幕空間命中測試方法孽尽,請參閱SCNSceneRenderer.h