WebGL的3D框架比較 ThingJS 和 Three.js

来源:https://www.cnblogs.com/thingjs/archive/2018/10/08/9754698.html
-Advertisement-
Play Games

隨著flash的沒落,瀏覽器的原生能力的興起。在3D方面WebGL不管從功能還是性能方面都在逐漸加強。2D應用變為3D應用的需求也越來越強烈。 win10的畫圖板支持3D圖片,2d工具photoshop也開始逐步集成了3D工具。 下麵就基於WebGL技術探討一下現在的兩款3D框架。Threejs(h ...


    隨著flash的沒落,瀏覽器的原生能力的興起。在3D方面WebGL不管從功能還是性能方面都在逐漸加強。2D應用變為3D應用的需求也越來越強烈。 win10的畫圖板支持3D圖片,2d工具photoshop也開始逐步集成了3D工具。

    下麵就基於WebGL技術探討一下現在的兩款3D框架。

Threejs(http://threejs.org/)

    目前最流行的開源3D框架,2009年4月誕生,2005年adobe收購了macromedia的flash產品,2008,2009年正是flash如日中天之時,threejs也識時務的選擇了flash的ActionScript平臺,後來flash沒落之後選擇了WebGL。

ThingJS(http://thingjs.com/)
    新興的3D框架,2018年誕生,是針對物聯網領域的JavaScript 3D Library。它是由在3D領域經營多年的優鍩科技公司研發,旨在簡化3D應用開發。


設計角度
    WebGL可以處理3D圖像,聽起來是非常高興的一件事,但是WebGL實在是太底層了,WebGl解決是如何再畫布上畫圖的問題,怎麼畫點,線,面,怎麼上色,怎麼貼圖,怎麼處理光線,視角轉動之後怎麼換算繪製等等。這些對於一個做3D應用的開發者來說要學的東西太多了。
    Threejs庫的出現解決了底層的渲染細節和複雜的數據結構,終於將複雜的底層細節抽象出來,使得大家開發3d應用更容易了一些。和很多開發者交流threejs都是他們首次接觸的WebGL 3D庫,並能很容易的就能開始做一些實驗。
    但是使用Threejs開發應用還是門檻很高,但就一個載入模型,調光,選擇模型彈框的功能,就能幹出Threejs上百行代碼。同時還有很多複雜的3D概念需要理解。
    這時就需要ThingJS了。

 

    ThingJS是更為上層的抽象,不用關心,渲染,mesh,光線等複雜概念。它抽象是一個個具體的模型,ThingJS封裝了對模型交互事件的各種api,比如單擊,左鍵,滑鼠滑過等,ThingJS封裝了對模型的操作,例如移動,放大縮小,上色,勾邊,甚至開門,ThingJS還封裝了模型的層次關係,例如物體是放在某個房間里的,房間又在某個樓層,樓層又是某個大樓的。大樓在園區里。

 

編碼對比

    這裡僅僅從3D模型載入這個小點進行對比說明。更多內容大家可參考各自的網站www.three.org 和 www.thingjs.com進行詳細對比。

    three的模型載入

function load3DModel(){
   /
     1、collada是一種基於XML的3D模型交互方案,簡單來說,就是一種3D模型可以通過collada轉換成另一種3D模型,
     從而,各種3D模型都可以通過collada轉換成web支持的3D模型。
     2、。dae是一個鐘3D模型的格式
     3、載入時註意瀏覽器同源策略的限制
    /
   var loader = new THREE.ColladaLoader();
   loader.load( "./model/avatar.dae", function ( collada ) {
      //找到模型中需要的對象。將相機看向這個對象是為了讓這個對象顯示在屏幕中心
      collada.scene.traverse( function ( child ) {
         if ( child instanceof THREE.SkinnedMesh ) {
            modelObj = child;
            camera.lookAt( child.position );
         }
      } );
      //將模型的場景加入到整體的場景
       modelObj.material.opacity = 0.8;
      scene.add( collada.scene ); //每個模型都要添加到場景
 
      //顯示出模型的骨骼的代碼,不需要可刪去
      var helper = new THREE.SkeletonHelper( modelObj );
      helper.material.linewidth = 3;
      scene.add( helper );
   } );
}

  

 threejs 載入模型到場景每個細節都得自己處理。

 我們再來看下ThingJS的模型載入。

var app = new THING.App({
    container: 'div3d',
    url: 'https://speech.uinnova.com/static/models/building'
});

  

只關註場景再頁面的div的id和場景存放的地址,所有的細節ThingJS都處理好了。

場景載入完之後便可從場景獲得載入內容,併進行交互應用開發。

    // 獲取建築對象
    var building = app.buildings[0];    
    // 列印建築中所有的樓層
    building.floors.forEach(function(floor) {
        console.log('Floor: ' + floor.id);
    });    
    // 獲取室外對象
    var outdoors = app.outdoors;        
    // 列印室外所有物體
    outdoors.things.forEach(function(thing) {
        console.log('Thing: ' + thing.id);
    });

  

多麼完美的封裝方式。更多細節可以到www.thingjs.com查看

總結

    three.js(www.three.org)和ThingJS(www.thingjs.com)都是JavaScript 3D Library,都對webGL的3D處理能力進行了封裝,但是three.js 更偏三維技術底層,適用於3D愛好者學習3D技術;ThingJS更偏物聯網應用功能開發,重在開發效率,降低開發成本,適合於使用3D技術做項目的開發者。

全文地址請點擊:https://blog.csdn.net/liuwei000000/article/details/80623532?utm_source=copy 


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

-Advertisement-
Play Games
更多相關文章
  • 線上產品代碼一般是編譯過的,前端的編譯處理過程包括不限於 轉譯器/Transpilers (Babel, Traceur) 編譯器/Compilers (Closure Compiler, TypeScript, CoffeeScript, Dart) 壓縮/Minifiers (UglifyJS) ...
  • CSS作為前端開發必備基礎知識,但隨著顯示器技術發展和多種設備共存情況下,前端技術也越來越複雜,如何更好的使用css,有哪些css框架可以供選擇,他們又有什麼優缺點?本文對這一些問題進行了說明,文末有各種css框架對比的鏈接,可以供前端開發小伙伴參考 本文資源 "https://www.slides ...
  • 首先我們來認識view 改變一些特性,再來看看項目的變化 我們新增flex佈局的一些屬性,再來看看項目的變化 接下來我們來看看如果獲取屏幕的解析度 關於圖片的用法,reactNative這裡也是很神奇呢 先看效果圖(博客園裡有個人經常發這種色情圖片,然後我今天找這種線上鏈接就去他的快閃記憶體裡面隨便拿了一 ...
  • WebSocket 學習筆記 "來自我的博客" 因為項目原因需要用到雙工通信,所以比較詳細的學習了一下瀏覽器端支持的 WebSocket. 並記錄一些遇到的問題。 簡介 WebSocket 一般是指瀏覽器提供的 API 介面,允許 Web 頁面通過 WebSocket 協議與遠程主機進行雙向通信。 ...
  • 熟悉 Angular 的同學對指令肯定不會陌生,Vue中也借鑒了指令這一特性,在 Vue 中指令都是帶有 v- 的特殊屬性,那麼指令有什麼作用呢? 我的理解就是:指令是用來控制 DOM 元素的行為,例如最簡單的顯示,隱藏。 Vue 中有很多指令,在今後的學習過程總我們會逐步的學習,今天我們就來說說我 ...
  • 用JS生成動態生成表格,行、列由用戶輸入,並使表格隔行換色 方法一. 代碼: 運行結果: 輸入行數、列數,create Table: 方法二. 代碼: 運行結果: 輸入行數、列數: *僅供參考,轉載請註明 *代碼①參考:https://www.cnblogs.com/hwgok/p/5739822. ...
  • [科學上網]Node.js 種子下載器 慶祝 2018 國慶,製作了一個 的種子下載器。爬取頁面,根據頁面的鏈接,破解另外一個網站,下載種子文件,同時使用 模塊提高爬蟲的併發量。項目比較簡單,爬取頁面沒有使用任何爬蟲框架。 "源碼傳送門" 。 的安裝請看我的另外一篇文章, "Node.js 的多版本 ...
  • 1》OL標簽的改良 start type reversed:翻轉排序 2》datalist標簽自動補全的使用 3》progress標簽的使用:進度條 4》meter標簽的應用 5》details展開收縮標簽的使用-子標簽summary(自動帶有展開收縮的效果) 6》mark標簽的應用:高亮顯示文本 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...