Beispiel #1
0
    private static void AppendFlatDoubleSidedTriangleVerticesToModel(
        float leftSegmentFraction,
        float rightSegmentFraction,
        ModelColorationType modelColoration,
        Matrix4x4 placementMatrix,
        ref List <SwarmShaderSwarmerModelVertex> inoutSwarmerModelVertices)
    {
        Vector3 forwardPosition = Vector3.forward;
        Vector3 rightPosition   = (Quaternion.AngleAxis(120.0f, Vector3.up) * forwardPosition);
        Vector3 leftPosition    = (Quaternion.AngleAxis(-120.0f, Vector3.up) * forwardPosition);

        Vector4 topFacetColor;
        Vector4 bottomFacetColor;

        switch (modelColoration)
        {
        case ModelColorationType.DebugFacetIdentification:
            topFacetColor    = Color.cyan;
            bottomFacetColor = Color.red;
            break;

        case ModelColorationType.ShinyFlatFacets:
            topFacetColor    = Color.yellow;
            bottomFacetColor = Color.yellow;
            break;

        default:
            throw new System.ComponentModel.InvalidEnumArgumentException();
        }

        Vector4 baseEmissionColor = Color.white;

        // Top facet.
        AppendSimpleTriangleVerticesToModel(
            new Vector3[] { forwardPosition, rightPosition, leftPosition },
            topFacetColor,
            baseEmissionColor,
            leftSegmentFraction,
            rightSegmentFraction,
            FacetType.Generic,
            placementMatrix,
            ref inoutSwarmerModelVertices);

        // Bottom facet.
        AppendSimpleTriangleVerticesToModel(
            new Vector3[] { forwardPosition, leftPosition, rightPosition },
            bottomFacetColor,
            baseEmissionColor,
            leftSegmentFraction,
            rightSegmentFraction,
            FacetType.Generic,
            placementMatrix,
            ref inoutSwarmerModelVertices);
    }
Beispiel #2
0
    private static void AppendTriangularBifrustumVerticesToModel(
        float leftSegmentFraction,
        float rightSegmentFraction,
        ModelColorationType modelColoration,
        FacetType frontLeftFacetType,
        FacetType frontRightFacetType,
        FacetType rearFacetType,
        Matrix4x4 placementMatrix,
        ref List <SwarmShaderSwarmerModelVertex> inoutSwarmerModelVertices)
    {
        // Top-half.
        AppendTriangularFrustumVerticesToModel(
            leftSegmentFraction,
            rightSegmentFraction,
            modelColoration,
            frontLeftFacetType,
            frontRightFacetType,
            rearFacetType,
            true,             // useTopHalfColoring
            placementMatrix,
            ref inoutSwarmerModelVertices);

        // Bottom-half.
        {
            Matrix4x4 flippingMatrix = Matrix4x4.TRS(
                Vector3.zero,
                Quaternion.AngleAxis(180.0f, Vector3.forward),
                Vector3.one);

            AppendTriangularFrustumVerticesToModel(
                leftSegmentFraction,
                rightSegmentFraction,
                modelColoration,
                frontRightFacetType,   // NOTE: Left-right swapped.
                frontLeftFacetType,    // NOTE: Left-right swapped.
                rearFacetType,
                false,                 // useTopHalfColoring
                (placementMatrix * flippingMatrix),
                ref inoutSwarmerModelVertices);
        }
    }
Beispiel #3
0
    private static void AppendTriangularFrustumVerticesToModel(
        float leftSegmentFraction,
        float rightSegmentFraction,
        ModelColorationType modelColoration,
        FacetType frontLeftFacetType,
        FacetType frontRightFacetType,
        FacetType rearFacetType,
        bool useTopHalfColoring,
        Matrix4x4 placementMatrix,
        ref List <SwarmShaderSwarmerModelVertex> inoutSwarmerModelVertices)
    {
        float bevelSizeY = 0.2f;
        float bevelSizeZ = 0.6f;

        Vector3 baseForwardPosition = Vector3.forward;
        Vector3 baseRightPosition   = (Quaternion.AngleAxis(120.0f, Vector3.up) * baseForwardPosition);
        Vector3 baseLeftPosition    = (Quaternion.AngleAxis(-120.0f, Vector3.up) * baseForwardPosition);

        Vector3 topForwardPosition = (baseForwardPosition + new Vector3(0.0f, bevelSizeY, (-1.0f * bevelSizeZ)));
        Vector3 topRightPosition   = (Quaternion.AngleAxis(120.0f, Vector3.up) * topForwardPosition);
        Vector3 topLeftPosition    = (Quaternion.AngleAxis(-120.0f, Vector3.up) * topForwardPosition);

        Vector4 rearFacetAlbedoColor;
        Vector4 frontLeftFacetAlbedoColor;
        Vector4 frontRightFacetAlbedoColor;
        Vector4 topFacetAlbedoColor;

        switch (modelColoration)
        {
        case ModelColorationType.DebugFacetIdentification:
        {
            rearFacetAlbedoColor       = Color.green;
            frontLeftFacetAlbedoColor  = Color.blue;
            frontRightFacetAlbedoColor = Color.red;
            topFacetAlbedoColor        = (useTopHalfColoring ? Color.yellow : Color.cyan);

            break;
        }

        case ModelColorationType.ShinyFlatFacets:
        {
            Vector4 sideColor = new Color(0.6f, 0.6f, 0.6f);

            rearFacetAlbedoColor       = sideColor;
            frontLeftFacetAlbedoColor  = sideColor;
            frontRightFacetAlbedoColor = sideColor;

            topFacetAlbedoColor = new Color(0.05f, 0.05f, 0.05f);

            break;
        }

        default:
            throw new System.ComponentModel.InvalidEnumArgumentException();
        }

        if (useTopHalfColoring == false)
        {
            Vector4 swapStorage = frontLeftFacetAlbedoColor;
            frontLeftFacetAlbedoColor  = frontRightFacetAlbedoColor;
            frontRightFacetAlbedoColor = swapStorage;
        }

        Vector4 baseEmissionColor = Color.white;

        // Rear facet.
        AppendSimpleQuadVerticesToModel(
            new Vector3[] { baseLeftPosition, topLeftPosition, topRightPosition, baseRightPosition },
            rearFacetAlbedoColor,
            baseEmissionColor,
            leftSegmentFraction,
            rightSegmentFraction,
            rearFacetType,
            placementMatrix,
            ref inoutSwarmerModelVertices);

        // Front-left facet.
        AppendSimpleQuadVerticesToModel(
            new Vector3[] { baseForwardPosition, topForwardPosition, topLeftPosition, baseLeftPosition },
            frontLeftFacetAlbedoColor,
            baseEmissionColor,
            leftSegmentFraction,
            rightSegmentFraction,
            frontLeftFacetType,
            placementMatrix,
            ref inoutSwarmerModelVertices);

        // Front-right facet.
        AppendSimpleQuadVerticesToModel(
            new Vector3[] { baseRightPosition, topRightPosition, topForwardPosition, baseForwardPosition },
            frontRightFacetAlbedoColor,
            baseEmissionColor,
            leftSegmentFraction,
            rightSegmentFraction,
            frontRightFacetType,
            placementMatrix,
            ref inoutSwarmerModelVertices);

        // Top facet.
        AppendSimpleTriangleVerticesToModel(
            new Vector3[] { topForwardPosition, topRightPosition, topLeftPosition },
            topFacetAlbedoColor,
            baseEmissionColor,
            leftSegmentFraction,
            rightSegmentFraction,
            FacetType.Top,
            placementMatrix,
            ref inoutSwarmerModelVertices);
    }