2016-09-11 4 views
1

Я использую пулю/ammo.js с тр.js. У меня есть 3d-сетка, и я хочу использовать точную форму для обнаружения столкновения с мягким телом. Есть ли способ создать трехмерное твердое тело (в пуле) из сетки (в трёх.js)?Жесткое тело (форма) в пуле/ammo.js из сетки в трёх цветах.

Ниже приведен пример: http://kidzinski.com/miamisura/lazy3d/ (пожалуйста, подождите секунду для загрузки третьей модели). У меня есть тряпка, падающая на трехмерное тело, и мне нужно смоделировать столкновение этой ткани с телом.

Я новичок в этих рамках извините, если я в корне неправильно понял что-то.

+1

Обратите внимание, что вы, вероятно, не хотите использовать сетку, которая детализирована (она очень быстро вычисляется очень тяжело), ​​и для таких вычислений обычно используется прокси-модель с низким количеством полисов. Визуально это не будет иметь особого значения. Вам понадобится программное обеспечение для 3D-моделирования, чтобы сделать эту сетку с низким количеством полисов, хотя делать ее программно сложно, и при ее создании вручную вы можете точно настроить результат. – Leeft

+0

@ Спасибо за то, что я ожидаю некоторых вычислительных проблем с прямым подходом, но все же хочу начать с чего-либо работающего, так как правильная физика является ключом к проекту. В следующем шаге я попытаюсь использовать низкополиное приближение (особенно в тех регионах, где мне меньше всего заботятся). Благодаря! –

ответ

3

Похоже, вы можете сделать какую-то работу, чтобы превратить произвольную сетку Three.js в вогнутую сетку Bullet. Это поддерживается Physi.js, который представляет собой подключаемый модуль для подключения Three.js непосредственно к ammo.js. Я лично не рекомендовал бы использовать проект (Physi.js), но вы можете посмотреть исходный код, чтобы увидеть, как они реализуют вогнутые сетки.

Сначала цикл по геометрии, чтобы создать собственный список «треугольник» объектов данных на these lines of physi.js

for (i = 0; i < geometry.faces.length; i++) { 
    face = geometry.faces[i]; 
    if (face instanceof THREE.Face3) { 
     triangles.push([ 
      ... 

Затем эти треугольники передаются от до Ammo.js сделать new Ammo.btBvhTriangleMeshShape on these lines:

for (i = 0; i < description.triangles.length; i++) { 
    ... 
    triangle_mesh.addTriangle(_vec3_1, _vec3_2, _vec3_3, true); 
} 

... 

shape = new Ammo.btBvhTriangleMeshShape(triangle_mesh, true, true); 

Это должно стать хорошей отправной точкой для создания вашей собственной сетки Ammo.js.

+0

Выглядит отлично, спасибо большое! Я попробую его и вернусь в случае проблем –

+0

Я подтвердил, что это работает с ThreeJS и ammo.js. Благодаря! – fallingCode

0

Существует множество потоков по сети, что сетка Physijs Concave не работает с коллизией. Кажется, что btBvhTriangleMeshShape не предназначен для работы с collission в ammo.js, поскольку я обнаружил поиск этой темы в форумах, связанных с пулями.

То, что сработало для меня, btConvexHullShape:

var triangle, triangle_mesh = new Ammo.btTriangleMesh; 
var btConvexHullShape = new Ammo.btConvexHullShape(); 
var _vec3_1 = new Ammo.btVector3(0,0,0); 
var _vec3_2 = new Ammo.btVector3(0,0,0); 
var _vec3_3 = new Ammo.btVector3(0,0,0); 
for (i = 0; i < triangles.length; i++) { 
    triangle = triangles[i]; 
    _vec3_1.setX(triangle[0].x); 
    _vec3_1.setY(triangle[0].y); 
    _vec3_1.setZ(triangle[0].z); 
    btConvexHullShape.addPoint(_vec3_1,true); 
    _vec3_2.setX(triangle[1].x); 
    _vec3_2.setY(triangle[1].y); 
    _vec3_2.setZ(triangle[1].z); 
    btConvexHullShape.addPoint(_vec3_2,true); 
    _vec3_3.setX(triangle[2].x); 
    _vec3_3.setY(triangle[2].y); 
    _vec3_3.setZ(triangle[2].z); 
    btConvexHullShape.addPoint(_vec3_3,true); 
    triangle_mesh.addTriangle(
     _vec3_1, 
     _vec3_2, 
     _vec3_3, 
     true 
    ); 
} 
return btConvexHullShape; 

В процессе обучения PHYSIC 3d на основе с threejs, я также хочу отметить следующие лучшие практики: при использовании сложных моделей, создать низкую модель поли что вы можете нажать на эту функцию преобразователя вместо исходной модели или столкнуться с переполнением стека.

+0

Где используется triangle_mesh? – fallingCode

+0

Просто тестировал различные решения –

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

  • Нет связанных вопросов^_^