监听鼠标移动,几何体变大变小,监听鼠标点击,弹出信息使用方法:Raycasterimport*asTHREEfrom'three'import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'importStatsfrom'three/examples/jsm/libs/stats.module'letcontainer,statsletcamera,scene,raycaster,rendererletINTERSECTEDconstpointer=newTHREE.Vector2()letclickPosX=0,clickPosY=0functiononPointerMove(event){指针。x=(event.clientX/window.innerWidth)*2-1pointer.y=-(event.clientY/window.innerHeight)*2+1如果(INTERSECTED){INTERSECTED.scale.set(3,3,3)}render()}functiononPointerClick(event){pointer.x=(event.clientX/window.innerWidth)*2-1pointer.y=-(event.clientY/window.innerHeight)*2+1if(INTERSECTED){alert('clicked'+INTERSECTED.name)}render()}functioncalcMousePosition(event,x,y){//确定信息弹出窗口的位置varevent=event||window.eventif(event.pageX||event.pageY){x=event.pageXy=event.pageY}elseif(event.clientX||event.clientY){x=event.clientX+document.documentElement.scrollLeft+document.body.scrollLefty=event.clientY+document.documentElement.scrollTop+document.body.scrollTop}返回{x:x,y:y}}functioncreateDom(){constgeometry=newTHREE.BoxBufferGeometry(10,10,10)constmaterial=newTHREE.MeshBasicMaterial({color:0x00fa9a})constmesh=newTHREE.Mesh(geometry,material)mesh.name='几何体1'scene.add(mesh)mesh.position.set(0,-5,0)constgeometry1=newTHREE.BoxBufferGeometry(10,10,10)constmesh1=newTHREE.Mesh(geometry1,material)mesh1.name='几种体2'scene.add(mesh1)mesh1.position.set(0,20,0)constambient=newTHREE.AmbientLight(0xffffff,1)scene.add(ambient)//varaxesHelper=newTHREE.AxesHelper(250)//scene.add(axesHelper)}functioninit(){scene=newTHREE.Scene()scene.background=newTHREE.Color(0xffffff)相机=newTHREE.PerspectiveCamera(35,window.innerWidth/window.innerHeight,0.1,1000)camera.position.set(18,20,100)renderer=newTHREE.WebGLRenderer()renderer.setPixelRatio(window.devicePixelRatio)renderer.setSize(窗口。innerWidth,window.innerHeight)document.body.appendChild(renderer.domElement)controls=newOrbitControls(camera,renderer.domElement)controls.addEventListener('change',render)window.addEventListener('resize',onWindowResize)文档.addEventListener('mousemove',onPointerMove)document.addEventListener('click',onPointerClick)stats=newStats()document.body.appendChild(stats.dom)raycaster=newTHREE.Raycaster()createDom()}functiononWindowResize(){camera.aspect=window.innerWidth/window.innerHeightcamera.updateProjectionMatrix()renderer.setSize(window.innerWidth,window.innerHeight)}functionrender(){stats.update()camera.updateMatrixWorld()raycaster.setFromCamera(指针,相机)常量intersects=raycaster.intersectObjects(scene.children,false)if(intersects.length>0){if(INTERSECTED!=intersects[0].object){if(INTERSECTED){INTERSECTED.scale.set(1,1,1)INTERSECTED=null}INTERSECTED=intersects[0].object}}else{if(INTERSECTED){INTERSECTED.scale.set(1,1,1)INTERSECTED=null}}renderer.render(scene,camera)}init()使成为()
