【threeJS】纹理贴图

纹理贴图设置

//镜面处理
texture.flipY=false;
//边缘处理
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;

加载纹理贴图

方法一:
THREE.ImageUtils.loadTexture('m0.jpg')
方法二:
new THREE.TextureLoader().load(
					"w.jpg",
					texture =>{
						texture.wrapS = THREE.RepeatWrapping;
						texture.wrapT = THREE.RepeatWrapping;
						mesh.material = new THREE.MeshBasicMaterial({map: texture});
					}
			);

将视频作为纹理贴图

var video=document.createElement('video');
video.style.cssText= 'loop;';
video.src="video.mp4";

var texture=new THREE.VideoTexture(video);
texture.flipY=false;
texture.wrapS=texture.wrapT=THREE.ClampToEdgeWrapping;
texture.minFilter=texture.magFilter=THREE.LinearFilter;
texture.format=THREE.RGBFormat;

将画布作为纹理贴图

var canvas = document.createElement("canvas");
canvas.width = 50;canvas.height = 20;
canvas.getContext('2d').fillStyle = "#00ff00";
canvas.getContext('2d').fillText("哈12哈12哈", 0, 20);

var texture = new THREE.CanvasTexture(canvas);

将HTML的img标签作为纹理贴图

var img = new Image();
img.src =src;
img.onload = function(){
    var texture = new THREE.Texture();
    texture.image =img;
    texture.needsUpdate = true;
	mesh.material=new THREE.MeshLambertMaterial({ map: texture });
};

Material的needsUpdate
材质在three.js中是通过THREE.Material来描述的,其实材质并没有什么数据要传输,但是为什么还要搞一个needsUpdate呢,这里还要说一下shader这个东西,shader直译过来是着色器,提供了在gpu中编程处理顶点和像素的可能性,在绘画中有个shading的术语来表示绘画的明暗法,GPU中的shading也类似,通过程序计算光照的明暗来表现物体的材质,ok, 既然shader是一段跑在GPU上的程序,那么像所有程序一样都需要进行一次编译链接的操作, WebGL中是在运行时对shader程序进行编译的,这当然需要消耗时间,因此也是最好能够一次编译就运行到程序结束。所以three.js中就在material初始化的时候就编译链接了shader程序并且缓存了编译链接后得到的program对象。一般一个material是不需要再去重新编译整个shader了,材质的调整只需要修改shader的uniform参数就行了。但是如果是替换了整个材质,比如将原来phong的shader替换成了一个lambert的shader,就需要将material.needsUpdate设置成true去重新做一次编译。(https://www.jb51.net/html5/65408.html)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值