Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Intersects() [2/9]

bool Microsoft.Xna.Framework.BoundingFrustum.Intersects ( BoundingFrustum frustum)
inline

Definition at line 236 of file BoundingFrustum.cs.

237 {
238 if (frustum == null)
239 {
240 throw new ArgumentNullException("frustum");
241 }
242 if (gjk == null)
243 {
244 gjk = new Gjk();
245 }
246 gjk.Reset();
247 Vector3.Subtract(ref cornerArray[0], ref frustum.cornerArray[0], out var result);
248 if (result.LengthSquared() < 1E-05f)
249 {
250 Vector3.Subtract(ref cornerArray[0], ref frustum.cornerArray[1], out result);
251 }
252 float num = float.MaxValue;
253 float num2 = 0f;
254 Vector3 v = default(Vector3);
255 do
256 {
257 v.X = 0f - result.X;
258 v.Y = 0f - result.Y;
259 v.Z = 0f - result.Z;
260 SupportMapping(ref v, out var result2);
261 frustum.SupportMapping(ref result, out var result3);
262 Vector3.Subtract(ref result2, ref result3, out var result4);
263 float num3 = result.X * result4.X + result.Y * result4.Y + result.Z * result4.Z;
264 if (num3 > 0f)
265 {
266 return false;
267 }
268 gjk.AddSupportPoint(ref result4);
269 result = gjk.ClosestPoint;
270 float num4 = num;
271 num = result.LengthSquared();
272 num2 = 4E-05f * gjk.MaxLengthSquared;
273 if (num4 - num <= 1E-05f * num4)
274 {
275 return false;
276 }
277 }
278 while (!gjk.FullSimplex && num >= num2);
279 return true;
280 }
void SupportMapping(ref Vector3 v, out Vector3 result)
bool AddSupportPoint(ref Vector3 newPoint)
Definition Gjk.cs:67

References Microsoft.Xna.Framework.Gjk.AddSupportPoint(), Microsoft.Xna.Framework.Gjk.ClosestPoint, Microsoft.Xna.Framework.BoundingFrustum.cornerArray, System.E, Microsoft.Xna.Framework.Gjk.FullSimplex, Microsoft.Xna.Framework.BoundingFrustum.gjk, Microsoft.Xna.Framework.Gjk.MaxLengthSquared, Microsoft.Xna.Framework.Gjk.Reset(), Microsoft.Xna.Framework.Vector3.Subtract(), Microsoft.Xna.Framework.BoundingFrustum.SupportMapping(), and Microsoft.Xna.Framework.Vector3.X.