每个人,
我正在尝试对映射到平面(如广告牌)的基于 Canvas 的纹理进行动画处理。我已经提出要包含material.needsUpdate和texture.needsUpdate,但我仍然无法让纹理栩栩如生。我还包括了一个旋转立方体,这样我就知道动画例程在某种程度上发挥了作用。
这是代码:
if ( window.innerWidth === 0 ) { window.innerWidth = parent.innerWidth; window.innerHeight = 父级.innerHeight; } var 相机、场景、渲染器; var 网格、几何、材料; var light、sign、animTex; var 画布,上下文; 在里面(); 动画(); 函数初始化(){ camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1200); 相机.位置.z = 700; 场景 = 新的三个场景(); 材料=新的三。MeshLambertMaterial( {颜色:0x885522 ,线框:假 ,透支:假 }); 几何=新的三立方几何(80、120、100、1、1、1); 网格=新的三。网格(几何,材料); 标志 = 创建标志(); 光 = 新的三。方向光(0xFFFFFF,3.0); light.position = new THREE.Vector3(5,10,7); light.target = new THREE.Vector3(0,0,0); 场景.add(网格); 场景.add(符号); 场景.添加(灯光); 渲染器 = 新的 THREE.CanvasRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); } 函数 createSign() { canvas = document.createElement("canvas"); 上下文 = canvas.getContext("2d"); 画布.宽度 = 200; 画布.高度 = 200; 上下文 = canvas.getContext("2d"); var texture = new THREE.Texture(canvas); 纹理.needsUpdate = true; var material = new THREE.MeshBasicMaterial({ map : texture, overdraw: true }); material.needsUpdate = true; var mesh = new THREE.Mesh(new THREE.PlaneGeometry(200, 200), material); 网格.doubleSided = true; 返回网格; } 函数动画(){ var time = Date.now()*0.01; var sinTime = Math.sin ( 时间 * 0.05 ) * 100; var cosTime = Math.cos ( 时间 * 0.05 ) * 100; mesh.rotation.y = sinTime*0.01; requestAnimationFrame( 动画 ); context.fillStyle="黑色"; context.fillRect(0,0,canvas.width,canvas.height); context.fillStyle="白色"; context.fillRect ( (canvas.width/2) + sinTime, (canvas.height/2) + cosTime, 20, 20 ) renderer.render(场景,相机); }
这会运行,但我似乎无法更新 Canvas 纹理材质。我忽略了什么?非常感谢任何指点!