我有一个带有书架的小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();
}