2015-12-31 3 views
1

Выбор Raycasting отлично работает для моего проекта на статических сетках, однако для анимированных сеток выбор луча, похоже, не видит движения сетки и реагирует только на неанимированные сетки (оригинальное) положение.Выбор объекта raycasting Three.js с анимацией

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

element.addEventListener('mouseup', function (event) 
{ 

    var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, -(event.clientY/window.innerHeight) * 2 + 1, 0.5); 
    vector = vector.unproject(camera); 
    var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 
    var intersects = raycaster.intersectObjects(pickable_objects, true); 

    if (intersects.length > 0) 
    { 
     //I change the object's material colour so that I can see the selection 
    } 
} 

Где pickable_objects представляет собой массив объектов three.js сетки, которые выбираются, они не несут в себе информацию анимации, насколько я знаю, так что результат я Жаловаться на них может не удивительно.

Я не включил код изменения цвета или код считывателя JSON здесь, так как я не считаю, что это уместно.

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

ответ

1

Если вы посмотрите исходный код в репозитории github, в частности Raycaster.js, вы увидите, что фактическая реализация находится в объекте геометрии. Например, Mesh.js реализует raycast путем итерации по его треугольникам и проверки того, пересекает ли луч любой из них, но SkinnedMesh.js не переопределяет этот метод.

Наконец, быстрый поиск на странице проблем показал, что это на самом деле известное ограничение - https://github.com/mrdoob/three.js/issues/6440.

Кажется, что у вас осталось 2 варианта - решить проблему в github и попросить ETA или реализовать это самостоятельно (и после этого вы можете отправить запрос на вытягивание).

+0

Спасибо за ваш ответ, это довольно раздражает, я проверю источник и перейду на страницу git. –

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