コード例 #1
0
            public void Execute()
            {
                NativeList <MeshSource> sources = MeshSourceMap.GetSources(TileBounds.Coord);

                for (int i = 0; i < sources.Length; i++)
                {
                    MeshSource source = sources[i];

                    if (!IncludeMask.HasLayer(source.Info.Layer))
                    {
                        continue;
                    }

                    NativeArray <int>    indices;
                    NativeArray <float3> vertices;

                    if (source.Info.Shared)
                    {
                        if (!SharedMeshSources.TryGetValue(source.Info.SharedMeshId, out BlobAssetReference <MeshSourceData> data))
                        {
                            continue;
                        }

                        MeshSourceData.GetData(data, out indices, out vertices);
                        MeshSourceData.TransformInPlace(source.Info.TRS, vertices);
                        InputBuilder.Append(vertices, indices, source.Info.Area);
                    }
                    else
                    {
                        MeshSourceData.GetData(source.Value, out indices, out vertices);
                        InputBuilder.Append(vertices, indices, source.Info.Area);
                    }

                    vertices.Dispose();
                    indices.Dispose();
                }
            }
コード例 #2
0
        public unsafe void Collect()
        {
            ConvexHull hull = Collider->ConvexHull;

            int totalNumVertices = 0;

            for (int f = 0; f < hull.NumFaces; f++)
            {
                totalNumVertices += hull.Faces[f].NumVertices + 1;
            }

            NativeArray <float3> vertices  = new NativeArray <float3>(totalNumVertices, Allocator.Temp);
            NativeArray <int>    triangles = new NativeArray <int>((totalNumVertices - hull.NumFaces) * 3, Allocator.Temp);

            int startVertexIndex = 0;
            int curTri           = 0;

            for (int f = 0; f < hull.NumFaces; f++)
            {
                float3 avgFace = float3.zero;

                for (int fv = 0; fv < hull.Faces[f].NumVertices; fv++)
                {
                    int origV = hull.FaceVertexIndices[hull.Faces[f].FirstIndex + fv];
                    vertices[startVertexIndex + fv] = hull.Vertices[origV];

                    float3 v = hull.Vertices[origV];
                    avgFace += v;

                    triangles[curTri * 3 + 0] = startVertexIndex + fv;
                    triangles[curTri * 3 + 1] = startVertexIndex + (fv + 1) % hull.Faces[f].NumVertices;
                    triangles[curTri * 3 + 2] = startVertexIndex + hull.Faces[f].NumVertices;
                    curTri++;
                }
                avgFace *= 1.0f / hull.Faces[f].NumVertices;
                vertices[startVertexIndex + hull.Faces[f].NumVertices] = avgFace;

                startVertexIndex += hull.Faces[f].NumVertices + 1;
            }

            InputBuilder.Append(vertices, triangles);

            vertices.Dispose();
            triangles.Dispose();
        }