SceneKit下關於修改SCNNode 的Shader展示自定義圖形

来源:https://www.cnblogs.com/xueyudlut/archive/2018/12/11/10101461.html
-Advertisement-
Play Games

由於某些需求,需要在蘋果OS x系統下展示一組點雲,準備使用蘋果官方的三維顯示控制項來完成這一功能。場景點雲作為離散的點, 如果每個點以SCNnode的形式加入場景中,則回造成過大的記憶體消耗,筆者電腦下,單個場景展示到1w點時記憶體就崩潰了。所以準備通過 修改單個node的shader屬性,實現自定義的 ...


由於某些需求,需要在蘋果OS x系統下展示一組點雲,準備使用蘋果官方的三維顯示控制項來完成這一功能。場景點雲作為離散的點,

如果每個點以SCNnode的形式加入場景中,則回造成過大的記憶體消耗,筆者電腦下,單個場景展示到1w點時記憶體就崩潰了。所以準備通過

修改單個node的shader屬性,實現自定義的形狀,這樣可以節省記憶體,還可以同時展示多個場景。查詢了蘋果的官方api文檔,https://developer.apple.com/documentation/scenekit/scnshadable/1523348-shadermodifiers

 

說實話,的確沒怎麼看懂,以為看懂了寫出來還是不對。搜索了一下傻瓜視頻。才實現了基本顏色的功能。

(原本手冊是非常管用的,只是不適合我這種英文不太好的菜鳥)

SCNProgram

 通過使用GLSL(OpenGL Shading Language )或者Metal shading language進行重寫。當你希望完全替換Scene Kit的原來的變換處理的時候,如果僅僅是簡單的修該和替換的話,官方建議使用shaderModifiers屬性,插入需要修改的屬性,同樣使用上面提到的兩種方式。

 修改vertexFunctionName和fragmentFunctionName定義預編譯用的shader function,修改vertexShader和fragmentShader屬性,提供OpenGL或者OpenGLES源碼。

 總之使用SCNProgram的許可權比較大,但是需要定義的東西比較多。聽從官方的建議,準備嘗試下shaderModifiers屬性

shaderModifiers

深度可以形成較複雜的幾何形狀,模擬出較為複雜的真實錶面效果,增加較為藝術的光照效果,通過對每個像素的後續處理形成特殊效果。

這裡定義的屬性不同於SCNProgram,是額外追加到SceneKit的shader上的,完好保留原來的系統。

你可以將屬性附加到SCNGeometry 或者SCNMaterial對象上,然後鏈接到shaderModifiers上。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux下經常出現permission denied,原因是由於許可權不足,有很多文章通過chmod命令更改許可權為777,但是很不方便也不適合新手,簡單粗暴的方法如下: 命令行中輸入 sudo passwd 他會提示你輸入新密碼,再次輸入密碼,就輸入以前的一樣的就行,成功之後,輸入 su root ...
  • 初識filebeat ...
  • 一、VM虛擬機添加一個網路適配器。 選擇自己需要的模式類型 二、啟動虛擬機,配置網卡 按原先配置網卡的方式配置完(ip地址及預設網關還有網卡名不能跟原先的一樣) 重啟所有網卡(service network restart)後檢查網卡 三、測試新增網卡環境 關閉原先網卡,檢查新增網卡是否能與外網鏈接 ...
  • 要瞭解Linux的許可權,需要和Linux的用戶與組的概念一併理解,不瞭解的同學請參考Linux的用戶和組 簡介 在Linux中,每個文件除了有用戶和組的信息以外,還有其對應的許可權。可使用來查看。 看第一個欄位的第二位至第十位,一共九位。 左三位(rw-):表示文件所有者的許可權。 中三位(r--):表 ...
  • 1、 top 看看哪個進程是罪魁禍首 2、將這個進程的jstack dump 到一個文件裡面,以備使用。 使用 sftp 弄到本地。 3、查看這個進程裡面哪些子進程, 按 P 鍵排序占用 CPU 的子進程 4、在 jstack.log 中搜索 65a1 ...
  • 今天出去面試,碰見一個面試題,說來也巧,又是劃分子網的問題,曾經花了一整個上午研究子網,算是研究透徹了,今天正好碰上順便分享下怎麼處理這個問題 面試官說好的給我一個鐘答題,實際給了我十五分鐘,原定的和HR視頻面試時間到了,還有兩個需要用英文簡述的題沒做,有點尷尬,英語太渣,廢話不多說,對於網路精英來 ...
  • Vagrant 是一個簡單易用的部署工具,用英文說應該是 Orchestration Tool 。它能幫助開發人員迅速的構建一個開發環境,幫助測試人員構建測試環境, Vagrant 基於 Ruby 開發,使用開源 VirtualBox 作為虛擬化支持,可以輕鬆的跨平臺部署。 通俗的來說, 就是在本地 ...
  • 1、概述 i.MX 6ULL系列晶元的MMDC是一個多模式DDR控制器,支持DDR3/DDR3Lx16和LPDDR2x16的存儲類型,MMDC是可配置,高性能,優化的記憶體控制器。 註:DDR3/DDR3Lx16、LPDDR2x16 ,此處的x16表示晶元位寬,每個傳輸周期能夠提供的數據量(bit)。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...