public void AddVolume(Vector3 size, Vector3 center, Transform transform) { var x = Mathf.Abs(size.x) * 0.5f; var y = Mathf.Abs(size.y) * 0.5f; var z = Mathf.Abs(size.z) * 0.5f; var vertices = new Vector3[] { new Vector3(-x, -y, z), new Vector3(x, -y, z), new Vector3(-x, y, z), new Vector3(x, y, z), new Vector3(-x, -y, -z), new Vector3(x, -y, -z), new Vector3(-x, y, -z), new Vector3(x, y, -z) }; var bmins = RasterVectorUtils.MaxVector3; var bmaxs = RasterVectorUtils.MinVector3; foreach (var v in vertices) { var worldVert = RasterVectorUtils.Add(center, transform.localToWorldMatrix.MultiplyPoint3x4(v)); bmins = RasterVectorUtils.Min(bmins, worldVert); bmaxs = RasterVectorUtils.Max(bmaxs, worldVert); } AddVolume(bmins, bmaxs); }
protected void RecalcBounds() { var bmins = RasterVectorUtils.MaxVector3; var bmaxs = RasterVectorUtils.MinVector3; for (int vidx = 0; vidx < _vertices.Length; ++vidx) { var v = ToWorldVertex(_vertices[vidx]); bmins = RasterVectorUtils.Min(bmins, v); bmaxs = RasterVectorUtils.Max(bmaxs, v); } if (_vertices.Length > 0) { if (bmins.x.Equals(bmaxs.x)) { bmins.x -= 0.1f; bmaxs.x += 0.1f; } if (bmins.y.Equals(bmaxs.y)) { bmins.y -= 0.1f; bmaxs.y += 0.1f; } if (bmins.z.Equals(bmaxs.z)) { bmins.z -= 0.1f; bmaxs.z += 0.1f; } } _bounds = _vertices.Length > 0 ? new RasterBounds(bmins, bmaxs) : RasterBounds.ZeroBounds; }