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