예제 #1
0
 public static void GetGersterWavesDescription(ref LuxWaterUtils.GersterWavesDescription Description, Material WaterMaterial)
 {
     Description.intensity = WaterMaterial.GetVector("_GerstnerVertexIntensity");
     Description.steepness = WaterMaterial.GetVector("_GSteepness");
     Description.amp       = WaterMaterial.GetVector("_GAmplitude");
     Description.freq      = WaterMaterial.GetVector("_GFinalFrequency");
     Description.speed     = WaterMaterial.GetVector("_GFinalSpeed");
     Description.dirAB     = WaterMaterial.GetVector("_GDirectionAB");
     Description.dirCD     = WaterMaterial.GetVector("_GDirectionCD");
 }
예제 #2
0
    public static Vector3 GetGestnerDisplacement(Vector3 WorldPosition, LuxWaterUtils.GersterWavesDescription Description, float TimeOffset)
    {
        Vector2 vector;

        vector.x = WorldPosition.x;
        vector.y = WorldPosition.z;
        Vector4 vector2;

        vector2.x = Description.steepness.x * Description.amp.x * Description.dirAB.x;
        vector2.y = Description.steepness.x * Description.amp.x * Description.dirAB.y;
        vector2.z = Description.steepness.y * Description.amp.y * Description.dirAB.z;
        vector2.w = Description.steepness.y * Description.amp.y * Description.dirAB.w;
        Vector4 vector3;

        vector3.x = Description.steepness.z * Description.amp.z * Description.dirCD.x;
        vector3.y = Description.steepness.z * Description.amp.z * Description.dirCD.y;
        vector3.z = Description.steepness.w * Description.amp.w * Description.dirCD.z;
        vector3.w = Description.steepness.w * Description.amp.w * Description.dirCD.w;
        Vector4 vector4;

        vector4.x = Description.freq.x * (Description.dirAB.x * vector.x + Description.dirAB.y * vector.y);
        vector4.y = Description.freq.y * (Description.dirAB.z * vector.x + Description.dirAB.w * vector.y);
        vector4.z = Description.freq.z * (Description.dirCD.x * vector.x + Description.dirCD.y * vector.y);
        vector4.w = Description.freq.w * (Description.dirCD.z * vector.x + Description.dirCD.w * vector.y);
        float   num = Time.timeSinceLevelLoad + TimeOffset;
        Vector4 vector5;

        vector5.x  = num * Description.speed.x;
        vector5.y  = num * Description.speed.y;
        vector5.z  = num * Description.speed.z;
        vector5.w  = num * Description.speed.w;
        vector4.x += vector5.x;
        vector4.y += vector5.y;
        vector4.z += vector5.z;
        vector4.w += vector5.w;
        Vector4 vector6;

        vector6.x = (float)Math.Cos((double)vector4.x);
        vector6.y = (float)Math.Cos((double)vector4.y);
        vector6.z = (float)Math.Cos((double)vector4.z);
        vector6.w = (float)Math.Cos((double)vector4.w);
        Vector4 vector7;

        vector7.x = (float)Math.Sin((double)vector4.x);
        vector7.y = (float)Math.Sin((double)vector4.y);
        vector7.z = (float)Math.Sin((double)vector4.z);
        vector7.w = (float)Math.Sin((double)vector4.w);
        Vector3 result;

        result.x = (vector6.x * vector2.x + vector6.y * vector2.z + vector6.z * vector3.x + vector6.w * vector3.z) * Description.intensity.x;
        result.z = (vector6.x * vector2.y + vector6.y * vector2.w + vector6.z * vector3.y + vector6.w * vector3.w) * Description.intensity.z;
        result.y = (vector7.x * Description.amp.x + vector7.y * Description.amp.y + vector7.z * Description.amp.z + vector7.w * Description.amp.w) * Description.intensity.y;
        return(result);
    }