各位,
我正在尝试为映射到平面上的基于画布的纹理设置动画,如广告牌。我已经强调要包括材料。需要日期
下面是代码:
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 ); }
这会运行,但我似乎无法更新画布纹理材质。我忽略了什么?非常感谢您的指点!
每次使用纹理(每次渲染循环)时,需要更新
标志都会重置(为false),因此在渲染循环中需要将其设置为true(在渲染调用之前,否则会关闭一帧)。所以在你的例子中,把sign.material.map.needsUpdate=true
放在之前renderer.render(场景,相机)
。texture.needsUpdate=true
和material.needsUpdate=不需要true
。
此外,您只需在纹理上设置needsUpdate
标志,因为材质属性不会更改。
HTML5画布提供了绘制图像并完全擦除图像的必要方法。 我们可以使用Javascript帮助在HTML5画布上模拟好的动画。 以下是两个重要的Javascript方法,用于在画布上制作动画图像 - Sr.No. 方法和描述 1 setInterval(callback, time); 该方法在给定的time毫秒后重复执行所提供的代码。 2 setTimeout(callback, time); 此
有没有可能用画布在Android中实现下面的图片? 我想有一个洞,而不仅仅是在黄色的红色层上有一个圈。我在-method中使用以下代码进行了尝试(但失败了): 但是当我使用这段代码时,它在两个位图上都开了一个洞。最后,这个应用程序应该是一个带有球、洞和其他东西的迷宫。当球掉进洞里时,它应该出现在红色位图下。有可能实现这一点吗? 答: 如果有人也有同样的问题:使用View而不是SurfaceView
在IE9画布中现在是否支持虚线/点线?目前我正在做与以下内容非常相似的事情: 这在IE7、IE8、IE9兼容模式和FireFox中工作很好,然而,在IE9和Chrome中,为每条虚线绘制一个实心笔画。 对为什么会发生这种情况有什么想法吗?
我正在使用硒与Java(最新的两个)。试图在我们的WebApp中的一个模式内的一个小画布区域上进行绘制。我们用来画布的库是'Signature pad JS'。我已经确认了它不是在iframe或任何可能出现问题的棘手的东西(它只是一个带有div.signature-input canvas元素的常规div.modal-body)。 但它什么也没做。我在这里看了很多stackoverflow的帖子,
我计划在我的应用程序中添加AdMob间隙广告。一切正常,但我想改变动画广告的外观。默认情况下,ad单元从下向上显示。我想更改动画以溶解或完全关闭它。有这样的机会吗? 我拥有的: > 对象 @接口GadInterstival:NSObject 显示方法: (false)呈现FromRootViewController:(nonnull UIViewController*)rootViewContro
我找到了几个与此相关的问题和答案,但没有一个解决方案让我明白为什么这段代码不起作用: 我有一个tkinter窗口,其中动态生成了内容——这意味着如果屏幕上有两个或多个小部件要显示,则需要能够向下滚动。我希望能够用小部件填充框架“f”,然后使用画布。创建_window()函数以可滚动方式显示它。 现在显示窗口,但滚动条未启用-类似于滚动区域不正确或滚动条与画布之间的链接不正确。