導航:首頁 > 文件教程 > scenekit中文教程

scenekit中文教程

發布時間:2023-04-21 20:23:19

㈠ SceneKit開發教程02 | SCNScene和SCNView

本文滑租握結構如下:

開始之前,需要做一個名詞的中英文對照。

SCNScene對象表示三維場景及其內容 。節點組成的層級結構(樹形結構)構成整個場景的骨架,相機、燈光、幾型銷何體等「內容」附著在節點上,這些節點以及附著在節點上屬性,構成了一個可見的3D場景。

場景通過 SCNView 、 SCNLayer (僅限macOS)或 SCNRenderer 來展示,這幾個展示類都遵循 SCNSceneRenderer 協議,該協議定義這些類共享的屬性和方法。

SCNScene類還提供讀寫場景文件的界面。

一般,可以使用一些軟體,比如3Dsmax、maya,來製作3D場景,然後將這些場景文件導入到項目中來。

SceneKit提供了如下API來載入場景文件:

SceneKit 還提供了一個API,從Model I/O資源中載入場景:

Model I/O此處不做展開講述,你知道有這種方法即可。

回憶我們之前創建的空AR項目,裡面都會有個art.scnassets。

文件夾里存放場景資源(示例中的ship.scn)和紋理資源(示例中的texture.png),Xcode會優化這些資源,以便在每個設備上獲得最佳性能,比如說應用瘦身和按需載入資源。

這部分內容,我在《 SceneKit | 載入 3D模型(obj/scn/dae)到你的AR項目中 》中,有demo演示!

SceneKit 提供了創建場景的類方法:

調用這個方法可以創建一個空場景,這個空場景只包含一個「不包含任何內容的 root 節點」,可以通過在root節點上添加子節點的方式,來創建一個場景。

這個功能是很重要的,比如,我們團隊另外一位同事最近在做的一件事兒就是,將 ARKit 輸出 含有深度數據的 ARFaceGeometry 人臉從iPhone X中導出來,然後利用3D列印設備列印人臉。我下面介紹的方法就是導出人臉的其中一種方式。

SceneKit 提供了 保存場景方法:

改方法可以將SceneKit的場景寫入到文件中,文件的格式由 操作信慶系統 你指定的文件後綴 來決定:

上面講述了一些高頻使用的API,SCNScene更多的API可以自行前往 開發者文檔 查詢。

SCNView繼承自UIView,用來展示SceneKit 3D內容。

系統提供了如下init方法:

通過設置 scene 屬性,在view上顯示指定的場景。

SCNView 提供了三個方法,來管理當前場景中的動畫:

SCNView 提供了一個快照當前場景的方法,可以將當前的場景渲染到新的圖像對象上:

下一篇 《iOS 11 SceneKit開發教程03 | 使用SCNNode && SCNReferenceNode定義場景結構》 ,會介紹SCNNode和SCNReferenceNode相關內容。

㈡ VR+全景播放器+頭控講解-01

VR+全景播放器+頭控講解-01-知識儲備
VR+全景播放器+頭控講解-02-創建球體
VR+全景播放器+頭控講解-03-渲染視頻
VR+全景播放器+頭控講解-04-滑動手舉和勢
VR+全景播放器+頭控講解-05-伸縮畫面
VR+全景播放器+頭控講解-06-頭控實現
VR+全景播放器+頭控講解-07-分屏技術

寫一個全景+VR的播放器

一般vr+全景播放器有一下幾個功能

近兩年隨著AR/VR逐漸火熱,企業為了給自己的產品中加入枝答檔新的元素,有可能會將3D元素添加到應用中去,對於IOS 工程師,你有三種選擇 OpenGL ES / Metal/SceneKit ,按照性能排名 Metal 第一位,SceneKit性能相對來說沒有前兩者高,但是對於開發難度來說,SceneKit的難度最低,因為他是面向對象的,對於iOS 開發者猛亂,學習成本是最低的。

掌握以上知識點 輕松完成播放器的全部需求

後面我會分為以下幾個模塊進行講解

a. 如何創建一個渲染全景視頻的球體
b. 如何創建將APlayer 載入的視頻渲染到球體上
c. 如何實現通過手勢移動來調節呈現出來的畫面位置
d. 捏合手勢如何縮放畫面
f. 頭控部分布局
g. 如何實現分屏顯示

SceneKit 中文教程

㈢ ios開發 scenekit導入模型後怎麼讓模型動起來

ios8之後蘋果推出了一個3D模型渲染框架。SceneKit。但是國內針對這方面的教程並不是很多。前兩天搞了一下也是一頭霧水,終於把最基礎的內容搞明白了之後,寫下這篇隨筆作為cnblogs的開篇,希望能一直寫下去。
SceneKit現在可以支持有限的幾種模型,截止到我寫這篇文章為止似乎只有.dae和.abc後一種模型我沒有使用過。這篇文章只針對.dae模型寫。
首先如果是希望載入一個已有的,不需要程序在運行的時候動態添加的dae模型。那麼我們可以直接新建一個game類型的工程。在選項中選擇SceneKit,在程序中載入自帶模型的那句話中將模型名稱替換即可。本文主要講一下如何導出dae模型,並在server端動態下載並顯示。
首先我們手中有一個.stl或者其他的模型文件,將模型文件轉換成.dae文件我使用Blender。
(1)在Blender中新建場景
(2)在右上側欄中將自動生成的Cube、Camera等3個物體刪掉
(3)導入我們已有的模型文件
(4)調整我們的模型文件的方向、大小
(5)在右上側欄更改模型文件及子文件的名字為你要導出的dae文件的名字(這一步很重要!)
(6)在左側欄中Edit Options中點擊Smooth
(7)File->export->dae
(8)在接下來的頁面中,我們選擇導出的位置和文件的名字,並且在左側選項Texture中選擇include material texture(同樣重要!)
接下來我們在桌面上新建一個文件夾,暫時起名為model,更改後綴為.scnassets,將我們生成好的模型文件拷貝進去。SceneKit對於動態添加文件夾寫了兩個腳本。不太清楚作用原理是什麼,以後再研究吧。暫時知道怎麼用就行。將SceneKitAssets、scntool文件拷貝到model.scnassets所在的目錄下,進入終端並cd到該目錄下,運行
1 ./SceneKitAssets model.scnassets -o model-o.scnassets

如果終端沒有報錯,並且生成了model-o.scnassets,則代表運行成功。
接下來我們把生成的model-o.scnassets文件打包成zip文件,目的是為了能讓iPhone客戶端下載的時候文件更小。
打包好了之後上傳至伺服器即可。
兩個可執行文件下載鏈接 http://download.csdn.net/detail/u013588047/8937773

接下來是重頭戲,如何在程序中下載,解壓,並顯示呢。
下載解壓我使用了兩個開源框架 AFNetworking 和 SSZipArchive ,朋友們可以自行查閱使用方法。
一步一步來,先是下載,解壓
1 - (void)downloadZip {
2
3 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
4 AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
5 //這里我們用本地鏈接替代一下,可以使用任意url鏈接
6 NSURL *URL = [NSURL URLWithString:@"file:///User/name/Desktop/model.scnassets.zip"];
7 NSURLRequest *request = [NSURLRequest requestWithURL:URL];
8
9 NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
10 NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
11 return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
12 } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
13 NSLog(@"File downloaded to: %@", filePath);
14
15 //對文件解壓
16 NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
17 NSString *documentsDirectory = [paths objectAtIndex:0];
18 NSString *inputPath = [documentsDirectory :@"/proct-1-optimized.scnassets.zip"];
19
20 NSError *zipError = nil;
21
22 [SSZipArchive unzipFileAtPath:inputPath toDestination:documentsDirectory overwrite:YES password:nil error:&zipError];
23
24 if( zipError ){
25 NSLog(@"[GameVC] Something went wrong while unzipping: %@", zipError.debugDescription);
26 }else {
27 NSLog(@"[GameVC] Archive unzipped successfully");
28 [self startScene];
29 }
30
31 }];
32 [downloadTask resume];
33 }

而對於3d模型場景的創建,我們使用SCNSceneSource,代碼如下
1 NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
2//這里的dae文件名字是我們導出時定義的文件名,下面一段代碼中載入的SCNNode是我們之前在面板中改過的模型名
3 documentsDirectoryURL = [documentsDirectoryURL URLByAppendingPathComponent:@"model.scnassets/cube.dae"];
4
5 SCNSceneSource *sceneSource = [SCNSceneSource sceneSourceWithURL:documentsDirectoryURL options:nil];
然後我們載入.dae文件中的模型,作為一個SCNNode,名字為我們在一開始改過的模型名
1 SCNNode *theCube = [sceneSource entryWithIdentifier:@"Cube" withClass:[SCNNode class]];

最後我們設置一下燈光等效果,其實是新建game文件中設置好了的,我們要做的是將SCNNode *theCube載入到Scene中
// Create a new scene
SCNScene *scene = [SCNScene scene];

// create and add a camera to the scene
SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
[scene.rootNode addChildNode:cameraNode];

// place the camera
cameraNode.position = SCNVector3Make(0, 0, 15);

// create and add a light to the scene
SCNNode *lightNode = [SCNNode node];
lightNode.light = [SCNLight light];
lightNode.light.type = SCNLightTypeOmni;
lightNode.position = SCNVector3Make(0, 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 = SCNLightTypeAmbient;
ambientLightNode.light.color = [UIColor darkGrayColor];
[scene.rootNode addChildNode:ambientLightNode];

// Add our cube to the scene
[scene.rootNode addChildNode:theCube];

// retrieve the SCNView
SCNView *scnView = (SCNView *)self.view;

// set the scene to the view
scnView.scene = scene;

// allows the user to manipulate the camera
scnView.allowsCameraControl = YES;

// show statistics such as fps and timing information
scnView.showsStatistics = YES;

// configure the view
scnView.backgroundColor = [UIColor blackColor];

這樣我們就可以動態下載一個dae文件並顯示了。

閱讀全文

與scenekit中文教程相關的資料

熱點內容
java圖片上傳顯示 瀏覽:402
ppt的文件名後綴 瀏覽:902
ug編程軟體下載到哪個盤 瀏覽:359
炫酷字體APP下載的文件在哪裡 瀏覽:668
廊坊哪裡有少兒編程機構 瀏覽:312
cad新文件能找回來嗎 瀏覽:951
導出手機qq文件到u盤 瀏覽:456
電腦如何打開ppt文件怎麼打開方式 瀏覽:782
魅族鎖定區文件夾 瀏覽:357
刻字cnc怎麼編程 瀏覽:182
學校的網路拓撲結構圖 瀏覽:784
收集100個pdf文件里關鍵詞 瀏覽:594
蘋果關閉4g網路設置 瀏覽:289
如何監測資料庫 瀏覽:967
拷貝過來的pdf文件 瀏覽:751
抖音小店的訪客數據怎麼看 瀏覽:670
怎麼把c語言編程的字元向下移動 瀏覽:786
sql刪除文件組代碼 瀏覽:978
安卓post請求多重json 瀏覽:776
微信消除數據怎麼恢復 瀏覽:918

友情鏈接