ThreeJSを使用して、エンティティのリストを表示するWebアプリケーションを開発しています。それぞれに対応する「表示」ボタンと「非表示」ボタンがあります。例: entityName View Hide。ユーザーが[表示] ボタンをクリックすると、次の関数が呼び出され、エンティティが画面に正常に描画されます。
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.remove(object.name);
直後に追加した結果、「表示」ボタンをクリックすると、(予想どおり) エンティティが描画されず、内でうまく機能したことを意味します。しかし、まだ removeEntity(object) で使用する方法がわかりません。scene.add(object);
addEntity
scene.remove(object.name);
addEntity
また、scene.children の内容を確認したところ、[オブジェクト オブジェクト]、[オブジェクト オブジェクト]、[オブジェクト オブジェクト]、[オブジェクト オブジェクト]、[オブジェクト オブジェクト]、[オブジェクト オブジェクト] が表示されます。
完全なコード: http://devplace.in/~harman/model_display1.php.html
詳細が必要な場合はお尋ねください。ThreeJSのrev-59-devとrev-60でテストしました。
ありがとう。:)