Пример #1
0
    public void PushTriangle(short vtColorIndex, ref Vector3 v1, ref Vector3 v2, ref Vector3 v3, bool renderWinding)
    {
        int lastIndex = Vertices.Count;

        Vertices.Add(v1);
        Vertices.Add(v2);
        Vertices.Add(v3);

        // winding is for RHS so apply reverse for Unity
        if (renderWinding)
        {
            Triangles.Add(lastIndex + 0);
            Triangles.Add(lastIndex + 1);
            Triangles.Add(lastIndex + 2);
        }
        else
        {
            Triangles.Add(lastIndex + 0);
            Triangles.Add(lastIndex + 2);
            Triangles.Add(lastIndex + 1);
        }

        for (int i = 0; i < 3; ++i)
        {
            ColorIndices.Add(vtColorIndex);
        }
    }
Пример #2
0
    public void PushQuad(short vtColorIndex, ref Vector3 v1, ref Vector3 v2, ref Vector3 v3, ref Vector3 v4, bool renderWinding)
    {
        int lastIndex = Vertices.Count;

        Vertices.Add(v1);
        Vertices.Add(v2);
        Vertices.Add(v3);
        Vertices.Add(v4);

        if (renderWinding)
        {
            Triangles.Add(lastIndex + 0);
            Triangles.Add(lastIndex + 1);
            Triangles.Add(lastIndex + 2);

            Triangles.Add(lastIndex + 0);
            Triangles.Add(lastIndex + 2);
            Triangles.Add(lastIndex + 3);
        }
        else
        {
            Triangles.Add(lastIndex + 0);
            Triangles.Add(lastIndex + 2);
            Triangles.Add(lastIndex + 1);

            Triangles.Add(lastIndex + 0);
            Triangles.Add(lastIndex + 3);
            Triangles.Add(lastIndex + 2);
        }

        for (int i = 0; i < 4; ++i)
        {
            ColorIndices.Add(vtColorIndex);
        }
    }
Пример #3
0
    public void MergeChildBrick(bool accInvertNext, short color, Matrix4x4 trMatrix, BrickMeshInfo childMesh)
    {
        int vtCnt = Vertices.Count;

        for (int i = 0; i < childMesh.Vertices.Count; ++i)
        {
            Vertices.Add(trMatrix.MultiplyPoint3x4(childMesh.Vertices[i]));
        }

        for (int i = 0; i < childMesh.ColorIndices.Count; ++i)
        {
            ColorIndices.Add(LdConstant.GetEffectiveColorIndex(childMesh.ColorIndices[i], color));
        }

        bool inverted = accInvertNext ^ (trMatrix.determinant < 0);

        for (int i = 0; i < childMesh.Triangles.Count; i += 3)
        {
            if (inverted)
            {
                Triangles.Add(vtCnt + childMesh.Triangles[i]);
                Triangles.Add(vtCnt + childMesh.Triangles[i + 2]);
                Triangles.Add(vtCnt + childMesh.Triangles[i + 1]);
            }
            else
            {
                Triangles.Add(vtCnt + childMesh.Triangles[i]);
                Triangles.Add(vtCnt + childMesh.Triangles[i + 1]);
                Triangles.Add(vtCnt + childMesh.Triangles[i + 2]);
            }
        }
    }