// 保存mesh
    public void SaveMesh(string outputFilePath, string MeshName)
    {
        Mesh mesh = new Mesh();

        int totalvectors = m_AniMesh.m_Mesh.m_vertices.Length;
        int npower       = IGGUtil.GettoPower(totalvectors);

        Vector2[] uv       = m_AniMesh.m_Mesh.m_UV;
        Vector3[] posArray = new Vector3[totalvectors];
        for (int i = 0; i < posArray.Length; i++)
        {
            posArray[i].x = uv[i].x;
            posArray[i].y = uv[i].y;
            posArray[i].z = i * 1.0f / npower;
        }
        mesh.vertices = posArray;

        mesh.triangles = m_AniMesh.m_Mesh.m_Triangles;

        mesh.RecalculateNormals();

        string dataPath = outputFilePath + MeshName + "_M.asset";

        AssetDatabase.CreateAsset(mesh, dataPath);
    }
Esempio n. 2
0
    // 保存顶点动画纹理
    public void SaveMeshTexture(string outputFilePath, string AniMeshName)
    {
        int totalFrame = m_AniMesh.GetTotalFrame();


        int       bones       = m_AniMesh.GetBones();
        int       npower      = IGGUtil.GettoPower(bones * 3);
        Texture2D combinedTex = new Texture2D(npower, totalFrame, TextureFormat.RGBAFloat, false);

        combinedTex.filterMode = FilterMode.Point;
        combinedTex.wrapMode   = TextureWrapMode.Clamp;
        combinedTex.anisoLevel = 0;
        //
        int vertexCount = 0;

        for (int frame = 0; frame < totalFrame; frame++)
        {
            for (int k = 0; k < bones; k++)
            {
                Matrix4x4 mat   = m_AniMesh.m_Mesh.m_AniBone[frame][k];
                int       index = 3 * k;
                combinedTex.SetPixel(index, frame, new Color(mat.m00, mat.m01, mat.m02, mat.m03));
                combinedTex.SetPixel(index + 1, frame, new Color(mat.m10, mat.m11, mat.m12, mat.m13));
                combinedTex.SetPixel(index + 2, frame, new Color(mat.m20, mat.m21, mat.m22, mat.m23));
            }
        }
        combinedTex.Apply(false);
        string dataPath = outputFilePath + AniMeshName + "_AT.asset";

        AssetDatabase.CreateAsset(combinedTex, dataPath);
    }
    // 保存顶点动画纹理
    public void SaveMeshTexture(string outputFilePath, string AniMeshName)
    {
        int totalFrame = m_AniMesh.GetTotalFrame();


        int       totalvectors = m_AniMesh.GetTotalVertices();
        int       npower       = IGGUtil.GettoPower(totalvectors);
        Texture2D combinedTex  = new Texture2D(npower, totalFrame, TextureFormat.RGBA32, false);

        combinedTex.filterMode = FilterMode.Point;
        combinedTex.wrapMode   = TextureWrapMode.Clamp;
        combinedTex.anisoLevel = 0;
        //
        int vertexCount      = 0;
        int SubMeshVertexNum = totalvectors;

        for (int frame = 0; frame < totalFrame; frame++)
        {
            for (int k = 0; k < SubMeshVertexNum; k++)
            {
                Vector3 vertex = m_AniMesh.m_Mesh.m_AniMesh[frame][k];
                Color   c      = IGGUtil.EncodeRGBM(vertex);
                combinedTex.SetPixel(k, frame, c);
            }
        }
        combinedTex.Apply(false);
        string dataPath = outputFilePath + AniMeshName + "_AT.asset";

        AssetDatabase.CreateAsset(combinedTex, dataPath);
    }
Esempio n. 4
0
    // 保存mesh
    public void SaveMesh(string outputFilePath, string MeshName)
    {
        Mesh mesh = new Mesh();

        int totalvectors = m_AniMesh.m_Mesh.m_vertices.Length;
        int npower       = IGGUtil.GettoPower(totalvectors);

        Vector2[] uv = m_AniMesh.m_Mesh.m_UV;
        // 切线,用于存储骨骼权重信息。每个顶点绑定2根骨骼。

        Vector4[] tangetsArray = new Vector4[totalvectors];
        Vector2[] bone3        = new Vector2[totalvectors];
        Vector2[] bone4        = new Vector2[totalvectors];
        for (int i = 0; i < totalvectors; i++)
        {
            tangetsArray[i].x = m_AniMesh.m_Mesh.m_BoneWeight[i].boneIndex0;
            tangetsArray[i].y = m_AniMesh.m_Mesh.m_BoneWeight[i].weight0;
            tangetsArray[i].z = m_AniMesh.m_Mesh.m_BoneWeight[i].boneIndex1;
            tangetsArray[i].w = m_AniMesh.m_Mesh.m_BoneWeight[i].weight1;

            bone3[i].x = m_AniMesh.m_Mesh.m_BoneWeight[i].boneIndex2;
            bone3[i].y = m_AniMesh.m_Mesh.m_BoneWeight[i].weight2;

            bone4[i].x = m_AniMesh.m_Mesh.m_BoneWeight[i].boneIndex3;
            bone4[i].y = m_AniMesh.m_Mesh.m_BoneWeight[i].weight3;
        }
        mesh.vertices = m_AniMesh.m_Mesh.m_vertices;

        mesh.triangles = m_AniMesh.m_Mesh.m_Triangles;

        mesh.uv = m_AniMesh.m_Mesh.m_UV;

        mesh.uv2 = bone3;

        mesh.uv3 = bone4;

        mesh.tangents = tangetsArray;

        mesh.RecalculateNormals();

        string dataPath = outputFilePath + MeshName + "_M.asset";

        AssetDatabase.CreateAsset(mesh, dataPath);
    }