• unity3d教程运行物理机制


    首先,我们将把Hooke定律写Euler方法结合在一起找到新坐标、加速和速度。
    Hooke定律是F=kx,这里的F是指由水流产生的力(记住,我们将把水体表面模拟为水流),k是指水流的常量。x则是位移。我们的位移将成为每一个节点的y坐标减去节点的基本高度。
    下一步,我们将加入一个与力的速度成比例的阻尼因素来削弱力unity3d 编写代码例如以下:
    for (int i = 0; i < xpositions.Length ; i++)
    {
    float force = springconstant * (ypositions[i] – baseheight) + velocities[i]*damping ;
    accelerations[i] = -force;
    ypositions[i] += velocities[i];
    velocities[i] += accelerations[i];
    Body.SetPosition(i, new Vector3(xpositions[i], ypositions[i], z));
    }
    Euler方法非常easy,我们仅仅要向速度加入加速,向每帧坐标添加速度。
    注:我仅仅是如果每一个节点的质量为1,但你可能会想用:
    1
    accelerations[i] = -force/mass;
    如今我们将创造波传播。下面节点是依据Michael Hoffman的教程调整而来的:
    1
    2
    float[] leftDeltas = new float[xpositions.Length];
    float[] rightDeltas = new float[xpositions.Length];
    在此。我们要创造两个阵列。针对每一个节点,我们将检查之前节点的高度,以及当前节点的高度,并将二者区别放入leftDeltas。
    之后。我们将检查兴许节点的高度与当前检查节点的高度,并将二者的区别放入rightDeltas(我们将乘以一个传播常量来添加全部值)。

    for (int j = 0; j < 8; j++)
    {
    for (int i = 0; i < xpositions.Length; i++)
    {
    if (i > 0)
    {
    leftDeltas[i] = spread * (ypositions[i] – ypositions[i-1]);
    velocities[i - 1] += leftDeltas[i];
    }
    if (i < xpositions.Length – 1)
    {
    rightDeltas[i] = spread * (ypositions[i] – ypositions[i + 1]);
    velocities[i + 1] += rightDeltas[i];
    }
    }
    }
  • 相关阅读:
    Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现
    Apache ActiveMQ序列化漏洞(CVE-2015-5254)复现
    Jenkins Java 反序列化远程执行代码漏洞(CVE-2017-1000353)
    jenkins未授权访问漏洞
    jenkins弱口令漏洞
    jboss 未授权访问漏洞复现
    jboss反序列化漏洞复现(CVE-2017-7504)
    C++中的强制类型转换
    new/delete与命名空间
    函数默认参数与占位参数
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6978438.html
Copyright © 2020-2023  润新知