Exemple #1
0
 /// <summary>
 /// Generate Native Appdata from mesh
 /// </summary>
 /// <param name="appdatas"></param>
 /// <param name="triangles"></param>
 /// <returns></returns> vertex Count
 public static int GetAppDataFromMesh(Mesh mesh, out NativeArray <MeshAppdata> meshData, out int[] triangles)
 {
     Vector3[] vertices = mesh.vertices;
     Vector2[] uv       = mesh.uv;
     Vector4[] tan      = mesh.tangents;
     Vector3[] normal   = mesh.normals;
     if (uv.Length != vertices.Length)
     {
         uv = new Vector2[vertices.Length];
     }
     if (tan.Length != vertices.Length)
     {
         tan = new Vector4[vertices.Length];
     }
     if (normal.Length != vertices.Length)
     {
         normal = new Vector3[vertices.Length];
     }
     if (uv.Length != vertices.Length)
     {
         uv = new Vector2[vertices.Length];
     }
     meshData = new NativeArray <MeshAppdata>(vertices.Length, Allocator.Temp, NativeArrayOptions.UninitializedMemory);
     for (int i = 0; i < meshData.Length; ++i)
     {
         meshData[i] = new MeshAppdata
         {
             vertex  = vertices[i],
             normal  = normal[i],
             tangent = tan[i],
             uv      = uv[i]
         };
     }
     triangles = mesh.triangles;
     return(vertices.Length);
 }
Exemple #2
0
            public void Execute(int index)
            {
                index *= 3;
                MeshAppdata v0 = appdatas[triangles[index]];
                MeshAppdata v1 = appdatas[triangles[index + 1]];
                MeshAppdata v2 = appdatas[triangles[index + 2]];
                float       t  = float.MaxValue;
                float2      uv = 0;

                if (IntersectTriangle(origin, dir, mul(*transformMatrix, float4(v0.vertex, 1)).xyz, mul(*transformMatrix, float4(v1.vertex, 1)).xyz, mul(*transformMatrix, float4(v2.vertex, 1)).xyz, &t, &uv) && t > 0)
                {
                    results.ConcurrentAdd(new RayIntersectResult
                    {
                        t        = t,
                        triangle = new TriangleData
                        {
                            v0 = v0,
                            v1 = v1,
                            v2 = v2
                        },
                        uv = uv
                    });
                }
            }