首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Three.js THREE.Projector已移至

Three.js THREE.Projector已移至
EN

Stack Overflow用户
提问于 2015-03-31 10:13:38
回答 7查看 29.5K关注 0票数 22

我知道版本71中没有THREE.projector (请参阅不推荐名单),但我不知道如何替换它,特别是在检测单击哪个对象的代码中:

代码语言:javascript
复制
var vector = new THREE.Vector3(
  (event.clientX / window.innerWidth) * 2 - 1,
  -(event.clientY / window.innerHeight) * 2 + 1,
  0.5
);
projector.unprojectVector(vector, camera);
var raycaster = new THREE.Raycaster(
  camera.position,
  vector.sub(camera.position).normalize()
);
var intersects = raycaster.intersectObjects(objects);
if (intersects.length > 0) {
  clicked = intersects[0];
  console.log("my clicked object:", clicked);
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-03-31 16:14:03

现在有了一种更简单的模式,既适用于正射型,也适用于透视相机类型:

代码语言:javascript
复制
var raycaster = new THREE.Raycaster(); // create once
var mouse = new THREE.Vector2(); // create once

...

mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;

raycaster.setFromCamera( mouse, camera );

var intersects = raycaster.intersectObjects( objects, recursiveFlag );

three.js r.84

票数 36
EN

Stack Overflow用户

发布于 2016-12-03 21:00:53

实际上,THREE.JS光机文档给出了这些答案中列出的所有相关信息,以及所有可能难以理解的缺失点。

代码语言:javascript
复制
var raycaster = new THREE.Raycaster(); 
var mouse = new THREE.Vector2(); 

function onMouseMove( event ) { 
  // calculate mouse position in normalized device coordinates 
  // (-1 to +1) for both components 
  mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; 
  mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1; 
} 

function render() { 
  // update the picking ray with the camera and mouse position
  raycaster.setFromCamera( mouse, camera ); 
  // calculate objects intersecting the picking ray var intersects =     
  raycaster.intersectObjects( scene.children ); 

  for ( var i = 0; i < intersects.length; i++ ) { 
    intersects[ i ].object.material.color.set( 0xff0000 ); 
  }

  renderer.render( scene, camera ); 
} 
window.addEventListener( 'mousemove', onMouseMove, false );        
window.requestAnimationFrame(render);`

希望能帮上忙。

票数 13
EN

Stack Overflow用户

发布于 2015-03-31 11:52:54

https://github.com/mrdoob/three.js/issues/5587

代码语言:javascript
复制
var vector = new THREE.Vector3();
var raycaster = new THREE.Raycaster();
var dir = new THREE.Vector3();

...

if ( camera instanceof THREE.OrthographicCamera ) {

    vector.set( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, - 1 ); // z = - 1 important!

    vector.unproject( camera );

    dir.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );

    raycaster.set( vector, dir );

} else if ( camera instanceof THREE.PerspectiveCamera ) {

    vector.set( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 ); // z = 0.5 important!

    vector.unproject( camera );

    raycaster.set( camera.position, vector.sub( camera.position ).normalize() );

}

var intersects = raycaster.intersectObjects( objects, recursiveFlag );

Objects = Object3D类型的对象数组,以检查与光线的交集。可能是你场景中的一切,但如果你有很多东西的话,可能效率很低。

recursiveFlag =如果为真,它也会检查所有的后代。否则,它只检查与对象的交集。默认值是真的。

文档

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29366109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档