iOS设备上的threejs中的raycast问题[rev69]

时间:2019-01-19 12:50:25

标签: ios three.js touch

我有一个带有书架的小three.js场景(在搅拌机中完成):

http://www.law-trainer.com/js/zimmer/hauptdatei/haupt.html

如果单击门,它将旋转。如果单击书架中的一本书,则将其打开;如果单击该书的右侧,则将开始照相机的飞行;如果单击该书的左侧,则它将返回到书架。单击时,视频画布将展开并开始播放视频(如果使用Firefox)。

这是我的问题:在iOS设备上没有此类响应。我该如何编写iOS事件以引起光线广播?这是当前不起作用的代码:

var projector = new THREE.Projector();
function onDocumentMouseDown( event ) {
    event.preventDefault();
    var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );

我几个月前失败了,这使我无法继续前进。在平板电脑或智能手机上,在android设备上我都没有问题。

非常感谢Ivo

----
囚犯849建议并在此请求中使用的事件处理程序解决了问题:40541390。查看场景here的新版本。

更改代码即可解决问题:

//before init(), in the section of the vars;
var raycaster;
var projector;

//within the body of init():
document.addEventListener('mousedown', onDocumentMouseDown, false);
document.addEventListener('touchstart', onDocumentTouchStart, false);

//outside of init():
function onDocumentTouchStart(event){
  event.preventDefault();
  event.clientX = event.touches[0].clientX;
  event.clientY = event.touches[0].clientY;
  onDocumentMouseDown(event);
}

function onDocumentMouseDown(event){
  projector = new THREE.Projector();
  var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
  projector.unprojectVector(vector,camera);
  raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize() );

  //...managing intersects
  var intersects = raycaster.intersectObjects( collidableMeshList );
  if ( intersects.length > 0 ) {
  //...etc
    }
  event.preventDefault();
}

0 个答案:

没有答案