1. 程式人生 > >初探three.js材質

初探three.js材質

這節我們淺談一下THREE的材質。材質就是物體的面板,決定物體的表面。THREE的材質有很多種,他們有的和到相機的距離有關,有的和麵的法向量角度有關,有的不受光照的影響,有的受到光照的影響會產生反射效果或者漫反射效果,也可以將多個材質合成一個。
1. THREE.MeshBasicMaterial(基礎材料)。
2. THREE.MeshDepthMaterial(深度材料)。
3. THREE.MeshNormalMaterial(法向材料)。
4. THREE.MeshFaceMaterial(面材質)。
5. THREE.MeshLambertMaterial(Lambert材質)。
6. THREE.MeshPhongMaterial(Phong材質)。
7. THREE.LineBasicMaterial(線性基礎材質)。
8. THREE.LineDashMaterial(虛線材質)。
接下來我們詳細的講一下這些材質。

1.THREE.MeshBasicMaterial(基礎材料)

基礎材質非常簡單,它不受光照影響。它常用的一些屬性如下:
- color 材質的顏色
- wireframe 設定該屬性可以將材質設定成線框
- wireframeLinewidth 線框中線的寬度
- wireframeLineLinecap 線框線段端點如何顯示

var mesh = new THREE.MeshBasicMaterial({color: 0xffaa00})

2.THREE.MeshDepthMaterial(深度材料)

這種材質不受光照影響,同時也不能設定材質顏色,它只與物體到攝像機的距離有關,越遠越暗。它常用的一些屬性如下:
- wireframe 是否顯示線框
- wireframeLineWidth 線框線的寬度

var material = new THREE.MeshDepthMaterial();

3.THREE.MeshNormalMaterial(法向材料)

這種材料表面顏色只與面的法向量方向決定。它常用的一些屬性如下:
- wireframe 設定該屬性可以將材質設定成線框
- wireframeLinewidth 線框中線的寬度
- shading 設定著色方法FlatShading表示平面著色SmoothShading表示平滑著色

var material = new THREE.MeshNormalMaterial();

4.THREE.MeshFaceMaterial(面材質)

這是一個材料容器,他可以為每個面設定不同的材料。直接看程式碼:

var materialArray = [];
materialArray.push(new THREE.MeshBasicMaterial({color: 0x009e60}));
materialArray.push(new THREE.MeshPhongMaterial({color: 0x0051ba}));
materialArray.push(new THREE.MeshNormalMaterial({color: 0xffd500}));
materialArray.push(new THREE.MeshLambertMaterial({color: 0xff5800}));
materialArray.push(new THREE.MeshNormalMaterial({color: 0xC41E3A}));
materialArray.push(new THREE.MeshNormalMaterial({color: 0xffffff}));
var faceMaterial = new THREE.MeshFaceMaterial(materialArray);
var cubeGeom = new THREE.BoxGeometry(3, 3, 3);
var cube = new THREE.Mesh(cubeGeom, faceMaterial);

我們給一個正方體的六個面設定了六個不同的材質。

5.THREE.MeshLambertMaterial(Lambert材質)

它是一種高階材質,可以對光源產生反應建立不光亮的表面。除了上面材料的屬性外,還有一些獨特的屬性,
- ambient 這是材料的環境色,這個顏色會與環境光源疊加的顏色相乘,預設為白色。
- emissive 這是材料的發射顏色,就是不受光照時發出的顏色,預設為黑色。
- wrapAround 開啟此屬性會讓陰影變得柔和,分佈均勻。
- wrapRGB 開啟此屬性,可以使用THREE.Vector3來控制光下降的速度。

var material = new THREE.MeshLambertMaterial({color: 0x7777ff});

6.THREE.MeshPhongMaterial(Phong材質)

這個材料除了MeshLambertMaterial屬性外還有一些額外的出行
- specular 指定光照高亮部分的顏色,如果這個顏色與color屬性的顏色相同,得到一個類似金屬的材質。
- shininess 高亮部分的亮度。
- metal 開啟後使材質更像金屬。

var material = new THREE.MeshPhongMaterial({color: 0x7777ff});

這個效果非常好

7.THREE.LineBasicMaterial(線性基礎材質)

這個材質可以為線設定材質,屬性為
- color 定一線的顏色 如果指定vertexColors,這個屬性會被忽略
- linewidth 該屬性定義顯得寬度
- linecap 該屬性定義線端點如何顯示
- linejoin 該屬性定義線連線點如何顯示
- vertexColors 將該屬性設定成THREE.VertexColors值,可以給每一個定點設定顏色
- fog 設定是否霧化(需開啟全域性霧化)。

var material = new THREE.LineBasicMaterial({
    opacity: 1.0,
    linewidth: 1,
    vertexColors: THREE.VertexColors
});

8.THREE.LineDashMaterial(虛線材質)

該屬性和線性基礎材質幾乎相同,額外的屬性為
- scale 縮放dashSize和gapSize
- dashSize 虛線段長度
- gapSize 虛線空隙長度

var material = new THREE.LineDashedMaterial({
    vertexColors: true,
    color: 0xffffff,
    dashSize: 1,
    gapSize: 1,
     scale: 4
});

以上就是THREE的材質,具體如何使用我們日後在實戰專案中講解。
轉載請註明原文地址 郭志強的部落格

 

&n