关于材质,threejs的官方文档(https://threejs.org/docs/index.html?q=material)讲解比...
介绍完材质后,我们来简单看看纹理贴图。如果我们想在材质上实现更加逼真的效果的话我们就要用到纹理贴图了,例如墙砖,地板等。
加载纹理图片我们使用TextureLoader
var texture = new THREE.TextureLoader().load("images/f2.jpg");
纹理可以设置水平和竖直方向的重复
texture.wrapS = THREE.RepeatWrapping; texture.wrapT = THREE.RepeatWrapping;
可以设置重复的次数
texture.repeat.set(20, 20);
效果图如下
下面介绍几个特别的场景
1.要在立方体的不同面上贴上不同的图片
这个时候我们需要使用MultiMaterial来当作材质,指定不同面的纹理,每个面都是一个Material
var materials = [ new THREE.MeshBasicMaterial( { map:new THREE.TextureLoader().load("images/right.jpg") } ), // right new THREE.MeshBasicMaterial( { map:new THREE.TextureLoader().load("images/left.jpg") } ), // left new THREE.MeshBasicMaterial( { map:new THREE.TextureLoader().load("images/top.jpg") } ), // top new THREE.MeshBasicMaterial( { map:new THREE.TextureLoader().load("images/bottom.jpg") } ), // bottom new THREE.MeshBasicMaterial( { map:new THREE.TextureLoader().load("images/front.jpg") } ) // front new THREE.MeshBasicMaterial( { map:new THREE.TextureLoader().load("images/back.jpg") } ), // back ]; var cubeSidesMaterial = new THREE.MultiMaterial( materials );
2.很多时候我们想动态生成图片或文字,当作材质纹理
这里可以使用canvas作为纹理贴图,Three为我们提供里CanvasTexture
function getTextCanvas(text){ var width=512, height=256; var canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; var ctx = canvas.getContext('2d'); ctx.fillStyle = '#C3C3C3'; ctx.fillRect(0, 0, width, height); ctx.font = 50+'px " bold'; ctx.fillStyle = '#2891FF'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText(text, width/2,height/2); return canvas; } var materials = [ new THREE.MeshBasicMaterial( { color: 'blue' } ), // right new THREE.MeshBasicMaterial( { color: 'yellow' } ), // left new THREE.MeshBasicMaterial( { map: new THREE.CanvasTexture(getTextCanvas('Leo Test Label')) } ), // top new THREE.MeshBasicMaterial( { color: 'black' } ), // bottom new THREE.MeshBasicMaterial( { color: 'green' } ), // back new THREE.MeshBasicMaterial( { color: 'red' } ) // front ];
这样我们就可以利用canvas画上文字或者图形,用来填充纹理贴图。