public void Update(MaterialBlock materialBlock)
 {
     GL.UseProgram(programNumber);
     GL.Uniform4(diffuseColorUnif, materialBlock.diffuseColor);
     GL.Uniform4(specularColorUnif, materialBlock.specularColor);
     GL.Uniform1(specularShininessUnif, materialBlock.specularShininess);
     GL.UseProgram(0);
 }
        //Called after the window and OpenGL are initialized. Called exactly once, before the main loop.
        protected override void init()
        {
            g_fzNear = 1.0f;
            g_fzFar = 1000.0f;
            InitializeGInitialViewData();
            InitializeGViewScale();
            g_viewPole = new ViewPole(g_initialViewData, g_viewScale, MouseButtons.MB_LEFT_BTN);
            g_objtPole = new ObjectPole(g_initialObjectData, (float)(90.0f / 250.0f),
                    MouseButtons.MB_RIGHT_BTN, g_viewPole);

            InitializePrograms();

            try
            {
                string XmlFilesDirectory = GlsTutorialsClass.ProjectDirectory + @"/XmlFilesForMeshes";
                Stream Infinity =  File.OpenRead(XmlFilesDirectory + @"/infinity.xml");
                g_pObjectMesh = new Mesh(Infinity);
                Stream UnitCube =  File.OpenRead(XmlFilesDirectory + @"/unitcubebasictexture.xml");
                g_pCubeMesh = new Mesh(UnitCube);
            }
            catch(Exception ex)
            {
                MessageBox.Show("Error creating meshes " + ex.ToString());
                throw;
            }

            SetupDepthAndCull();
            MatrixStack.rightMultiply = false;
            reshape();
            GL.Enable(EnableCap.Texture1D);

            //Setup our Uniform Buffers
            MaterialBlock mtl = new MaterialBlock();
            mtl.diffuseColor = new Vector4(1.0f, 0.673f, 0.043f, 1.0f);
            mtl.specularColor = new Vector4(1.0f, 0.673f, 0.043f, 1.0f) * 0.4f;
            mtl.specularShininess = g_specularShininess;

            g_litShaderProg.materialBlock.Update(mtl);
            g_litTextureProg.materialBlock.Update(mtl);

            CreateGaussianTextures();
        }
예제 #3
0
        private void updateProgram()
        {
            ballProgram = Programs.AddProgram(VertexShaders.HDR_PCN2,
                FragmentShaders.DiffuseSpecularHDR);
            ball.SetProgram(ballProgram);
            Programs.SetUpLightBlock(ballProgram, numberOfLights);
            LightBlock	lightBlock = new LightBlock(numberOfLights);
            lightBlock.ambientIntensity = new Vector4(0.1f, 0.1f, 0.1f, 1.0f);
            lightBlock.lightAttenuation = 0.1f;
            lightBlock.maxIntensity = 0.5f;
            lightBlock.lights[0].cameraSpaceLightPos = new Vector4(0.5f, 0.0f, 0.0f, 1f);
            lightBlock.lights[0].lightIntensity = new Vector4(0.0f, 0.0f, 0.6f, 1.0f);
            lightBlock.lights[1].cameraSpaceLightPos = new Vector4(0.0f, 0.5f, 1.0f, 1f);
            lightBlock.lights[1].lightIntensity = new Vector4(0.4f, 0.0f, 0.0f, 1.0f);
            Programs.UpdateLightBlock(ballProgram, lightBlock);

            MaterialBlock materialBlock = new MaterialBlock();
            materialBlock.diffuseColor = new Vector4(1.0f, 0.673f, 0.043f, 1.0f);
            materialBlock.specularColor = new Vector4(1.0f, 0.673f, 0.043f, 1.0f) * 0.4f;
            materialBlock.specularShininess = 0.2f;

            Programs.SetUpMaterialBlock(ballProgram);
            Programs.UpdateMaterialBlock(ballProgram, materialBlock);

            Programs.SetNormalModelToCameraMatrix(ballProgram, Matrix3.Identity);
        }
예제 #4
0
        public override String keyboard(Keys keyCode, int x, int y)
        {
            StringBuilder result = new StringBuilder();
            result.AppendLine(keyCode.ToString());
            if (displayOptions)
            {
                SetDisplayOptions(keyCode);
            }
            else {
                switch (keyCode) {
                case Keys.Enter:
                    displayOptions = true;
                    break;
                case Keys.D1:
                    break;
                case Keys.D2:
                    break;
                case Keys.D3:
                    break;
                case Keys.D4:
                    break;
                case Keys.D5:
                    break;
                case Keys.D6:
                    break;
                case Keys.D7:
                    break;
                case Keys.D8:
                    break;
                case Keys.D9:
                    break;
                case Keys.D0:
                    break;
                case Keys.A:
                    ballProgram = Programs.AddProgram(VertexShaders.HDR_PCN2,
                        FragmentShaders.DiffuseSpecularHDR);
                    ball.SetProgram(ballProgram);
                    Programs.SetUpLightBlock(ballProgram, numberOfLights);
                    LightBlock	lightBlock = new LightBlock(numberOfLights);
                    lightBlock.ambientIntensity = new Vector4(0.1f, 0.1f, 0.1f, 1.0f);
                    lightBlock.lightAttenuation = 0.1f;
                    lightBlock.maxIntensity = 0.5f;
                    lightBlock.lights[0].cameraSpaceLightPos = new Vector4(0.5f, 0.0f, 0.0f, 1f);
                    lightBlock.lights[0].lightIntensity = new Vector4(0.0f, 0.0f, 0.6f, 1.0f);
                    lightBlock.lights[1].cameraSpaceLightPos = new Vector4(0.0f, 0.5f, 1.0f, 1f);
                    lightBlock.lights[1].lightIntensity = new Vector4(0.4f, 0.0f, 0.0f, 1.0f);
                    Programs.UpdateLightBlock(ballProgram, lightBlock);

                    MaterialBlock materialBlock = new MaterialBlock();
                    materialBlock.diffuseColor = new Vector4(1.0f, 0.673f, 0.043f, 1.0f);
                    materialBlock.specularColor = new Vector4(1.0f, 0.673f, 0.043f, 1.0f) * 0.4f;
                    materialBlock.specularShininess = 0.2f;

                    Programs.SetUpMaterialBlock(ballProgram);
                    Programs.UpdateMaterialBlock(ballProgram, materialBlock);

                    Programs.SetNormalModelToCameraMatrix(ballProgram, Matrix3.Identity);
                    break;
                case Keys.B:
                    break;
                case Keys.C:
                    break;
                case Keys.D:
                    break;
                case Keys.F:
                    break;
                case Keys.I:
                    result.AppendLine("g_fzNear = " + g_fzNear.ToString());
                    result.AppendLine("g_fzFar = " + g_fzFar.ToString());
                    result.AppendLine("perspectiveAngle = " + perspectiveAngle.ToString());
                    result.AppendLine("textureRotation = " + textureRotation.ToString());
                    result.AppendLine("BallPosition = " + ball.GetOffset().ToString());
                    result.AppendLine("BallLimits = " + ball.GetLimits());
                    break;
                case Keys.P:
                    newPerspectiveAngle = perspectiveAngle + 5f;
                    if (newPerspectiveAngle > 170f) {
                        newPerspectiveAngle = 30f;
                    }
                    result.AppendLine("newPerspectiveAngle = " + newPerspectiveAngle.ToString());
                    break;
                case Keys.R:
                    if (rotateWorld)
                    {
                        rotateWorld = false;
                        result.AppendLine("rotateWorld disabled");
                    }
                    else
                    {
                        rotateWorld = true;
                        result.AppendLine("rotateWorld enabled");
                    }
                    break;
                }
            }
            return result.ToString();
        }
예제 #5
0
 public static void UpdateMaterialBlock(int program, MaterialBlock mb)
 {
     ActivePrograms[program].UpdateMaterialBlock(mb);
 }