Example #1
0
        public static bool IsInsideFrustum(GeometryDataModels.Edge edge, NativeArray <Plane> planes)
        {
            for (var index = 0; index < planes.Length; index++)
            {
                if (planes[index].GetDistanceToPoint(edge.firstVertex) < 0 ||
                    planes[index].GetDistanceToPoint(edge.secondVertex) < 0)
                {
                    return(false);
                }
            }

            return(true);
        }
Example #2
0
        static bool Equals(GeometryDataModels.Edge x, GeometryDataModels.Edge y)
        {
            var distance1 = Vector3.Distance(x.firstVertex, y.firstVertex);
            var distance2 = Vector3.Distance(x.secondVertex, y.secondVertex);

            if (distance1 < 0.1f && distance2 < 0.1f)
            {
                return(true);
            }

            var distance3 = Vector3.Distance(x.firstVertex, y.secondVertex);
            var distance4 = Vector3.Distance(x.secondVertex, y.firstVertex);

            if (distance3 < 0.1f && distance4 < 0.1f)
            {
                return(true);
            }

            return(false);
        }
        public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
        {
            var  renderer = GetComponent <Renderer>();
            Mesh mesh;

            if (UseColliderMeshInsteadOfRendererMesh)
            {
                mesh = GetComponent <MeshCollider>().sharedMesh;
            }
            else
            {
                mesh = GetComponent <MeshFilter>().mesh;
            }

            GeometryDataModels.Edge[] edges = new GeometryDataModels.Edge[1];
            dstManager.AddBuffer <GeometryDataModelsEntities.EdgesBuffer>(entity);
            dstManager.AddBuffer <GeometryDataModelsEntities.VerticesBuffer>(entity);
            dstManager.AddBuffer <GeometryDataModelsEntities.TrianglesBuffer>(entity);
            DynamicBuffer <GeometryDataModelsEntities.EdgesBuffer>     eBuffer = dstManager.GetBuffer <GeometryDataModelsEntities.EdgesBuffer>(entity);
            DynamicBuffer <GeometryDataModelsEntities.VerticesBuffer>  vBuffer = dstManager.GetBuffer <GeometryDataModelsEntities.VerticesBuffer>(entity);
            DynamicBuffer <GeometryDataModelsEntities.TrianglesBuffer> tBuffer = dstManager.GetBuffer <GeometryDataModelsEntities.TrianglesBuffer>(entity);
            //Reinterpret to plain int buffer
            DynamicBuffer <GeometryDataModels.Edge> edgesBuffer = eBuffer.Reinterpret <GeometryDataModels.Edge>();
            DynamicBuffer <Vector3> vector3Buffer  = vBuffer.Reinterpret <Vector3>();
            DynamicBuffer <int>     triangleBuffer = tBuffer.Reinterpret <int>();

            //populate the dynamic buffer
            for (int j = 0; j < mesh.vertexCount; j++)
            {
                vector3Buffer.Add(mesh.vertices[j]);
            }

            for (int j = 0; j < mesh.triangles.Length; j++)
            {
                triangleBuffer.Add(mesh.triangles[j]);
            }

            dstManager.AddComponentData(entity, new GeometryDataModelsEntities.LocalToWorldMatrix
            {
                Matrix = renderer.localToWorldMatrix,
            });

            dstManager.AddComponentData(entity, new GeometryDataModelsEntities.Visible
            {
                IsVisible = true,
            });

            var geoInfoData = new GeometryDataModelsEntities.GeoInfoEntityComponent
            {
                Edges     = edgesBuffer,
                Vertices  = vector3Buffer,
                Triangles = triangleBuffer,
                Matrix    = renderer.localToWorldMatrix,
            };

            dstManager.AddComponentData(entity, geoInfoData);

            var targetData = new GeometryDataModels.Target
            {
                position = transform.position,
                projectedTargetPosition = Vector3.zero,
                distanceToRay           = 0,
                distanceToCastOrigin    = 0,
                entity = entity
            };

            dstManager.AddComponentData(entity, targetData);
        }