已编辑
如何替换对象的几何体,使对象本身(和场景层次结构)完好无损?
直接分配mesh.geometry
给 newGeometry
并且needsUpdate = 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();
代码“我的 1”有效,它将初始立方体更改为球体。但是代码“my 2”会导致three.js中的错误。我还在按钮的 onclick 句柄中放置了相同的代码,而不是在渲染循环(“my 3”)中,但结果相同:它失败了。
有人能告诉我几何替换的好方法吗?
ps 原则上,我们可以将“虚拟”节点放置在场景层次结构中Meshes的位置上。网格节点可以作为子节点链接到虚拟节点。在这种情况下,网格的移除和创建不会影响场景的结构。但我不喜欢这个解决方案,它看起来不自然。