/// <summary> /// CalcGridForSkin /// </summary> /// <param name="i"></param> /// <param name="j"></param> /// <param name="k"></param> /// <param name="skin"></param> private void CalcGridForSkin(out int i, out int j, out int k, CollisionSkin skin) { Vector3 sides = skin.WorldBoundingBox.Max - skin.WorldBoundingBox.Min; if ((sides.X > dx) || (sides.Y > dy) || (sides.Z > dz)) { System.Diagnostics.Debug.WriteLine("CollisionSkin too big for gridding system - putting it into overflow list."); i = j = k = -1; return; } Vector3 min = skin.WorldBoundingBox.Min; min.X = JiggleMath.Wrap(min.X, 0.0f, sizeX); min.Y = JiggleMath.Wrap(min.Y, 0.0f, sizeY); min.Z = JiggleMath.Wrap(min.Z, 0.0f, sizeZ); i = (int)(min.X / dx) % nx; j = (int)(min.Y / dy) % ny; k = (int)(min.Z / dz) % nz; }
/// <summary> /// CalcGridForSkin /// </summary> /// <param name="i"></param> /// <param name="j"></param> /// <param name="k"></param> /// <param name="fi"></param> /// <param name="fj"></param> /// <param name="fk"></param> /// <param name="skin"></param> public void CalcGridForSkin(out int i, out int j, out int k, out float fi, out float fj, out float fk, CollisionSkin skin) { Vector3 sides = skin.WorldBoundingBox.Max - skin.WorldBoundingBox.Min; if ((sides.X > dx) || (sides.Y > dy) || (sides.Z > dz)) { System.Diagnostics.Debug.WriteLine("CollisionSkin too big for gridding system - putting it into overflow list."); i = j = k = -1; fi = fj = fk = 0.0f; return; } Vector3 min = skin.WorldBoundingBox.Min; min.X = JiggleMath.Wrap(min.X, 0.0f, sizeX); min.Y = JiggleMath.Wrap(min.Y, 0.0f, sizeY); min.Z = JiggleMath.Wrap(min.Z, 0.0f, sizeZ); fi = min.X / dx; fj = min.Y / dy; fk = min.Z / dz; i = (int)fi; j = (int)fj; k = (int)fk; if (i < 0) { i = 0; fi = 0.0f; } else if (i >= (int)nx) { i = 0; fi = 0.0f; } else { fi -= (float)i; } if (j < 0) { j = 0; fj = 0.0f; } else if (j >= (int)ny) { j = 0; fj = 0.0f; } else { fj -= (float)j; } if (k < 0) { k = 0; fk = 0.0f; } else if (k >= (int)nz) { k = 0; fk = 0.0f; } else { fk -= (float)k; } }