当前位置: 首页 > 知识库问答 >
问题:

动画画布广告牌在三个。js

鲁财
2023-03-14

各位,

我正在尝试为映射到平面上的基于画布的纹理设置动画,如广告牌。我已经强调要包括材料。需要日期

下面是代码:


    
      
      
        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 );
            }

这会运行,但我似乎无法更新画布纹理材质。我忽略了什么?非常感谢您的指点!

共有2个答案

许嘉福
2023-03-14

每次使用纹理(每次渲染循环)时,需要更新标志都会重置(为false),因此在渲染循环中需要将其设置为true(在渲染调用之前,否则会关闭一帧)。所以在你的例子中,把sign.material.map.needsUpdate=true放在之前renderer.render(场景,相机)texture.needsUpdate=truematerial.needsUpdate=不需要true

此外,您只需在纹理上设置needsUpdate标志,因为材质属性不会更改。

燕璞
2023-03-14

将此项放在render()调用之前:

sign.material.map.needsUpdate = true;

小提琴:http://jsfiddle.net/pPKVa/

 类似资料:
  • 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()函数以可滚动方式显示它。 现在显示窗口,但滚动条未启用-类似于滚动区域不正确或滚动条与画布之间的链接不正确。