canvas/threejs レンダラーのサーバー側制御については、これらのオブジェクトを配列に格納するだけでよいことがわかりました。ローダーまたは他のメッシュを使用する場合は、それに名前を追加するだけです。
これにより、(私の場合) オブジェクトが既にシーンにあるかどうかを簡単に確認できます。
例:
var AllObject = []; // <-- the array that holds all objects in the scene.
var scene = new THREE.Scene(), // <-- creates basic threejs scene
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ),
renderer = new THREE.WebGLRenderer(); //<-- creates WebGL renderer
renderer.setSize( window.innerWidth, window.innerHeight ); //<-- set the size of the canvas
document.body.appendChild( renderer.domElement ); //<-- add canvas to body
/* now the part that i use to check if an object is already in scene. */
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
AllObject[NAMEOFOBJECT] = new THREE.Mesh( geometry, material ); //<-- here comes the trick, insted of making a new var object just put it into an array with [] not {}!
scene.add( cube );
以下の if ステートメントを使用すると、オブジェクトを見つけることができ、if ステートメントは配列のindexOf
位置番号をチェックします。
if(~AllObjects.indexOf("NAMEOFOBJECT"){
// you could remove the object by using scene.reomve(AllObjects.NAMEOFOBJECT);
// or just say for example console.log("Object already in the scene");
}else{
// here you can make the object if it doesn't exists.
}
NAMEOFOBJECT
任意の名前にすることができます。