From 062ad1b9761ad7ff562d31454cf4a6d1855cddb3 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Fri, 7 Aug 2020 01:13:20 -0700 Subject: [PATCH] initial directional light test --- Kav | 2 +- .../Components/DirectionalLightComponent.cs | 17 ++++++ KavTest/KavTestGame.cs | 14 ++++- KavTest/Renderers/SceneRenderer.cs | 55 +++++++++++++++---- 4 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 KavTest/Components/DirectionalLightComponent.cs diff --git a/Kav b/Kav index 2d1a50e..393b8bc 160000 --- a/Kav +++ b/Kav @@ -1 +1 @@ -Subproject commit 2d1a50e1c439e0d511de82eab6cd2481b1c011f8 +Subproject commit 393b8bcb03510f2cd87bdef2c6a22731334407dd diff --git a/KavTest/Components/DirectionalLightComponent.cs b/KavTest/Components/DirectionalLightComponent.cs new file mode 100644 index 0000000..6d75ef0 --- /dev/null +++ b/KavTest/Components/DirectionalLightComponent.cs @@ -0,0 +1,17 @@ +using Encompass; +using Microsoft.Xna.Framework; + +namespace KavTest.Components +{ + public struct DirectionalLightComponent : IComponent + { + public Color Color { get; } + public float Intensity { get; } + + public DirectionalLightComponent(Color color, float intensity) + { + Color = color; + Intensity = intensity; + } + } +} diff --git a/KavTest/KavTestGame.cs b/KavTest/KavTestGame.cs index 5eb6ac6..3ab6cbf 100644 --- a/KavTest/KavTestGame.cs +++ b/KavTest/KavTestGame.cs @@ -74,11 +74,23 @@ namespace KavTest )); WorldBuilder.SendMessage(new LightBulbSpawnMessage( - new Transform3D(new Vector3(0, 2, -5)), + new Transform3D(new Vector3(-5, 2, -5)), Color.White, 300f )); + var directionalLightEntity = WorldBuilder.CreateEntity(); + WorldBuilder.SetComponent(directionalLightEntity, new Transform3DComponent( + new Transform3D( + Vector3.Zero, + Quaternion.CreateFromAxisAngle(Vector3.Right, Microsoft.Xna.Framework.MathHelper.PiOver2) + ) + )); + WorldBuilder.SetComponent(directionalLightEntity, new DirectionalLightComponent( + Color.Blue, + 2f + )); + var cameraEntity = WorldBuilder.CreateEntity(); WorldBuilder.SetComponent(cameraEntity, new ArcballTransformComponent( new ArcballTransform( diff --git a/KavTest/Renderers/SceneRenderer.cs b/KavTest/Renderers/SceneRenderer.cs index f662dbb..d154f33 100644 --- a/KavTest/Renderers/SceneRenderer.cs +++ b/KavTest/Renderers/SceneRenderer.cs @@ -3,15 +3,16 @@ using System.Collections.Generic; using Encompass; using Kav; using KavTest.Components; +using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace KavTest.Renderers { public class SceneRenderer : GeneralRenderer { - private GraphicsDevice GraphicsDevice { get; } + private Kav.Renderer Renderer { get; } - private IEnumerable Models + private IEnumerable<(Kav.Model, Matrix)> ModelTransforms { get { @@ -19,9 +20,7 @@ namespace KavTest.Renderers { var transformComponent = GetComponent(entity); var modelComponent = GetComponent(entity); - - modelComponent.Model.ApplyTransform(transformComponent.Transform.TransformMatrix); - yield return modelComponent.Model; + yield return (modelComponent.Model, transformComponent.Transform.TransformMatrix); } } } @@ -36,7 +35,7 @@ namespace KavTest.Renderers var pointLightComponent = GetComponent(entity); yield return new PointLight( - transformComponent.Transform.TransformMatrix.Translation, + transformComponent.Transform.Position, pointLightComponent.Color, pointLightComponent.Intensity ); @@ -44,9 +43,27 @@ namespace KavTest.Renderers } } + private IEnumerable DirectionalLights + { + get + { + foreach (var entity in ReadEntitiesAsEnumerable()) + { + var transformComponent = GetComponent(entity); + var directionalLightComponent = GetComponent(entity); + + yield return new Kav.DirectionalLight( + transformComponent.Transform.Forward, + directionalLightComponent.Color, + directionalLightComponent.Intensity + ); + } + } + } + public SceneRenderer(GraphicsDevice graphicsDevice) { - GraphicsDevice = graphicsDevice; + Renderer = new Kav.Renderer(graphicsDevice, graphicsDevice.PresentationParameters.BackBufferWidth, graphicsDevice.PresentationParameters.BackBufferHeight); } public override void Render() @@ -62,11 +79,27 @@ namespace KavTest.Renderers cameraComponent.Projection ); - Kav.Renderer.Render( - GraphicsDevice, + // if (SomeComponent()) + // { + // ref readonly var directionalLightEntity = ref ReadEntity(); + // ref readonly var directionalLightTransformComponent = ref GetComponent(directionalLightEntity); + // ref readonly var directionalLightComponent = ref GetComponent(directionalLightEntity); + + // Renderer.DepthRender( + // ModelTransforms, + // new Kav.DirectionalLight( + // directionalLightTransformComponent.Transform.Forward, + // directionalLightComponent.Color, + // directionalLightComponent.Intensity + // ) + // ); + // } + + Renderer.Render( camera, - Models, - PointLights + ModelTransforms, + PointLights, + DirectionalLights ); } }