SCNNode類

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市忧勿,隨后出現(xiàn)的幾起案子杉女,更是在濱河造成了極大的恐慌,老刑警劉巖鸳吸,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熏挎,死亡現(xiàn)場離奇詭異,居然都是意外死亡晌砾,警方通過查閱死者的電腦和手機坎拐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來养匈,“玉大人哼勇,你說我怎么就攤上這事∨缓酰” “怎么了积担?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長猬仁。 經常有香客問我帝璧,道長,這世上最難降的妖魔是什么湿刽? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任的烁,我火速辦了婚禮,結果婚禮上叭爱,老公的妹妹穿的比我還像新娘撮躁。我一直安慰自己,他們只是感情好买雾,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布把曼。 她就那樣靜靜地躺著,像睡著了一般漓穿。 火紅的嫁衣襯著肌膚如雪嗤军。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天晃危,我揣著相機與錄音叙赚,去河邊找鬼老客。 笑死,一個胖子當著我的面吹牛震叮,可吹牛的內容都是我干的胧砰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼苇瓣,長吁一口氣:“原來是場噩夢啊……” “哼尉间!你這毒婦竟也來了?” 一聲冷哼從身側響起击罪,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤哲嘲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后媳禁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眠副,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年竣稽,在試婚紗的時候發(fā)現(xiàn)自己被綠了囱怕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡毫别,死狀恐怖光涂,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拧烦,我是刑警寧澤忘闻,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站恋博,受9級特大地震影響齐佳,放射性物質發(fā)生泄漏篷扩。R本人自食惡果不足惜障贸,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扁眯。 院中可真熱鬧疫衩,春花似錦硅蹦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鲤拿,卻和暖如春假褪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背近顷。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工生音, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宁否,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓缀遍,卻偏偏與公主長得像慕匠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子域醇,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,092評論 1 32
  • 目錄一絮重、介紹二、渲染引擎三歹苦、解析與DOM樹構建四、渲染樹構建五督怜、布局六殴瘦、繪制七、動態(tài)變化八号杠、渲染引擎的線程九蚪腋、CS...
    饑人谷_米彌輪閱讀 2,454評論 0 10
  • 前端必讀:瀏覽器內部工作原理[https://kb.cnblogs.com/page/129756/] 作者: T...
    我是強強閱讀 1,138評論 0 2
  • 簡介網絡瀏覽器很可能是使用最廣的軟件。在這篇入門文章中姨蟋,我將會介紹它們的幕后工作原理屉凯。我們會了解到,從您在地址欄輸...
    wengjq閱讀 2,012評論 2 15
  • 早上八點鐘要出門眼溶,我六點鐘就要起床悠砚,我也不化妝我也不打扮,可就是要磨到這個點堂飞,本著“吾自三省吾身“的原則灌旧,我也曾經...
    Cjie_dfe0閱讀 161評論 0 0