5327人加入学习
(15人评价)
3D数学基础:Unity游戏开发

制作于2018.2.4,基于Unity2017.2。

价格 ¥ 144.00
该课程属于 Unity - A计划(永久有效期) 请加入后再学习

    // Stretch a mesh at an arbitrary angle around the X axis.

 

    // Angle and amount of stretching.

    public float rotAngle;

    public float stretch;


 

    MeshFilter mf;

    Vector3[] origVerts;

    Vector3[] newVerts;


 

    void Start()

    {

        // Get the Mesh Filter component, save its original vertices

        // and make a new vertex array for processing.

        mf = GetComponent< MeshFilter > ();

        origVerts = mf.mesh.vertices;

        newVerts = new Vector3[origVerts.Length];

    }


 

    void Update()

    {

        // Create a rotation matrix from a Quaternion.

        Quaternion rot = Quaternion.Euler(rotAngle, 0, 0);

        Matrix4x4 m = Matrix4x4.TRS(Vector3.zero, rot, Vector3.one);

 

        // Get the inverse of the matrix (ie, to undo the rotation).

        Matrix4x4 inv = m.inverse;

 

        // For each vertex...

        for (var i = 0; i < origVerts.Length; i++)

        {

            // Rotate the vertex and scale it along its new Y axis.

            var pt = m.MultiplyPoint3x4(origVerts[i]);

            pt.y *= stretch;

 

            // Return the vertex to its original rotation (but with the

            // scaling still applied).

            newVerts[i] = inv.MultiplyPoint3x4(pt);

        }

 

        // Copy the transformed vertices back to the mesh.

        mf.mesh.vertices = newVerts;

    }

 

沿着x轴反向旋转,然后y方向拉伸,然后再旋转回来

[展开全文]

授课教师

SIKI学院老师

课程特色

下载资料(1)
视频(49)