2 つのメッシュ (キューブ) を含むキャンバス レンダラーを設定します。私がする必要があるのはcatch the click event on each cube
、そのための便利なメソッドを呼び出すことです。
これまでのところ、すべてのレンダラーでクリック イベントをキャッチできました。つまり、cube1 と cube2 をクリックすると、クリックは同じものに属しますrenderer
。
私の質問は、各キューブでクリック イベントをバインドする方法です。
私の関連コードは次のとおりです。
//dom
var containerPopUp=document.getElementById('popup');
//renderer
var rendererPopUp = new THREE.CanvasRenderer();
rendererPopUp.setSize(420,200);
containerPopUp.appendChild(rendererPopUp.domElement);
//Scene
var scenePopUp = new THREE.Scene();
//Camera
var cameraPopUp = new THREE.PerspectiveCamera(50,60/60,1,1000);
cameraPopUp.position.z = 220;
cameraPopUp.position.y = 20;
//
scenePopUp.add(cameraPopUp);
//Add texture for the cube
//Use image as texture
var img2D = new THREE.MeshBasicMaterial({ //CHANGED to MeshBasicMaterial
map:THREE.ImageUtils.loadTexture('img/2d.png')
});
img2D.map.needsUpdate = true; //ADDED
//Add Cube
var cubeFor2D = new THREE.Mesh(new THREE.CubeGeometry(40,80,40),img2D);
cubeFor2D.position.x =- 60;
cubeFor2D.position.y = 20;
scenePopUp.add(cubeFor2D);
//
var img3D = new THREE.MeshBasicMaterial({ //CHANGED to MeshBasicMaterial
map:THREE.ImageUtils.loadTexture('img/3d.png')
});
img3D.map.needsUpdate = true;
var cubeFor3D = new THREE.Mesh(new THREE.CubeGeometry(40,80,40),img3D);
cubeFor3D.position.x = 60;
cubeFor3D.position.y=20;
scenePopUp.add(cubeFor3D);
//
rendererPopUp.render(scenePopUp,cameraPopUp);
//
animate();
rendererPopUp.domElement.addEventListener('click',testCall,false);//Here the click event is bound on the whole renderer, means what ever object in the renderer is clicked, the testCall method is called.
ご覧のとおり、cubeFor2D と cubeFor3D はレンダラーに含まれています。各メッシュでクリック イベントをバインドする必要があります。私はこれを試しましたthreex.domevent.js
:
var meshes = {};
meshes['mesh1'] = cubeFor2D;
meshes['mesh1'].on('mouseover', function(event){
//response to click...
console.log('you have clicked on cube 2D');
});
しかし、それは機能しません。コンソールで、次のエラーが発生しました。
TypeError: meshes.mesh1.on is not a function
もちろん、API ソース コード ファイルを含めました。
<script src="threex.domevent.js"></script>