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);
        }
Esempio n. 2
0
        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;
        }