1. 程式人生 > >探索three.js中的各種材質之共有屬性

探索three.js中的各種材質之共有屬性

探索three.js中的各種材質 之共有屬性

這裡寫圖片描述

共有屬性又分基礎屬性、融合屬性、高階屬性

1.基礎屬性:這些屬性是最常用到的。

.id:Integer識別符號
用來標識材質,在建立時賦值

.uuid:String UUID
材質例項的UUID。這會自動分配,因此不應編輯。

.name:String名稱
可以通過這個屬性賦予材質名稱

.isMaterial是否為材質
用於檢查此類或派生類是否為材質。預設為true。
不應該更改它,因為它在內部用於優化。

.type:String型別
值是字串’Material’。這不應該更改,並且可以用於在場景中查詢此型別的所有物件。

.opacity:Float透明度
定義物體有多透明。 與屬性.transparent 一起使用。取值範圍是0~1。

.transparent:Boolean是否透明
如果設為true, Three.js庫就會根據opacity的值來渲染物體。如果是 false,這個物體就不透明,只是著色明亮一些。

.overdraw:Float過度描繪
如果你用 THREE.CanvasRenderer(畫布渲染器)物件,多邊形會被渲染得稍微大 一點兒。當你用這個渲染器畫出來的物體有縫隙時,可以將這個屬性設為 true。

.visible:Boolean是否可見
定義該材質是否可見。如果將它設為 false,那麼在場景中就看不到該物體。

.side:Integer側面
通過這個屬性,可以決定在幾何體的哪一面應用這個材質。 預設值是 THREE.FrontSide(前面),這可以將材質應用到物體的前(外)面。 也可以將它設為 THREE. BackSide (後面),這可以將材質應用到物體的後(內) 側。或者也可以將它設為 THREE.DoubleSide (雙側),這樣就可以將材質應用到物體的內外兩側。

shadowSide:Integer投影面
定義面部投射陰影的哪一側。預設值為null。

.needsUpdate:Boolean是否需要重新整理
對於材質的某些修改,你需要告訴 Three.js 庫材質已經改變了。 如果這個屬性設為 true, Three.js 就會使用新的材質屬性重新整理它的快取。

.clipIntersection:Boolean是否剪下交叉點
更改剪裁平面的行為,以便僅剪下其交叉點,而不是它們的並集。預設值為false。

.clippingPlanes:Array剪裁平面
使用者定義的剪裁平面在世界空間中指定THREE.Plane物件。這些平面適用於此材質所附著的物件。空間中與平面的符號距離為負的點被剪裁(未渲染)。這需要WebGLRenderer.localClippingEnabled為true。

.clipShadows:Boolean是否剪下陰影
定義是否根據此材質上指定的剪裁平面剪下陰影。預設值為false。

.colorWrite:Boolean是否渲染材質的顏色
這可以與網格的renderOrder屬性結合使用,以建立遮擋其他物件的不可見物件。預設為true。

.customDepthMaterial:Material自定義深度材質
渲染到深度貼圖時此材質要使用的自定義深度材質。預設值為undefined。

.customDistanceMaterial:Material自定義距離材質
與customDepthMaterial相同,但與PointLight一起使用。預設值為undefined。

.defines:Object定義
自定義注色器。預設值為undefined。

.flatShading:Boolean是否平面著色
預設值為false。

.fog:Boolean是否受霧影響
預設值為true。

.lights:Boolean是否受燈光影響
預設為true。

.precision:String預設精度
覆蓋此材質的渲染器的預設精度。可以是“ highp ”,“ mediump ”或“ lowp ”。預設值為null。

.premultipliedAlpha:Boolean是否預乘alpha(透明度)值
預設值為false。

.dithering:Boolean是否抖動
是否對顏色應用抖動以消除條帶的外觀。預設值為false。

.vertexColors:Integer是否使用定點著色
預設值為THREE.NoColors。其他選項有THREE.VertexColors和THREE.FaceColors。

.userData:Object資料物件
一個物件,可用於儲存有關Material的自定義資料。它不應該包含對函式的引用,因為這些函式不會被克隆。

2.融合屬性: 每個物體都有一系列的融合屬性。 這些屬性決定物體如何與背景融合。

.blending:Blending融合
決定物體上的材質如何跟背景融合。必須將其設定為CustomBlending才能使用自定義blendSrc,blendDst或blendEquation。 預設值為 NormalBlending,在這種模式下只顯示材質的上層。

.blengSrc:Integer融合源
除了使用標準融合模式之外,還可以通過指定 blendsrc、 blenddst 和 blendequation 屬性來建立自定義的融合模式。該屬性指定物體(源)如何跟背景(目標)相融合。 預設值是 SrcAlphaFactor,即使用alpha (透明度)通道進行融合。必須將材質的混合設定為CustomBlending才能生效。

.blendSrcAlpha:Integer融合源的透明度
預設值為null。

.blendDst:Integer融合目標
該屬性定義融合時如何使用背景(目標)。預設值是 OneMinusSrcAlphaFactor, 其含義是:目標也使用源的 alpha 通道進行融合,只是用的值是1(源的 alpha 通道值)。必須將材質的混合設定為CustomBlending才能生效。

.blendDstAlpha:Integer融合目標的透明度
預設值為null。

.blendingEquation:Integer融合公式
指定如何使用 blendsrc 和 blenddst 的值。 預設方法是 AddEquation。即將兩個顏色值相加。 使用這三個屬性,就可以建立自定義的融合模式。必須將材質的混合設定為CustomBlending才能生效。

.blendingEquationAlpha:Integer融合公式的透明度
預設值為null。

3.高階屬性: 有一些高階屬性可以控制底層 WebGL 上下文渲染物體的方法。 大多數情況下,不會用到這些屬性。

.depthFunc:Integer深度函式
預設值為LessEqualDepth。

.depthTest:Boolean 深度測試
這是一個高階 WebGL 屬性。使用這個引數可 以開啟或關閉 GL DEPTH TEST 引數。該引數決定像索深度是否用來計算新的像索值。 通常情況下不必修改這個屬性。

.depthWrite:Boolean深度快取
內部屬性。可以用來決定這個材質是否影響 WebGL 的 深度快取。如果你將一個物體用作二維貼圖時(例如一個套子),你應該將這個屬性設為 false。 但是一般來講,你不應該修改這個屬性。

.polygonOffset:Boolean(是否使用多邊形偏移。預設值為false。)、 .polygonOffsetFactor:Integer(設定多邊形偏移係數。預設值為0。) 和.polygonOffsetUnits:Integer (設定多邊形偏移單位。預設值為0。)
通過這些屬性,可以控制WebGL的POLYGON_OFFSET_FILL 功能。 一般不需要使用它們。

.alphaTest:Float
可以給這個屬性指定一個值(從 0 到 1)。如果某個畫素的 alpha值小於這個值,那麼該畫素就不會顯示出來。預設值為0。