예제 #1
0
    void LoadGlobalUniforms(OpenGL gl, uint shaderProgram)
    {
        int KaUniformLocation = gl.GetUniformLocation(shaderProgram, "Ka");
        int KdUniformLocation = gl.GetUniformLocation(shaderProgram, "Kd");
        int KsUniformLocation = gl.GetUniformLocation(shaderProgram, "Ks");
        int IaUniformLocation = gl.GetUniformLocation(shaderProgram, "Ia");
        int IlUniformLocation = gl.GetUniformLocation(shaderProgram, "Il");
        int IpUniformLocation = gl.GetUniformLocation(shaderProgram, "Ip");
        int KUniformLocation  = gl.GetUniformLocation(shaderProgram, "K");

        gl.Uniform3(KaUniformLocation, 1, Ka.ToFloatArray());
        gl.Uniform3(KdUniformLocation, 1, Kd.ToFloatArray());
        gl.Uniform3(KsUniformLocation, 1, Ks.ToFloatArray());
        gl.Uniform3(IaUniformLocation, 1, Ia.ToFloatArray());
        gl.Uniform3(IlUniformLocation, 1, Il.ToFloatArray());
        gl.Uniform1(IpUniformLocation, (float)Ip);
        gl.Uniform1(KUniformLocation, (float)K);

        int CameraPositionUniformLocation = gl.GetUniformLocation(shaderProgram, "CameraPosition");
        int LightPositionUniformLocation  = gl.GetUniformLocation(shaderProgram, "LightPosition");

        gl.Uniform1(CameraPositionUniformLocation, (float)CameraPosition);
        gl.Uniform3(LightPositionUniformLocation, 1, LightPosition.ToFloatArray());

        int objectColorUniformLocation = gl.GetUniformLocation(shaderProgram, "objectColor");

        gl.Uniform3(objectColorUniformLocation, 1, ObjectColor.ToFloatArray());
    }
예제 #2
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (IntegratorEnable != false)
            {
                hash ^= IntegratorEnable.GetHashCode();
            }
            if (IntegratorSaturationLevel != 0D)
            {
                hash ^= IntegratorSaturationLevel.GetHashCode();
            }
            if (Kp != 0D)
            {
                hash ^= Kp.GetHashCode();
            }
            if (Ki != 0D)
            {
                hash ^= Ki.GetHashCode();
            }
            if (Kd != 0D)
            {
                hash ^= Kd.GetHashCode();
            }
            if (Kaw != 0D)
            {
                hash ^= Kaw.GetHashCode();
            }
            if (OutputSaturationLevel != 0D)
            {
                hash ^= OutputSaturationLevel.GetHashCode();
            }
            return(hash);
        }
예제 #3
0
 private void sliderKd_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e)
 {
     Kd = sliderKd.Value;
     if (boxKd != null)
     {
         boxKd.Text = Kd.ToString(FORMAT);
     }
 }
예제 #4
0
파일: Program.cs 프로젝트: addicted-by/MAI
    void LoadGlobalUniforms(OpenGL gl, uint shaderProgram)
    {
        int KaUniformLocation = gl.GetUniformLocation(shaderProgram, "Ka");
        int KdUniformLocation = gl.GetUniformLocation(shaderProgram, "Kd");
        int KsUniformLocation = gl.GetUniformLocation(shaderProgram, "Ks");
        int IaUniformLocation = gl.GetUniformLocation(shaderProgram, "Ia");
        int IlUniformLocation = gl.GetUniformLocation(shaderProgram, "Il");
        int IpUniformLocation = gl.GetUniformLocation(shaderProgram, "Ip");
        int KUniformLocation  = gl.GetUniformLocation(shaderProgram, "K");

        gl.Uniform3(KaUniformLocation, 1, Ka.ToFloatArray());
        gl.Uniform3(KdUniformLocation, 1, Kd.ToFloatArray());
        gl.Uniform3(KsUniformLocation, 1, Ks.ToFloatArray());
        gl.Uniform3(IaUniformLocation, 1, Ia.ToFloatArray());
        gl.Uniform3(IlUniformLocation, 1, Il.ToFloatArray());
        gl.Uniform1(IpUniformLocation, (float)Ip);
        gl.Uniform1(KUniformLocation, (float)K);


        int MagicCoefUniformLocation  = gl.GetUniformLocation(shaderProgram, "magicCoef");
        int DistToFragUniformLocation = gl.GetUniformLocation(shaderProgram, "distToFrag");

        gl.Uniform1(MagicCoefUniformLocation, MagicCoef);

        if (EffectMode == Mode.FRAG)
        {
            gl.Uniform1(DistToFragUniformLocation, 1);
        }
        else
        {
            gl.Uniform1(DistToFragUniformLocation, 0);
        }

        int CameraPositionUniformLocation     = gl.GetUniformLocation(shaderProgram, "CameraPosition");
        int LightPositionUniformLocation      = gl.GetUniformLocation(shaderProgram, "LightPosition");
        int magicPointPositionUniformLocation = gl.GetUniformLocation(shaderProgram, "magicPointPosition");

        gl.Uniform1(CameraPositionUniformLocation, (float)CameraPosition);
        gl.Uniform3(LightPositionUniformLocation, 1, LightPosition.ToFloatArray());
        gl.Uniform3(magicPointPositionUniformLocation, 1, magicPointPosition.ToFloatArray());


        int objectColorUniformLocation = gl.GetUniformLocation(shaderProgram, "objectColor");

        gl.Uniform3(objectColorUniformLocation, 1, ObjectColor.ToFloatArray());
    }
예제 #5
0
 void UpdateConfig()
 {
     try
     {
         if (this.TxtBoxKp.InvokeRequired)
         {
             this.Invoke(new UpdateConfigCallback(UpdateConfig));
         }
         else
         {
             TxtBoxKp.Text        = Kp.ToString();
             TxtBoxKi.Text        = Ki.ToString();
             TxtBoxKd.Text        = Kd.ToString();
             TxtBoxErrorMax.Text  = ErrorMax.ToString();
             TxtBoxPWMPeriod.Text = PWMPeriod.ToString();
             TxtBoxIntMax.Text    = IntMax.ToString();
         }
     }
     catch (Exception ex)
     {
         return;
     }
 }
예제 #6
0
 public void Save(ConfigNode node)
 {
     node.SetValue("Kp", Kp.ToString());
     node.SetValue("Ki", Ki.ToString());
     node.SetValue("Kd", Kd.ToString());
 }
예제 #7
0
        // ~FGPID();

        public override bool Run()
        {
            double I_out_delta = 0.0;
            double Dval        = 0;

            input = inputNodes[0].GetDoubleValue();

            if (ProcessVariableDot != null)
            {
                Dval = ProcessVariableDot.GetValue();
            }
            else
            {
                Dval = (input - Input_prev) / dt;
            }

            // Do not continue to integrate the input to the integrator if a wind-up
            // condition is sensed - that is, if the property pointed to by the trigger
            // element is non-zero. Reset the integrator to 0.0 if the Trigger value
            // is negative.

            double test = 0.0;

            if (Trigger != null)
            {
                test = Trigger.GetValue();
            }

            if (Math.Abs(test) < 0.000001)
            {
                switch (IntType)
                {
                case eIntegrateType.eRectEuler:
                    I_out_delta = input;                             // Normal rectangular integrator
                    break;

                case eIntegrateType.eTrapezoidal:
                    I_out_delta = 0.5 * (input + Input_prev);        // Trapezoidal integrator
                    break;

                case eIntegrateType.eAdamsBashforth2:
                    I_out_delta = 1.5 * input - 0.5 * Input_prev;      // 2nd order Adams Bashforth integrator
                    break;

                case eIntegrateType.eAdamsBashforth3:                                       // 3rd order Adams Bashforth integrator
                    I_out_delta = (23.0 * input - 16.0 * Input_prev + 5.0 * Input_prev2) / 12.0;
                    break;

                case eIntegrateType.eNone:
                    // No integrator is defined or used.
                    I_out_delta = 0.0;
                    break;
                }
            }

            if (test < 0.0)
            {
                I_out_total = 0.0;              // Reset integrator to 0.0
            }
            I_out_total += Ki.GetValue() * dt * I_out_delta;

            if (IsStandard)
            {
                output = Kp.GetValue() * (input + I_out_total + Kd.GetValue() * Dval);
            }
            else
            {
                output = Kp.GetValue() * input + I_out_total + Kd.GetValue() * Dval;
            }

            Input_prev2 = test < 0.0 ? 0.0 : Input_prev;
            Input_prev  = input;

            Clip();
            SetOutput();

            return(true);
        }
예제 #8
0
 private void derivativeSlider_Scroll(object sender, EventArgs e)
 {
     Kd          = (float)derivativeSlider.Value / 20.0f;
     dLabel.Text = Kd.ToString();
 }