【发布时间】:2013-08-23 19:56:46
【问题描述】:
我正在使用 ThreeJS 开发一个显示实体列表的 Web 应用程序,每个实体都有相应的“查看”和“隐藏”按钮;例如entityName 查看隐藏。当用户点击查看按钮时,会调用以下函数并成功在屏幕上绘制实体。
function loadOBJFile(objFile){
/* material of OBJ model */
var OBJMaterial = new THREE.MeshPhongMaterial({color: 0x8888ff});
var loader = new THREE.OBJLoader();
loader.load(objFile, function (object){
object.traverse (function (child){
if (child instanceof THREE.Mesh) {
child.material = OBJMaterial;
}
});
object.position.y = 0.1;
scene.add(object);
});
}
function addEntity(object) {
loadOBJFile(object.name);
}
点击隐藏按钮,会调用以下函数:
function removeEntity(object){
scene.remove(object.name);
}
问题是,当点击隐藏按钮时,实体并没有从屏幕上移除。我该怎么做才能使 隐藏 按钮起作用?
我做了一个小实验。我在scene.add(object); 之后在addEntity 函数中添加了scene.remove(object.name);,结果,当单击“查看”按钮时,没有绘制实体(如预期的那样),这意味着scene.remove(object.name); 在addEntity 中工作得很好。但我仍然无法弄清楚如何在 removeEntity(object) 中使用它。
另外,我检查了 scene.children 的内容,它显示:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
完整代码:http://devplace.in/~harman/model_display1.php.html
如果需要更多详细信息,请询问。我用 ThreeJS 的 rev-59-dev 和 rev-60 进行了测试。
谢谢。 :)
【问题讨论】:
-
也许你忘了更新场景(重新渲染)?是否存在渲染更新(requestAnimationFrame 循环或 renderer.render(...))?
-
我尝试在
scene.remove(object.name);在removeEntity(object)之后调用animate() (update() 和render() 在animate() 中调用),但没有变化。 :(
标签: javascript three.js