ThreeJs 认识材质

一、前言

材质和纹理有那么一点微妙的关系,纹理决定了物体的表面,而材质则决定了物体的“气质”,比如说,反射度,光滑度,金属感,塑料感或者玻璃的模仿等。当然,在 ThreeJs 中,纹理想要被展示出来是要被依附在材质中的。

二、概述

ThreeJs 中定义了非常丰富的材质,其类图如下。

Material.jpg

从类图上看,定义了非常多的材质。

三、认识材质

1.Material

MaterialXmind.jpg

2.LineBasicMaterial

LineBasicMaterial.jpg
LineBasicMaterialSample.jpg

3.LineDashedMaterial

LineDashedMaterial.jpg
var material = new THREE.LineDashedMaterial( {
    color: 0xffffff,
    linewidth: 1,
    scale: 1,
    dashSize: 3,
    gapSize: 1,
} );
LineDashedMaterialSample.jpg

4.MeshBasicMaterial

MeshBasicMaterial.jpg
MeshBasicMaterialSample.jpg

5.MeshDepthMaterial

MeshDepthMaterial.jpg
MeshDepthMaterialSample.jpg

6.MeshLambertMaterial

MeshLambertMaterial.jpg
MeshLambertMaterialSample.jpg

7.MeshNormalMaterial

MeshNormalMaterial.jpg
MeshNormalMaterialSample.jpg

8.MeshPhongMaterial

MeshPhongMaterial.jpg
MeshPhongMaterialSample.jpg

9.MeshPhysicalMaterial

MeshPhysicalMaterial.jpg
MeshPhysicalMaterialSample.jpg

10.MeshStandardMaterial

MeshStandardMaterial.jpg
MeshStandardMaterialSample.jpg

11.MeshToonMaterial

MeshToonMaterial.jpg
MeshToonMaterialSample.jpg

12.PointsMaterial

PointsMaterial.jpg

PointsMaterialSample.jpg

13.RawShaderMaterial

RawShaderMaterial.jpg
var material = new THREE.RawShaderMaterial( {

    uniforms: {
        time: { value: 1.0 }
    },
    vertexShader: document.getElementById( 'vertexShader' ).textContent,
    fragmentShader: document.getElementById( 'fragmentShader' ).textContent,

} );
RawShaderMaterialSample.jpg

14.ShaderMaterial

ShaderMaterial.jpg
var material = new THREE.ShaderMaterial( {

    uniforms: {

        time: { value: 1.0 },
        resolution: { value: new THREE.Vector2() }

    },

    vertexShader: document.getElementById( 'vertexShader' ).textContent,

    fragmentShader: document.getElementById( 'fragmentShader' ).textContent

} );
ShaderMaterialSample.jpg

15.ShadowMaterial

ShadowMaterial.jpg
var planeGeometry = new THREE.PlaneGeometry( 2000, 2000 );
planeGeometry.rotateX( - Math.PI / 2 );

var planeMaterial = new THREE.ShadowMaterial();
planeMaterial.opacity = 0.2;

var plane = new THREE.Mesh( planeGeometry, planeMaterial );
plane.position.y = -200;
plane.receiveShadow = true;
scene.add( plane );
ShadowMaterialSample.jpg

16.SpriteMaterial

SpriteMaterial.jpg
var spriteMap = new THREE.TextureLoader().load( 'textures/sprite.png' );

var spriteMaterial = new THREE.SpriteMaterial( { map: spriteMap, color: 0xffffff } );

var sprite = new THREE.Sprite( spriteMaterial );
sprite.scale.set(200, 200, 1)

scene.add( sprite );
SpriteMaterialSample.jpg

四、总结

ThreeJs 的内置材质非常的多,项目里可以根据需要来实际使用。如果内置的不能满足则使用 ShaderMaterial 来实现自定义的 Material。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容