osg::Обнаружение смещения пересечения границ

#c #openscenegraph

Вопрос:

Мне нужно проверить пересечение между двумя движущимися узлами, прежде чем они ударятся.

У меня есть этот код, который работает, но это верно только тогда, когда они уже попали.

Есть ли простой способ дать смещение ограничивающему прямоугольнику, чтобы он давал значение true до того, как они попадут?

 osg::ComputeBoundsVisitor cbv;
MatrixTransform* transform = new osg::MatrixTransform;
transform->addChild(node);
transform->accept(cbv);
osg::BoundingBox bb = cbv.getBoundingBox();

osg::ComputeBoundsVisitor cbv2;
MatrixTransform* transform2 = new osg::MatrixTransform;
transform2->addChild(node2);
transform2->accept(cbv2);
osg::BoundingBox bb2 = cbv2.getBoundingBox();

bool intersects=bb.intersects(bb2);
 

Ответ №1:

Вы можете вручную использовать расширение ( https://codedocs.xyz/openscenegraph/OpenSceneGraph/a01950.html#a4d779d1d6346bce5b3ae469c886a777f ) для увеличения размера ограничительной рамки. Возьмите существующую минимальную точку XYZ, добавьте свое смещение и вызовите expandBy. Повторите с максимальной точкой XYZ.