Пример #1
0
        public void Render(Scene scene, Camera camera)
        {
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            var ambient = scene.AmbientLight.Color;

            GL.ClearColor(ambient.R, ambient.G, ambient.B, 1.0f);

            _shader.Use();
            for (int i = 0; i < 3; i++)
            {
                _shader.SetInt($"materials[{i}].texture", i);
            }

            _shader.SetVector3("ambientLight", ambient.ToVector3());
            _shader.SetVector3("cameraPosition", camera.Position);

            AddLights(scene);
            foreach (var model in scene.Models)
            {
                if (!model.Loaded)
                {
                    continue;
                }
                _shader.SetMatrix4("model", model.GetModelMatrix());
                _shader.SetMatrix4("mvp",
                                   model.GetModelMatrix() * camera.GetViewMatrix() * camera.GetProjectionMatrix());
                model.Material.Use(_shader);
                model.GetMesh().Render();
            }
        }