сблъсък на ограничаваща кутия xna c#

Не съм наясно как да настроя това, в този случай имам нужда от кутии, а не от сфери, защото искам да знам дали лазер удря вражески кораб в моята 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 и BoundingBoxes в XNA. По същество те са една права линия или лъч, който определяте чрез преминаване в начална позиция и посока в конструктора. След това можете да извикате метода Intersects и да подадете BoundingBox или Sphere. Във вашия пример би било нещо подобно.

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

Имайте предвид, че intersects връща nullable float стойност. Тя ще бъде нула, ако няма сблъсък или плаваща стойност, указваща разстоянието от началната позиция на лъчите, ако има сблъсък.

Тази плаваща стойност може да се използва, за да определите коя от вашите потенциални цели е най-близка до лъча, например преминавате през вашите кораби и един кораб се сблъсква с плаваща стойност 3, но другият се сблъсква с плаваща стойност 5. Знаете, че корабът със стойност 3 е най-близо до източника на лазерния лъч, така че можете да игнорирате останалите.

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

person robasaurus    schedule 04.03.2013