Three.js:完全改变对象的几何

时间:2013-11-14 12:00:20

标签: three.js

编辑

如何替换对象的几何图形,使对象本身(和场景层次结构)完好无损?

mesh.geometry直接分配给新GeometryneedsUpdate = true在我的代码中不起作用。

这是来自three.js网站(http://threejs.org/docs/#Manual/Introduction/Creating_a_scene)的代码示例,我的小添加内容标记为“my 1”,“my 2”和“my3”。

        var scene = new THREE.Scene();
        var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);

        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);

        camera.position.z = 5;

        var geomCube = new THREE.CubeGeometry(1,1,1),
            geomSphere = new THREE.SphereGeometry(1);

        var material = new THREE.MeshBasicMaterial({color: 0x20a0e0, wireframe: true, wireframeLinewidth: 3});

        var mesh = new THREE.Mesh(geomCube, material);

        scene.add(mesh);

        // ******** my 1 ********
        mesh.geometry = geomSphere;
        mesh.geometry.needsUpdate = true;

        // ******** my 3 ********
        function onclickTest()
            {
            mesh.geometry = geomCube;
            mesh.geometry.needsUpdate = true;
            }


        var cnt = 300;

        var render = function () {
            requestAnimationFrame(render);

            mesh.rotation.x += 0.01;
            mesh.rotation.y += 0.01;

            renderer.render(scene, camera);

            // ******** my 2 ********
            if ( !cnt-- )
                {
                mesh.geometry = geomCube;
                mesh.geometry.needsUpdate = true;
                }

        };

        render();

代码“my 1”有效,它将初始立方体更改为球体。但是代码“my 2”会导致three.js内部出错。我也将相同的代码放在按钮的onclick句柄中,而不是在渲染循环(“我的3”)中,但结果相同:它失败了。

有人可以告诉几何替换的好方法吗?

P.S。 原则上,我们可以在场景层次结构中的“网格”位置放置“虚拟”节点。网格节点可以作为子节点链接到虚拟节点。在这种情况下,网格删除和创建不会影响场景的结构。但我不喜欢这个解决方案,它看起来并不自然。

0 个答案:

没有答案