Пример #1
0
    void InitVertexParam(int face_id, int vertex_id)
    {
        //if (init_ok[vertex_id]) return;
        if (vertexParms.ContainsKey(vertex_id))
        {
            return;
        }

        var tangent = mesh.tangents[vertex_id];
        var normal  = mesh.normals[vertex_id];

        var tan3 = new Vector3(tangent.x, tangent.y, tangent.z);
        var u1   = Vector3.Cross(tan3, normal).normalized *tangent.w;
        var u2   = Vector3.Cross(u1, normal).normalized;

        float angle1 = Vector3.Angle(u1, normal) - 90;
        float angle2 = Vector3.Angle(u2, normal) - 90;
        float angle3 = Vector3.Angle(u1, u2) - 90;

        Debug.Assert(angle1 <= float.Epsilon, angle1.ToString());
        Debug.Assert(angle2 <= float.Epsilon, angle2.ToString());
        Debug.Assert(angle3 <= float.Epsilon, angle3.ToString());

        var parm = new VertexParm(vertex_id, face_id, u1, u2);

        vertexParms.Add(vertex_id, parm);
    }
Пример #2
0
    void OnDrawGizmos()
    {
        if (visible_gizmo && initControlMesh && controlMesh != null)
        {
            var mesh     = GetComponent <MeshFilter>().sharedMesh;
            var vertices = mesh.vertices;

            Debug.Assert(mesh.vertexCount == controlMesh.vertexParms.Count);

            //for (int i = 0; i < vertices.Length; i++)
            foreach (var vertex_param in controlMesh.vertexParms)
            {
                int        vid   = vertex_param.Key;
                VertexParm param = vertex_param.Value;

                var   vertics_world = transform.localToWorldMatrix.MultiplyPoint3x4(vertices[vid]);
                float line_length   = transform.lossyScale.x * 0.02f;

                Gizmos.color = Color.red;
                Gizmos.DrawLine(vertics_world, vertics_world + param.U1 * line_length);

                Gizmos.color = Color.green;
                Gizmos.DrawLine(vertics_world, vertics_world + param.U2 * line_length);

                //Gizmos.color = Color.white;
                //Gizmos.DrawLine(vertics_world, vertics_world + tan_sum * line_length);
            }
        }
    }
Пример #3
0
    public void UpdateMeshTest(float w1, float w2)
    {
        var vertices = mesh.vertices;

        Debug.Assert(mesh.vertexCount == vertexParms.Count);
        Vector3[] newVertices = new Vector3[mesh.vertexCount];

        foreach (var vertex_param in vertexParms)
        {
            int        vid   = vertex_param.Key;
            VertexParm param = vertex_param.Value;

            var vec_sum = param.U1 * w1 + param.U2 * w2;

            newVertices[vid] = vertices[vid] + vec_sum;
        }
        mesh.vertices = newVertices;
    }