Three.js(二)LOD原始碼註釋
//對lod的原始碼進行了註釋 /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ */ // 目錄src/objects/LOD.js <script> THREE.LOD = function () { THREE.Object3D.call( this ); this.objects = []; }; THREE.LOD.prototype = Object.create( THREE.Object3D.prototype ); //新增細節 THREE.LOD.prototype.addLevel = function ( object, distance ) { if ( distance === undefined ) distance = 0;//未定義距離時為0 distance = Math.abs( distance );//取距離的絕對值 //將各個細節的距離進行從小到大的排序 for ( var l = 0; l < this.objects.length; l ++ ) { if ( distance < this.objects[ l ].distance ) { break; } } this.objects.splice( l, 0, { distance: distance, object: object } );//?objects.splice this.add( object ); }; //根據距離返回對應層次的物件 THREE.LOD.prototype.getObjectForDistance = function ( distance ) { //排序由小到大遍歷 for ( var i = 1, l = this.objects.length; i < l; i ++ ) { if ( distance < this.objects[ i ].distance ) { break; } } return this.objects[ i - 1 ].object; }; //更新顯示的層次 THREE.LOD.prototype.update = function () { var v1 = new THREE.Vector3();//點1 var v2 = new THREE.Vector3();//點2 return function ( camera ) { //當細節層次不為1時 if ( this.objects.length > 1 ) { v1.setFromMatrixPosition( camera.matrixWorld );//相機的矩陣 v2.setFromMatrixPosition( this.matrixWorld );//LOD的矩陣 var distance = v1.distanceTo( v2 );//相機到LOD的距離 this.objects[ 0 ].object.visible = true;//第一層(細節最詳細)的可見性為true //向細節不詳細的層次距離遍歷 for ( var i = 1, l = this.objects.length; i < l; i ++ ) { //距離小的詳細程度高的可見度為false if ( distance >= this.objects[ i ].distance ) { this.objects[ i - 1 ].object.visible = false; this.objects[ i ].object.visible = true; } //到達對應的詳細程度的距離區間後跳出 else { break; } } //對應級別向後的可見度為false for( ; i < l; i ++ ) { this.objects[ i ].object.visible = false; } } }; }(); THREE.LOD.prototype.clone = function ( object ) { //未定義時宣告lod if ( object === undefined ) object = new THREE.LOD(); //將LOD複製到object中 THREE.Object3D.prototype.clone.call( this, object); //依次新增每個細節到object中 for ( var i = 0, l = this.objects.length; i < l; i ++ ) { var x = this.objects[i].object.clone(); x.visible = i === 0; object.addLevel( x, this.objects[i].distance ); } return object; }; </script>
相關推薦
Three.js(二)LOD原始碼註釋
//對lod的原始碼進行了註釋 /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://
資料結構(二)LinkedList原始碼分析
一、基本概念 1、關係圖: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, C
JS(二)基本知識
一 預解釋 1、預解釋(變數提聲):在當前的作用域中,JS程式碼執行之前,瀏覽器首先會預設的把所有帶var和function的進行提前的宣告或者定義。 2、var和function在預解釋的時候操作不同: var:在預解釋的時候只是提前的宣告 funct
Hadoop Yarn原始碼閱讀系列(二)Yarn原始碼目錄組織結構
Hadoop Yarn分為5部分:API、Common、Applications、Client和Server,他們的內容具體如下: YARN API(hadoop-yarn-api目錄):給出了YARN記憶體涉及的4個主要RPC協議的Java宣告和Protocol Buffers定義,這4個RP
Java原始碼解析系列(二)ArrayList原始碼解析
備註:以下都是基於JDK8 原始碼分析 ArrayList簡介 ArrayList 是一個數組佇列,相當於 動態陣列。與Java中的陣列相比,它的容量能動態增長。它繼承於AbstractList,實現了List, RandomAccess, Clonea
Android應用程式啟動詳解(二)從原始碼瞭解App的啟動過程
本文承接《Android應用程式啟動詳解(一)》繼續來學習應用程式的啟動的那些事。上文提到startActivity()方法啟動一個app後經過一翻過程就到了app的入口方法ActivityThread.main()。其實我們在之前的文章中《Android的訊息機制(二)之L
微信小程式“反編譯”實戰(二):原始碼還原
小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java線上bug實時監控。真的是一個很好用的bug監控服務,眾多大佬公司都在使用。 在上一篇文章《微信小程式“反編譯”實戰(一):解包》中,我們詳細介紹瞭如何獲取某一個小程式
rpm包打包過程詳解(二)——製作原始碼安裝包
製作原始碼安裝包(.tar.gz) 1. 解決依賴的軟體: 系統環境:[紅帽企業Linux.6.4.64位伺服器版].rhel-server-6.4-x86_64 原始碼製作中使用到的軟體為GNU M4,GNU autoconf,GNU automake;GNU
mongo shell啟動配置檔案.mongorc.js(二)
如果你的主目錄下有個.mongorc.js檔案,那麼當你啟動shell時他就會自動執行。使用它可以初始化任何你經常使用的helper方法和你不想意外操作的刪除方法。 比如,你不想使用預設的dropDatabase()方法了,你可以在.mongorc.js檔案中新增下面的命令: 複製內容到剪貼簿 程式碼:
(二)ghostscript原始碼分析之interp()函式之IREF_NEXT巨集分析
interp()函式用了大量的巨集。IREF_NEXT只是其中一個巨集,但是出現的頻率很高。 但是透徹的理解這個巨集將為理解interp()函式提供便利。 它的定義形式如下: #define IREF_NEXT(ip)/ ((const ref_packed *)((const re
問答方式學 Node.js(二)
Q: 好了,我們繼續談談 Node.js 吧,我記得上次說到了「非阻塞」和「事件驅動」,這引起了我的好奇心,但是又給我潑了一桶冷水,這兩個詞有點高階。 A:別急,我們先來看一個簡單的場景: 人人網刷朋友新鮮事你應該用過吧?實現這樣的功能有一種簡單的方式,是讓使用者與伺服器之間保持一個長輪詢。 但是它與普
從零開始學 Web 之 Vue.js(二)過濾器,按鍵修飾符,自定義指令
大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 部落格園:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/
學習使用vue.js(二)宣告式渲染 和 指令繫結
<——— 在這之前,你肯定會注意到上面箭頭所指的位置,那麼你一定會看見,文章外面的大拇指圖示,動動你的手指,就能點一下它,表示你很喜歡這篇文章。 正題: 如果你不願意多花時間去自學vue.js 官網的API,那麼你可以在跟著下面的例子學習最實用
Android Recovery OTA升級(二)—— Recovery原始碼解析
目錄 概述 之前部落格裡一篇文章講解了OTA包的生成原理,這篇文章主要是從Recovery原始碼的角度介紹一下Recovery是如何使用OTA包進行系統升級的。 為了防止洩密,本文原始碼都是基於Android4.4.2_r1版本進行分析。
JS(二)-閉包和箭頭函式
(一)閉包 一、函式作為返回值 高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。 求和的函式定義: function sum(arr) { return arr.reduce(function (x, y) { return x +
require js(二)結合director.js配置項
目錄 __js |__jquery.min.js |__director.js |__bootstrap.bundle.min.js |__test |__js
深入理解阻塞佇列(二)——ArrayBlockingQueue原始碼分析
在深入理解阻塞佇列(一)——基本結構中,介紹了BlockingQueue這一介面的子類以及子介面。本文主要就其中的一個實現類:ArrayBlockingQueue進行原始碼分析,分析阻塞佇列的阻塞是如何實現的。 概述 ArrayBlockingQueue
快速排序(二) jdk原始碼中如何優化快速排序
快速排序是一種相當棒的排序方案,相關理論內容可以參見 在jdk的[java.util.Arrays]類中,有一個sort的函式,它實現對很多資料結構進行的排序方法,其中sort(int[] a)中主要使用的是優化後的快速排序法,本文正是基於此來講解如何優化
Vert.x系列(二)--EventBusImpl原始碼分析
開發十年,就只剩下這套架構體系了! >>>
Webgl顯示Revit模型(二)——利用Three.js優化顯示效果
Webgl顯示Revit模型(一)請見: https://blog.csdn.net/niuge8905/article/details/80044802 Three.js已經算是開發webgl最常用的開源庫了。Autodesk團隊開源了一個va3c來在web端顯示revit,但是這個更