2014-12-29 8 views
0

я получаю пересечения мыши с Three.js как этотПолучить вращение лицо three.js

me.vector.set(
    (event.clientX/window.innerWidth) * 2 - 1, 
    -(event.clientY/window.innerHeight) * 2 + 1, 
    0.5); 
me.vector.unproject(app.camera); 
me.ray.set(app.camera.position, me.vector.sub(app.camera.position).normalize()); 
var intersects = me.ray.intersectObjects(app.colliders, false); 

Таким образом, я получил пересекается отлично, со следующими свойствами:

distance, face, faceIndex, object, point, а потом выполните функцию.

Проблема заключается в следующем:

Я хочу, чтобы определить, когда я нажимаю грань куба, то есть, как пол, в следующем примере будет серое лицо.

жаль моего Engilsh D:

enter image description here

ответ

1

WebGL определяет вершины и грани с координатами, цветов и нормалей. Нормальная норма лица - это нормализованный вектор, перпендикулярный плоскости лица (и обычно указывающий «снаружи» сетку). Он определяет его ориентацию и позволяет, например, рассчитать молнию. В three.js вы можете получить к нему доступ через face.normal.

  • Если пол-подобные грани stricly по горизонтали, то их нормали все точно {x:0,y:1,z:0}. А так как нормали нормализуются, просто проверьте, проверяет ли face.normal.y === 1, что x и y равны 0.

  • Если ваши лица не являются строго горизонтальными, вам может потребоваться установить предельный угол с осью y. Вы можете рассчитать этот угол с var angle=Math.acos(Yaxis.dot(faceNormal)) где Yaxis=new THREE.Vector3(0,1,0).

+0

Спасибо @Astrak, он отлично работает – drtobal

Смежные вопросы