コード例 #1
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            Title = GetFps(e.Time);
            t    += (float)e.Time;

            GL.ClearColor(0.1f, 0.1f, 0.1f, 1);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);



            #region Cube
            lightingShader.Use();

            //values
            Vector3 lampPos    = new Vector3((float)Math.Sin(0.5f * t), (float)Math.Cos(t), (float)Math.Sin(t));
            Vector3 lightColor = new Vector3(1, 0.3f, 0.5f);



            //material
            containerMat.SetUniforms("material", lightingShader);

            //directional light
            Vector3          sunColor = Light.ColorToVector(Color4.White);
            DirectionalLight sunLight = new DirectionalLight(new Vector3(-0.2f, -1.0f, -0.3f),
                                                             new Vector3(sunColor * 0.05f),
                                                             new Vector3(sunColor * 0.4f),
                                                             new Vector3(sunColor * 0.5f));
            sunLight.SetUniforms("dirLight", lightingShader);


            int numLights = 4;
            //point lights
            for (int i = 0; i < numLights; i++)
            {
                PointLight lamp = new PointLight(lightPos[i],
                                                 new Vector3(0.05f),
                                                 new Vector3(0.8f),
                                                 new Vector3(1.0f),
                                                 PointLight.D20);
                //lamp.SetUniformsInArray(lightingShader, "pointLights", i);
            }

            PointLight camLight = new PointLight(cam.Position, new Vector3(0.05f), new Vector3(1), new Vector3(1.0f), PointLight.D20);
            //camLight.SetUniformsInArray(lightingShader, "pointLights", 4);

            //miscsss
            GL.Uniform3(lightingShader.GetUniformLoc("viewPos"), cam.Position);

            boxVao.Bind();
            Transformation cubeTransform;
            Matrix4        model;
            for (int i = 0; i < 10; i++)
            {
                float angle = 20.0f * i;
                model         = Matrix4.CreateTranslation(cubePos[i]);
                model        *= Matrix4.CreateRotationZ(angle);
                cubeTransform = new Transformation(model, cam);
                cubeTransform.SetUniforms(lightingShader);
                GL.DrawArrays(PrimitiveType.Triangles, 0, 36);
            }
            model  = Matrix4.CreateScale(0.2f);
            model *= Matrix4.CreateTranslation(lampPos);

            cubeTransform = new Transformation(model, cam);
            cubeTransform.SetUniforms(lightingShader);
            GL.DrawArrays(PrimitiveType.Triangles, 0, 36);

            boxVao.Unbind();
            #endregion


            #region Lamp
            lampShader.Use();
            Transformation lampTransform;
            for (int i = 0; i < numLights; i++)
            {
                model         = Matrix4.CreateScale(0.1f);
                model        *= Matrix4.CreateTranslation(lightPos[i]);
                lampTransform = new Transformation(model, cam);
                lampTransform.SetUniforms(lampShader);
                lampVao.Bind();
                GL.DrawArrays(PrimitiveType.Triangles, 0, 36);
                lampVao.Unbind();
            }
            #endregion

            this.SwapBuffers();
        }