Beispiel #1
0
 void Start()
 {
     _positions     = new PositionService(compute, capacity);
     _velocities    = new VelocityService(compute, capacity);
     _lifes         = new LifeService(compute, capacity);
     _velSimulation = new VelocitySimulation(compute, _velocities);
     _posSimulation = new PositionSimulation(compute, _velocities, _positions);
 }
Beispiel #2
0
    public RotationService(ComputeShader c, VelocityService v, LifeService l, float radius, Vector2 angularSpeedRange)
    {
        Count       = v.V0.count;
        _compute    = c;
        _velocities = v;
        _lifes      = l;
        _kernelVelocityBasedRotate = c.FindKernel(KERNEL_VELOCITY_BASED_ROTATE);
        _data      = new Vector4[Count];
        _rotations = new ComputeBuffer(Count, Marshal.SizeOf(typeof(Vector4)));

        for (var i = 0; i < Count; i++)
        {
            _data[i] = QuaternionExtension.IDENTITY;
        }
        Upload();
        ShaderUtil.CalcWorkSize(Count, out SimSizeX, out SimSizeY, out SimSizeZ);

        _angularSpeedData = new float[ShaderConst.WARP_SIZE];
        _angularSpeed     = new ComputeBuffer(_angularSpeedData.Length, Marshal.SizeOf(typeof(float)));
        UpdateAngularSpeed(angularSpeedRange);
    }