Столкновение с ограничивающей рамкой xna С#

Я не понимаю, как это настроить. В этом случае мне нужны коробки, а не сферы, потому что я хочу знать, попадает ли лазер во вражеский корабль в моей 3D-сцене. вот мой код для сфер, как бы я изменил его на ограничивающие рамки. Потому что, если бы я использовал сферы для лазера, сфера была бы массивной и попала бы в корабль, даже если бы он находился далеко от настоящего лазера. все, что я спрашиваю, это как мне настроить ограничивающую рамку таким образом.

private bool Cannonfire(Model model1, Vector3 world1, Model model2, Vector3 world2)
        {
            for (int meshIndex1 = 0; meshIndex1 < model1.Meshes.Count; meshIndex1++)
            {
                BoundingSphere sphere1 = model1.Meshes[meshIndex1].BoundingSphere;
                sphere1.Center = world1;
                for (int meshIndex2 = 0; meshIndex2 < model2.Meshes.Count; meshIndex2++)
                {        
                    BoundingSphere sphere2 = model2.Meshes[meshIndex2].BoundingSphere;
                    sphere2.Center = world2;
                    if (sphere1.Intersects(sphere2))
                        return true;
                }
            }
            return false;
        }   

так как мне это спасибо за любую помощь.


person QuantumArchi    schedule 04.03.2013    source источник


Ответы (1)


Похоже, вам нужны лучи, которые можно использовать для пересечения BoundingSpheres и BoundingBox в XNA. По сути, это одна прямая линия или луч, который вы задаете, передавая начальное положение и направление в конструктор. Затем вы можете вызвать метод Intersects и передать BoundingBox или Sphere. В вашем примере это будет примерно так.

Ray laserBeam = new Ray(startingPosition, direction);
laserBeam.Intersects(shipBoundingSphere);

Обратите внимание, что функция intersects возвращает значение с плавающей запятой, допускающее значение NULL. Он будет нулевым, если нет столкновения, или значением с плавающей запятой, указывающим расстояние от начального положения лучей, если есть столкновение.

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

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.ray.intersects.aspx

person robasaurus    schedule 04.03.2013