材质和纹理有那么一点微妙的关系,纹理决定了物体的表面,而材质则决定了物体的“气质”,好比说,反射度,光滑度,金属感,塑料感或者玻璃的模仿等。固然,在 ThreeJs 中,纹理想要被展现出来是要被依附在材质中的。bash
ThreeJs 中定义了很是丰富的材质,其类图以下。spa
从类图上看,定义了很是多的材质。3d
var material = new THREE.LineDashedMaterial( {
color: 0xffffff,
linewidth: 1,
scale: 1,
dashSize: 3,
gapSize: 1,
} );
复制代码
var material = new THREE.RawShaderMaterial( {
uniforms: {
time: { value: 1.0 }
},
vertexShader: document.getElementById( 'vertexShader' ).textContent,
fragmentShader: document.getElementById( 'fragmentShader' ).textContent,
} );
复制代码
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
} );
复制代码
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 );
复制代码
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 );
复制代码
ThreeJs 的内置材质很是的多,项目里能够根据须要来实际使用。若是内置的不能知足则使用 ShaderMaterial 来实现自定义的 Material。code