three.js 筆記八 各類Helper

參考
threejs中的各類helper對象介紹

為了簡化編碼工作,threejs中內置了許多各類helper類,通過helper類,讓我們能添加一兩行代碼展現很酷的功能。還有一些看不見的對象(如光源,邊界等),helper對象可以將它們展現出來,也方便我們理解。

  • ArrowHelper
  • AxesHelper
  • BoxHelper
  • Box3Helper
  • CameraHelper
  • DirectionLightHelper
  • FaceNormalsHelper
  • GridHelper
  • HemisphereLightHelper
  • PlaneHelper
  • PointLightHelper
  • PolarGridHelper
  • RectAreaLightHelper
  • SkeletonHelper
  • SpotLightHelper
  • VertexNormalsHelper
一、ArrowHelper

https://threejs.org/docs/#api/zh/helpers/ArrowHelper

箭頭Helper對象,功能很簡單就是添加一個箭頭。

function ArrowHelper( dir, origin, length, color, headLength, headWidth )
dir(方向向量)、origin(起點)、length(長度)、hex(顏色)、headLength(箭頭長度)、headWidth(箭頭寬度)

var dir = new THREE.Vector3(0, 10, 10);
dir.normalize();

var origin = new THREE.Vector3(0, 0, 0);
var length = 30;
var hex = 0xffff00;
var headLength = 0.5;。
var headWidth = 0.2;
var arrowHelper = new THREE.ArrowHelper(dir, origin, length, hex,headLength,headWidth);
scene.add(arrowHelper);
二、AxesHelper

坐標軸Helper對象,可以在當前空間添加一個三維坐標軸,x軸紅色、y軸綠色、z軸藍色
構造:AxisHelper(size)
屬性:size(軸線長)

示例代碼:

var axisHelper = new THREE.AxisHelper( 1000 );
axisHelper.position.y = -200;
axisHelper.material.opacity = 0.75;
axisHelper.material.transparent = true;
scene.add( axisHelper );
三、BoxHelper Box3Helper
1.什么是Box3

參考three.js 數學方法之Box3
Box3在3D空間中表示一個包圍盒。其主要用于表示物體在世界坐標中的邊界框。它方便我們判斷物體和物體、物體和平面、物體和點的關系等等。 構造器參數Box3( min : Vector3, max : Vector3 ),其參數為兩個三維向量,第一個向量為Box3在3D空間中各個維度的最小值,第二個參數為Box3在3D空間中各個維度的最大值,代碼如下。

var box = new THREE.Box3(new THREE.Vector3(-2,-2,-2), new THREE.Vector3(2,2,2));

這個box就表示3D空間中中心點在(0,0,0),長寬高為4的包圍盒。

2.示例

threeJS-Helper03-BoxHelperAndBox3Helper(包圍盒助手)

20181202150959879.gif

//外面的盒子
//SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength )
sphere = new THREE.SphereGeometry(1.5);
var object = new THREE.Mesh(sphere, new THREE.MeshBasicMaterial(0xff0000));
box = new THREE.BoxHelper(object, 0xffff00);
scene.add(box);

//里面的盒子
//Box3( min, max )
var box3 = new THREE.Box3();
box3.setFromCenterAndSize(new THREE.Vector3(0, 0, 0), new THREE.Vector3(2, 2, 2));
var helper = new THREE.Box3Helper(box3, 0xffff00);
四、CameraHelper

參考
threejs CameraHelper 查看照相機的觀察范圍
ThreeJS中CameraHelper的使用

var cameraHelper = new THREE.CameraHelper(camera);

scene.add(cameraHelper);
image.png
五、各種光源Helper
  • DirectionLightHelper
  • PointLightHelper
  • RectAreaLightHelper
  • SpotLightHelper
  • HemisphereLightHelper

參考threejs helpers -2 lightHelper(光源輔助對象)

image.png

六、FaceNormalsHelper

面法向量Helper對象,從三維模型的每個面繪制垂直的直線。

FaceNormalsHelper(object, size, color, linewidth)
object(對象)、size(箭頭長度)、color(顏色)、linewidth(箭頭寬度)

var faces = new THREE.FaceNormalsHelper( sphere, 20, 0x00ff00, 2 );

scene.add( faces );
image.png
七、GridHelper

展示三維空間的場景中經常需要帶橫縱刻度的平面以方面用戶理解,通過 Three.js 類 GridHelper 可以創建一個坐標網格對象。

GridHelper 本質上是對線模型對象 Line 的封裝,縱橫交錯的直線構成一個矩形網格模型對象。

參數說明
GridHelper( size : number, divisions : Number, colorCenterLine : Color, colorGrid : Color )
size -- 網格寬度,默認為 10. 
divisions -- 等分數,默認為 10. 
colorCenterLine -- 中心線顏色,默認 0x444444 
colorGrid --  網格線顏色,默認為 0x888888

eg:

var gridHelper = new THREE.GridHelper( 100, 30, 0x2C2C2C, 0x888888 );
scene.add(gridHelper);
image.png
八、PlaneHelper

平面

var plane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 0);

planeHelper = new THREE.PlaneHelper(plane, 1000, 0xffffff);

planeHelper.position.set(0,-20,0);

scene.add(planeHelper)
image.png
九、PolarGridHelper

極坐標網格helper對象,用來構建一個極坐標的網格平面。

function PolarGridHelper( radius, radials, circles, divisions, color1, color2 )

  • radius – 極坐標格半徑. 可以為任何正數. 默認為 10.
  • radials – 徑向輻射線數量. 可以為任何正整數. 默認為 16.
  • circles – 圓圈的數量. 可以為任何正整數. 默認為 8.
  • divisions – 圓圈細分段數. 可以為任何大于或等于3的正整數. 默認為 64.
  • color1 – 極坐標格使用的第一個顏色. 值可以為 Color 類型, 16進制 和 CSS 顏色名. 默認為 0x444444
  • color2 – 極坐標格使用的第二個顏色. 值可以為 Color 類型, 16進制 和 CSS 顏色名. 默認為 0x888888

創建一個半徑為’radius’ 包含 ‘radials’ 條徑向輻射線 和 ‘circles’ 個細分成 ‘divisions’ 段的圓圈的極坐標格輔助對象. 顏色可選.

示例代碼:

var polarGridHelper=new THREE.PolarGridHelper(1000, 16, 8, 64, 0x0000ff, 0x808080);
polarGridHelper.position.set(0,-200,0);
scene.add(polarGridHelper);
image.png
十、SkeletonHelper

參考
threeJS-Helper13-SkeletonHelper(骨骼顯示助手)
骨骼Helper對象,用來模擬骨骼 Skeleton 的輔助對象, 使用 LineBasicMaterial 材質。

  • object -- 可以是任何擁有一組骨 Bone 作為子對象的對象.比如, 一個骨骼 Skeleton 或 一個蒙皮網格 SkinnedMesh.
var bones = [];
var shoulder = new THREE.Bone();

var elbow = new THREE.Bone();

var hand = new THREE.Bone();
shoulder.add( elbow );

elbow.add( hand );
bones.push( shoulder );

bones.push( elbow );

bones.push( hand );
shoulder.position.y = 0;

elbow.position.y = -1;

hand.position.y = -0.5;
var armSkeleton = new THREE.Skeleton( bones );
20181210211242891.gif
十一、VertexNormalsHelper

頂點法向量Helper類,跟上面說的面法向量類似,區別是從三維模型頂點引出直線。

VertexNormalsHelper( object, size, color, linewidth )
屬性:object(對象)、size(箭頭長度)、color(顏色)、linewidth(箭頭寬度)

var vertexHelper = new THREE.VertexNormalsHelper( sphere, 2, 0x00ff00, 1 );
scene.add( vertexHelper );
image.png
十二、移除的EdgesHelper

參考
Three.js - EdgesGeometry 幾何體邊框輔助線

EdgesGeometry在老版本中叫做EdgesHelper但是已經被移除。新版本賦予邊框輔助參考線,更加靈活的使用方法,可以改變其材質以及其他屬性,EdgesGeometry的作用是可以幫助查看幾何體對象的邊緣。

如果幾何體平穩旋轉,Edges也要同步。

image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容