Как обнаружить пересечения между двумя узлами в jMonkey

Я работаю над java-проектом; «автомобильная игра», и я хочу обнаружить столкновения между автомобилем и любым объектом («Узел»); например конусы на дороге.

Подобно этому руководству; http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_picking

В учебнике показано, как найти пересечение между лучом и узлом, к которому прикреплены прямоугольники. Я хочу заменить луч на автомобильное шасси для обнаружения пересечения.


person Mostafa Abd El Razek    schedule 04.05.2013    source источник


Ответы (1)


Предположим, у вас есть два объекта столкновения a и b, и вы хотите обнаружить столкновения между ними. Сторонами столкновения могут быть геометрии, узлы с прикрепленными геометриями (включая корневой узел), плоскости, четырехугольники, линии или лучи. Важным ограничением является то, что вы можете сталкивать геометрию только с ограничивающими объемами или лучами. (Это означает, например, что a должен быть типа Node или Geometry, а b соответственно типа BoundingBox, BoundingSphere или Ray.)

Интерфейс com.jme3.collision.Collidable объявляет один метод, который возвращает количество столкновений, обнаруженных между двумя объектами Collidable: collideWith(Collidable other, CollisionResults results).

Пример кода:

// Calculate detection results
  CollisionResults results = new CollisionResults();
  a.collideWith(b, results);
  System.out.println("Number of Collisions between" + 
      a.getName()+ " and " + b.getName() + ": " + results.size());
  // Use the results
  if (results.size() > 0) {
    // how to react when a collision was detected
    CollisionResult closest  = results.getClosestCollision();
    System.out.println("What was hit? " + closest.getGeometry().getName() );
    System.out.println("Where was it hit? " + closest.getContactPoint() );
    System.out.println("Distance? " + closest.getDistance() );
  } else {
    // how to react when no collision occured
  }
}

Я думаю, вам также нужно прочитать этот учебник

http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:collision_and_intersection

Надеюсь это поможет.

person V-Q-A NGUYEN    schedule 27.11.2013
comment
что они не говорят вам, так это то, что вы можете использовать getWorldBound для получения правильной ограничивающей рамки пространственного. В учебнике что-то говорится о setBound, но это не работает, потому что преобразования не применяются к этой новой границе, поэтому она будет масштабироваться на 0,0,0 без вращения. Используйте getWorldBound вместо установки нового и его обновления. Мне потребовалось слишком много времени, чтобы понять это - person Jappie Kerk; 29.06.2014
comment
@JappieKerk Я пытаюсь найти способ создавать физические объекты таким образом, чтобы они не располагались поверх других объектов; Я хочу проверить, есть ли там объект, прежде чем включать новую физику; Я думаю, что getWorldBound() может помочь? - person Aquarius Power; 24.12.2014