android canvas广告牌,在THREE.js动画画布广告牌

这篇博客探讨了如何在Three.js中为基于Canvas的纹理设置动画,该纹理映射到一个平面上,类似于广告牌。作者遇到了问题,尽管设置了`material.needsUpdate`和`texture.needsUpdate`,但纹理仍然无法动画。博客中展示了一个旋转立方体,证明了动画逻辑本身是有效的。问题在于Canvas纹理材质没有正确更新。代码示例展示了初始化场景、创建纹理和动画的函数,但作者寻求帮助以找出为何纹理动画不起作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家,

我正在尝试为基于Canvas的纹理设置动画,该纹理映射到平面上,就像广告牌一样.我已经指出了包括material.needsUpdate和texture.needsUpdate,但我仍然无法让纹理变得生动.我还包括一个旋转立方体,所以我知道动画例程在某种程度上起作用.

这是代码:

if ( window.innerWidth === 0 ) { window.innerWidth = parent.innerWidth; window.innerHeight = parent.innerHeight; }

var camera, scene, renderer;

var mesh, geometry, material;

var light, sign, animTex;

var canvas, context;

init();

animate();

function init() {

camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 1200 );

camera.position.z = 700;

scene = new THREE.Scene();

material = new THREE.MeshLambertMaterial(

{ color: 0x885522

, wireframe: false

, overdraw: false

} );

geometry = new THREE.CubeGeometry( 80, 120, 100, 1,1,1);

mesh = new THREE.Mesh( geometry, material );

sign = createSign();

light = new THREE.DirectionalLight(0xFFFFFF, 3.0);

light.position = new THREE.Vector3(5,10,7);

light.target = new THREE.Vector3(0,0,0);

scene.add( mesh );

scene.add( sign );

scene.add( light );

renderer = new THREE.CanvasRenderer();

renderer.setSize( window.innerWidth, window.innerHeight );

document.body.appendChild( renderer.domElement );

}

function createSign() {

canvas = document.createElement("canvas");

context = canvas.getContext("2d");

canvas.width = 200;

canvas.height = 200;

context = canvas.getContext("2d");

var texture = new THREE.Texture(canvas);

texture.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);

mesh.doubleSided = true;

return mesh;

}

function animate() {

var time = Date.now()*0.01;

var sinTime = Math.sin ( time * 0.05 ) * 100;

var cosTime = Math.cos ( time * 0.05 ) * 100;

mesh.rotation.y = sinTime*0.01;

requestAnimationFrame( animate );

context.fillStyle="black";

context.fillRect(0,0,canvas.width,canvas.height);

context.fillStyle="white";

context.fillRect ( (canvas.width/2) + sinTime, (canvas.height/2) + cosTime, 20, 20 )

renderer.render( scene, camera );

}

这样运行,但我似乎无法更新Canvas纹理材质.我忽略了什么?非常感谢任何指针!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值