Unity实现一个morpher/blendShape

摘要:
1: argWeight);isChange=true;}voidUpdate(){UpdateMesh();}voidUpdateMesh(){#ifUNITY_EDITOR#elseif(!isChange)return;#endifMeshmesh=GetComponent<MeshFilter>().mesh;Vector3[]顶点=newVector3[meshs[0].vides.Length];System.Array.Copy(meshs[0].v顶点,顶点,顶点.Length);for(intw=1;w˂weights.Length;w++){if(weights[w]˂=0)continue;Vector3[]verticesT=meshs[w].vides.顶点;inti=0;while(i<顶点.Length){顶点[i]=顶点[i]+(垂直T[i]-网格[0]。顶点[i])*权重[w];i++;}}mesh.顶点=顶点;isChange=false;}}视图代码
Unity实现一个morpher/blendShape第1张Unity实现一个morpher/blendShape第2张
using UnityEngine;
using System.Collections;

[RequireComponent (typeof (MeshFilter))]
public class BlendShape : MonoBehaviour
{
    public Mesh[] meshs;
    #if UNITY_EDITOR
        public float[] weights;
    #else
        float[] weights;
    #endif


    bool isChange = false;
    void Start () 
    {
        weights = new float[meshs.Length];
        System.Array.Clear (weights,0,weights.Length);
        GetComponent<MeshFilter> ().mesh = meshs [0];
    }


    public void SetWeight(int argIndex,float argWeight)
    {
        weights [argIndex] = (argWeight > 1 ? 1: argWeight );
        isChange = true;
    }

    void Update() 
    {
        UpdateMesh ();
    }

    void UpdateMesh()
    {
        #if UNITY_EDITOR
        #else
        if (!isChange) return;
        #endif

        Mesh mesh = GetComponent<MeshFilter>().mesh;

        Vector3[] vertices = new Vector3[meshs[0].vertices.Length];
        System.Array.Copy (meshs [0].vertices, vertices, vertices.Length);

        for (int w=1;w<weights.Length;w++)
        {
            if (weights[w] <= 0) continue;

            Vector3[] verticesT = meshs[w].vertices;
            
            int i = 0;
            while (i < vertices.Length) 
            {
                vertices[i] = vertices[i] + (verticesT[i] -  meshs[0].vertices[i]) * weights[w];
                i++;
            }
        }
        mesh.vertices = vertices;
        isChange = false;
    }
}
View Code

免责声明:文章转载自《Unity实现一个morpher/blendShape》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端规范2-CSS规范使用Gulp构建Web服务器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

FastDFS安装

FastDFS安装包FastDFS安装包百度网盘密码aj4f下载后把安装包移动到服务器里面这里我把安装包放在opt/FastDFSFastDFS安装安装环境在本地安装就需要安装gcc环境yum-yinstallcmakemakegcc-c++在阿里服务器因为帮你配置好了的解压libfastcommon到指定目录解压-C指定解压的目录#解压[root@rzkF...

如何给LINUX红帽子版本配置IP(转)

如果需要绑定另一个IP地址,只需在文件名中添加一个,并在文件中的DEVICE中添加eth0:x。LINUX可以支持多达255个IP别名,多个网卡绑定到一个IP地址,并且可以使用多个网卡创建具有相同IP地址的虚拟网卡。事实上,这种技术已经存在于Sun和Cisco中,它们分别被称为中继和以太网信道技术。在Linux中,这种技术被称为绑定。...

SkyWalking 服务端配置

在安装基于Docker的ElasticSearch时,在为什么需要链接跟踪一章中,我们介绍了几种SkyWalking存储解决方案。官方推荐的解决方案是ElasticSearch,因此我们需要首先安装Elastic搜索。...

vue 数组push元素 视图没更新

Vue包含一组用于观察数组的变异方法,因此它们也会触发视图更新。这些方法如下:push()pop()shift()unshift()split()sort()reverse()问题描述:在tap列下,向每个选项卡添加一行数据,可以一直添加默认行。切换到选项卡1时,阵列已成功添加,但视图未更改。来回切换后手动更新分析:由于JavaScript限制,Vue无法检...

Latex添加参考文献

如何用.bib文件自动生成论文Reference一般期刊或会议给的Latex模板会自带参考文献样式,因此,可以利用.bib文件来自动生成该模板下的参考文献样式。下面以引用以下三篇论文为例,来说明如何生成.bib文件,然后利用.bib文件自动生成Reference。引用论文:1.生成.bib文件(1)新建一个.txt文件;(2)打开Google学术,搜索你想要...

Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解

前话Qt自带的二维图标QCharts相关研发笔记。Qt图标概述Qt图表模块提供了一组易于使用的图表组件。更简单的解决方案是使用方便类QChartView而不是QChart在布局中显示图表。QChart载体类概述QChart类管理图表系列、图例和轴的图形表示。此外,使用QPolarChart类,可以将线、样条曲线、面积和散布序列表示为极坐标图。enumQCha...