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); }
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); }