three.js Material

2023-02-16 17:45 更新

材質的抽象基類。

材質描述了對象objects的外觀。它們的定義方式與渲染器無關, 因此,如果您決定使用不同的渲染器,不必重寫材質。

所有其他材質類型都繼承了以下屬性和方法(盡管它們可能具有不同的默認值)。

構造函數(shù)(Constructor)

Material()

該方法創(chuàng)建一個通用材質。

屬性(Properties)

.alphaTest : Float

設置運行alphaTest時要使用的alpha值。如果不透明度低于此值,則不會渲染材質。默認值為0。

.alphaToCoverage : Boolean

啟用alpha to coverage. 只能在開啟了MSAA的渲染環(huán)境中使用 (當渲染器創(chuàng)建的時候antialias 屬性要true才能使用). 默認為 false.

.blendDst : Integer

混合目標。默認值為OneMinusSrcAlphaFactor。 目標因子所有可能的取值請參閱constants。 必須將材質的blending設置為 CustomBlending才能生效。

.blendDstAlpha : Integer

.blendDst的透明度。 默認值為 null.

.blendEquation : Integer

使用混合時所采用的混合方程式。默認值為AddEquation。 混合方程式所有可能的取值請參閱constants。 必須將材質的blending設置為 CustomBlending才能生效。

.blendEquationAlpha : Integer

.blendEquation 的透明度. 默認值為 null.

.blending : Blending

在使用此材質顯示對象時要使用何種混合。

必須將其設置為CustomBlending才能使用自定義blendSrc, blendDst 或者 [page:Constant blendEquation]。 混合模式所有可能的取值請參閱constants。默認值為 NormalBlending。

.blendSrc : Integer

混合源。默認值為SrcAlphaFactor。 源因子所有可能的取值請參閱constants。必須將材質的blending設置為CustomBlending才能生效。

.blendSrcAlpha : Integer

.blendSrc的透明度。 默認值為 null.

.clipIntersection : Boolean

更改剪裁平面的行為,以便僅剪切其交叉點,而不是它們的并集。默認值為 false。

.clippingPlanes : Array

用戶定義的剪裁平面,在世界空間中指定為THREE.Plane對象。這些平面適用于所有使用此材質的對象??臻g中與平面的有符號距離為負的點被剪裁(未渲染)。 這需要WebGLRenderer.localClippingEnabled為true。 示例請參閱WebGL / clipping /intersection。默認值為 null。

.clipShadows : Boolean

定義是否根據(jù)此材質上指定的剪裁平面剪切陰影。默認值為 false。

.colorWrite : Boolean

是否渲染材質的顏色。 這可以與網格的renderOrder屬性結合使用,以創(chuàng)建遮擋其他對象的不可見對象。默認值為true。

.defines : Object

注入shader的自定義對象。 以鍵值對形式的對象傳遞,{ MY_CUSTOM_DEFINE: '' , PI2: Math.PI * 2 }。 這些鍵值對在頂點和片元著色器中定義。默認值為undefined。

.depthFunc : Integer

使用何種深度函數(shù)。默認為LessEqualDepth。 深度模式所有可能的取值請查閱constants。

.depthTest : Boolean

是否在渲染此材質時啟用深度測試。默認為 true。

.depthWrite : Boolean

渲染此材質是否對深度緩沖區(qū)有任何影響。默認為true。在繪制2D疊加時,將多個事物分層在一起而不創(chuàng)建z-index時,禁用深度寫入會很有用。

.isMaterial : Boolean

檢查這個對象是否為材質Material的只讀標記.

.stencilWrite : Boolean

是否對模板緩沖執(zhí)行模板操作,如果執(zhí)行寫入或者與模板緩沖進行比較,這個值需要設置為true。默認為false。

.stencilWriteMask : Integer

寫入模板緩沖區(qū)時所用的位元遮罩,默認為0xFF。

.stencilFunc : Integer

使用模板比較時所用的方法,默認為AlwaysStencilFunc。在模板函數(shù) constants 中查看可用的值

.stencilRef : Integer

在進行模板比較或者模板操作的時候所用的基準值,默認為0。

.stencilFuncMask : Integer

與模板緩沖進行比較時所使用的位元遮罩,默認為0xFF

.stencilFail : Integer

當比較函數(shù)沒有通過的時候要執(zhí)行的模板操作,默認為KeepStencilOp,在模板操作 constants 查看可用值。

.stencilZFail : Integer

當比較函數(shù)通過了但是深度檢測沒有通過的時候要執(zhí)行的模板操作, 默認為KeepStencilOp,在模板操作 constants 查看可用值。

.stencilZPass : Integer

當比較函數(shù)和深度檢測都通過時要執(zhí)行的模板操作,默認為KeepStencilOp,在模板操作constants 中查看可用值。

.id : Integer

此材質實例的唯一編號。

.name : String

對象的可選名稱(不必是唯一的)。默認值為空字符串。

.needsUpdate : Boolean

指定需要重新編譯材質。

.opacity : Float

在0.0 - 1.0的范圍內的浮點數(shù),表明材質的透明度。值0.0表示完全透明,1.0表示完全不透明。如果材質的transparent屬性未設置為true,則材質將保持完全不透明,此值僅影響其顏色。 默認值為1.0。

.polygonOffset : Boolean

是否使用多邊形偏移。默認值為false。這對應于WebGL的GL_POLYGON_OFFSET_FILL功能。

.polygonOffsetFactor : Integer

設置多邊形偏移系數(shù)。默認值為0。

.polygonOffsetUnits : Integer

設置多邊形偏移單位。默認值為0。

.precision : String

重寫此材質渲染器的默認精度??梢允?highp", "mediump" 或 "lowp"。默認值為null。

.premultipliedAlpha : Boolean

是否預乘alpha(透明度)值。有關差異的示例,請參閱WebGL / Materials / Physical / Transmission。 默認值為false。

.dithering : Boolean

是否對顏色應用抖動以消除條帶的外觀。默認值為 false。

.shadowSide : Integer

定義投影的面。設置時,可以是THREE.FrontSide, THREE.BackSide, 或Materials。默認值為 null。如果為null, 則面投射陰影確定如下:

Material.side Side casting shadows
THREE.FrontSide 背面
THREE.BackSide 前面
THREE.DoubleSide 雙面

.side : Integer

定義將要渲染哪一面 - 正面,背面或兩者。 默認為THREE.FrontSide。其他選項有THREE.BackSide, THREE.DoubleSide 和  THREE.TwoPassDoubleSide。

.toneMapped : Boolean

定義這個材質是否會被渲染器的toneMapping設置所影響,默認為 true 。

.transparent : Boolean

定義此材質是否透明。這對渲染有影響,因為透明對象需要特殊處理,并在非透明對象之后渲染。設置為true時,通過設置材質的opacity屬性來控制材質透明的程度。默認值為false。

.type : String

值是字符串'Material'。不應該被更改,并且可以用于在場景中查找此類型的所有對象。

.uuid : String

此材質實例的UUID,會自動分配,不應該被更改。

.version : Integer

開始為0,會記錄 .needsUpdate : Boolean設置為true的次數(shù)。

.vertexColors : Boolean

是否使用頂點著色。默認值為false。

.visible : Boolean

此材質是否可見。默認為true。

.userData : Object

一個對象,可用于存儲有關Material的自定義數(shù)據(jù)。它不應該包含對函數(shù)的引用,因為這些函數(shù)不會被克隆。

方法(Methods)

EventDispatcher 方法在此類中可用。

.clone ( ) : Material

返回與此材質具有相同參數(shù)的新材質。

.copy ( material : material ) : this

將被傳入材質中的參數(shù)復制到此材質中。

.dispose () : undefined

處理材質。材質的紋理不會被處理。需要通過Texture處理。

.onBeforeCompile ( shader : Shader, renderer : WebGLRenderer ) : undefined

在編譯shader程序之前立即執(zhí)行的可選回調。此函數(shù)使用shader源碼作為參數(shù)。用于修改內置材質。

和其他屬性不一樣的是,這個回調在.clone(),.copy() 和 .toJSON() 中不支持。

.customProgramCacheKey () : String

當用到onBeforeCompile回調的時候,這個回調函數(shù)可以用來定義在onBeforeCompile中使用的配置項,這樣three.js就可以根據(jù)這個回調返回的字符串來判定使用一個緩存的編譯好的著色器代碼還是根據(jù)需求重新編譯一個新的著色器代碼。

例如一個onBeforeCompile回調函數(shù)包含了下面的條件語句:

if ( black ) {

	shader.fragmentShader = shader.fragmentShader.replace('gl_FragColor = vec4(1)', 'gl_FragColor = vec4(0)')

}

那么 customProgramCacheKey 就可以設置為:

material.customProgramCacheKey = function() {

	return black ? '1' : '0';

}

和其他屬性不一樣的是,這個回調在.clone(),.copy() 和 .toJSON() 中不支持。

.setValues ( values : Object ) : undefined

values -- 具有參數(shù)的容器。 根據(jù)values設置屬性。

.toJSON ( meta : Object ) : Object

meta -- 包含有元數(shù)據(jù)的對象,例如該對象的紋理或圖片。 將material對象轉換為 three.js JSON Object/Scene format(three.js JSON 物體/場景格式)。

源碼(Source)

src/materials/Material.js


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號