将细分添加到几何体

时间:2012-12-14 14:22:26

标签: three.js

我正在尝试将细分添加到这样的球体中:

http://stemkoski.github.com/Three.js/Subdivision-Cube.html

这是我的代码:http://jsfiddle.net/mdrorum/HvFLw/

        <script src="http://mrdoob.github.com/three.js/build/three.js"></script>

            <script type="text/javascript">

            var camera, scene, renderer;
            var geometry, material, mesh;
            var smooth, subdiv, modifier;

            init();
            animate();

            function init() {

                camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
                camera.position.z = 1000;

                scene = new THREE.Scene();

                renderer = new THREE.CanvasRenderer();
                renderer.setSize( window.innerWidth, window.innerHeight );

                document.body.appendChild( renderer.domElement );

                geometry = new THREE.SphereGeometry( 200 );
                material = new THREE.MeshBasicMaterial( { color: 0x00ff00, wireframe: true } );

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

                var smooth = mesh.clone();
                var subdiv = 3;
                var modifier = new THREE.SubdivisionModifier( subdiv );
                //modifier.modify( smooth );


            }

            function animate() {

                requestAnimationFrame( animate );

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

                renderer.render( scene, camera );

            }

        </script>

这很好,但取消注释://modifier.modify( smooth );

什么都没发生。 :(

如何添加细分?

2 个答案:

答案 0 :(得分:3)

Here你可以找到一个有效demo的好教程。引用作者:

// First we want to clone our original geometry.
// Just in case we want to get the low poly version back.
var smooth = THREE.GeometryUtils.clone( geometry );

// Next, we need to merge vertices to clean up any unwanted vertex. 
smooth.mergeVertices();

// Create a new instance of the modifier and pass the number of divisions.
var divisions = 3;
var modifier = new THREE.SubdivisionModifier(divisions);

// Apply the modifier to our cloned geometry.
modifier.modify( smooth );

// Finally, add our new detailed geometry to a mesh object and add it to our scene.
var mesh = new THREE.Mesh( smooth, new THREE.MeshPhongMaterial( { color: 0x222222 } ) );
scene.add( mesh );

答案 1 :(得分:2)

您正在尝试修改mesh。您需要修改geometry

modifier.modify( geometry );