Пример #1
0
        public void Draw(Capsule3D capsule, Color color, int segments = Constants.DefaultSegments, int rings = 5)
        {
            Debug.Assert(segments >= 3, "Primitive 3D capsules must be rendered using at least three segments (for " +
                         "the circular portions).");
            Debug.Assert(rings > 0, "Primitive 3D capsules must be rendered using at least one ring (for the " +
                         "hemisphere end caps).");

            var h           = capsule.Height / 2;
            var r           = capsule.Radius;
            var orientation = capsule.Orientation;
            var p           = capsule.Position;
            var v           = orientation * vec3.UnitY;

            // TODO: Draw lines from the top-most ring to the top endpoint (mirrored on the bottom too).
            for (int i = 0; i < rings; i++)
            {
                var radius = (float)Math.Cos(Constants.PiOverTwo / rings * i) * r;
                var offset = r / rings * i;

                DrawCircle(radius, p + v * (h + offset), orientation, color, segments);
                DrawCircle(radius, p - v * (h + offset), orientation, color, segments);
            }

            for (int i = 0; i < segments; i++)
            {
                var d     = Utilities.Direction(Constants.TwoPi / segments * i) * r;
                var point = orientation * new vec3(d.x, 0, d.y) + p;

                DrawLine(point + v * h, point - v * h, color);
            }
        }
Пример #2
0
    private void RenderCollision <T>(Type type) where T : Collider
    {
        T[]   colliders = UnityEngine.Object.FindObjectsOfType <T>();
        Color color     = ColliderColor(type);

        AddToRenderList(colliders);

        switch (type)
        {
        case Type.Boxes:
            Box3D.Render(colliderList, color, EdgeAlpha, color, FaceAlpha, IsSet(Flags.NoDepth));
            Box3D.Render(triggerList, triggerColor, EdgeAlpha, triggerColor, FaceAlpha, IsSet(Flags.NoDepth));
            break;

        case Type.Spheres:
            Sphere3D.Render(colliderList, color, EdgeAlpha, color, FaceAlpha, IsSet(Flags.NoDepth));
            Sphere3D.Render(triggerList, triggerColor, EdgeAlpha, triggerColor, FaceAlpha, IsSet(Flags.NoDepth));
            break;

        case Type.Capsules:
            Capsule3D.Render(colliderList, color, EdgeAlpha, color, FaceAlpha, IsSet(Flags.NoDepth));
            Capsule3D.Render(triggerList, triggerColor, EdgeAlpha, triggerColor, FaceAlpha, IsSet(Flags.NoDepth));
            break;

        case Type.Meshes:
            Mesh3D.Render(colliderList, color, EdgeAlpha, color, FaceAlpha, IsSet(Flags.NoDepth));
            Mesh3D.Render(triggerList, triggerColor, EdgeAlpha, triggerColor, FaceAlpha, IsSet(Flags.NoDepth));
            break;

        case Type.Characters:
            Character3D.Render(colliderList, color, EdgeAlpha, color, FaceAlpha, IsSet(Flags.NoDepth));
            Character3D.Render(triggerList, triggerColor, EdgeAlpha, triggerColor, FaceAlpha, IsSet(Flags.NoDepth));
            guiColliderCount[(int)Type.Capsules] += colliderList.Count + triggerList.Count;
            break;
        }

        guiColliderCount[(int)type] += colliderList.Count + triggerList.Count;
    }