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(); }