예제 #1
0
        public override void BeginApplyStroke(Ray ray)
        {
            RaycastHit hit;
            Mesh       msh = target.GetComponent <MeshFilter>().sharedMesh;

            didHit = (RXLookingGlass.IntersectRayMesh(ray, msh, target.transform.localToWorldMatrix, out hit));
            if (didHit)
            {
                var triangles = msh.triangles;
                int triangle  = hit.triangleIndex;
                int i0        = triangles[triangle];
                int i1        = triangles[triangle + 1];
                int i2        = triangles[triangle + 2];
                var bary      = hit.barycentricCoordinate;

                Matrix4x4 mtx = target.transform.worldToLocalMatrix;

                normal = target.GetSafeNormal(i0) * bary.x +
                         target.GetSafeNormal(i1) * bary.y +
                         target.GetSafeNormal(i2) * bary.z;

                tangent = target.GetSafeTangent(i0) * bary.x +
                          target.GetSafeTangent(i1) * bary.y +
                          target.GetSafeTangent(i2) * bary.z;

                normal = mtx.MultiplyVector(mtx.MultiplyVector(normal));
                Vector3 tng = new Vector3(tangent.x, tangent.y, tangent.z);
                tng       = mtx.MultiplyVector(mtx.MultiplyVector(tng));
                tangent.x = tng.x;
                tangent.y = tng.y;
                tangent.z = tng.z;
            }
        }