cube appearance matches light
parent
eb51182760
commit
92379f1ae9
|
@ -0,0 +1,15 @@
|
|||
using Microsoft.Xna.Framework;
|
||||
using Encompass;
|
||||
|
||||
namespace KavTest.Components
|
||||
{
|
||||
public struct OverrideAlbedoComponent : IComponent
|
||||
{
|
||||
public Vector3 Color { get; }
|
||||
|
||||
public OverrideAlbedoComponent(Vector3 color)
|
||||
{
|
||||
Color = color;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,6 +22,7 @@ namespace KavTest.Spawners
|
|||
AddComponent(entity, new PointLightComponent(message.Color, message.Intensity));
|
||||
AddComponent(entity, new MoveAlongCurve3DComponent(message.Curve));
|
||||
AddComponent(entity, new ModelComponent(LightBulbModel));
|
||||
AddComponent(entity, new OverrideAlbedoComponent(message.Color.ToVector3()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ using System.IO;
|
|||
using Encompass;
|
||||
using KavTest.Components;
|
||||
using KavTest.Engines;
|
||||
using KavTest.Extensions;
|
||||
using KavTest.Messages;
|
||||
using KavTest.Renderers;
|
||||
using KavTest.Spawners;
|
||||
|
@ -81,62 +82,17 @@ namespace KavTest
|
|||
new Vector3(-1, 1, 1)
|
||||
));
|
||||
|
||||
var lightMovementSpline = new SplineCurve3D(
|
||||
ImmutableArray.Create<ICurve3D>(
|
||||
new QuadraticBezierCurve3D(
|
||||
new System.Numerics.Vector3(-5, 2, -5),
|
||||
new System.Numerics.Vector3(20, 50, -20),
|
||||
new System.Numerics.Vector3(10, 20, 10)
|
||||
),
|
||||
new QuadraticBezierCurve3D(
|
||||
new System.Numerics.Vector3(10, 20, 10),
|
||||
new System.Numerics.Vector3(-20, -50, -10),
|
||||
new System.Numerics.Vector3(-5, 2, -5)
|
||||
)
|
||||
),
|
||||
ImmutableArray.Create<float>(
|
||||
3f,
|
||||
3f
|
||||
),
|
||||
true
|
||||
);
|
||||
for (var i = 0; i < 64; i++)
|
||||
{
|
||||
var start = RandomHelper.RandomVector3(-5, 5);
|
||||
|
||||
WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
new Transform3D(new Vector3(-5, 2, -5), Quaternion.Identity, new Vector3(0.25f, 0.25f, 0.25f)),
|
||||
Color.White,
|
||||
300f,
|
||||
lightMovementSpline
|
||||
));
|
||||
|
||||
// WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
// new Transform3D(new Vector3(5, 2, -5)),
|
||||
// Color.Blue,
|
||||
// 300f
|
||||
// ));
|
||||
|
||||
// WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
// new Transform3D(new Vector3(-5, -2, -5)),
|
||||
// Color.Red,
|
||||
// 300f
|
||||
// ));
|
||||
|
||||
// WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
// new Transform3D(new Vector3(-5, 2, 5)),
|
||||
// Color.Yellow,
|
||||
// 300f
|
||||
// ));
|
||||
|
||||
// WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
// new Transform3D(new Vector3(-5, 2, -10)),
|
||||
// Color.Orange,
|
||||
// 300f
|
||||
// ));
|
||||
|
||||
// WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
// new Transform3D(new Vector3(-10, 2, -5)),
|
||||
// Color.CornflowerBlue,
|
||||
// 300f
|
||||
// ));
|
||||
WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
new Transform3D(start.ToXNAVector(), Quaternion.Identity, new Vector3(0.1f, 0.1f, 0.1f)),
|
||||
RandomHelper.RandomColor(),
|
||||
5f,
|
||||
RandomHelper.RandomLoop(start, -15, 15, 3, 10)
|
||||
));
|
||||
}
|
||||
|
||||
var directionalLightEntity = WorldBuilder.CreateEntity();
|
||||
WorldBuilder.SetComponent(directionalLightEntity, new Transform3DComponent(
|
||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||
using Encompass;
|
||||
using Kav;
|
||||
using KavTest.Components;
|
||||
using KavTest.Extensions;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
|
||||
|
@ -20,6 +21,22 @@ namespace KavTest.Renderers
|
|||
{
|
||||
var transformComponent = GetComponent<Transform3DComponent>(entity);
|
||||
var modelComponent = GetComponent<ModelComponent>(entity);
|
||||
if (HasComponent<OverrideAlbedoComponent>(entity))
|
||||
{
|
||||
var overrideAlbedoComponent = GetComponent<OverrideAlbedoComponent>(entity);
|
||||
|
||||
foreach (var mesh in modelComponent.Model.Meshes)
|
||||
{
|
||||
foreach (var meshPart in mesh.MeshParts)
|
||||
{
|
||||
if (meshPart.Effect is GBufferEffect gBufferEffect)
|
||||
{
|
||||
gBufferEffect.AlbedoTexture = null;
|
||||
gBufferEffect.Albedo = overrideAlbedoComponent.Color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
yield return (modelComponent.Model, transformComponent.Transform.TransformMatrix);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using System.Collections.Immutable;
|
||||
using System.Numerics;
|
||||
using MoonTools.Curve;
|
||||
|
||||
namespace KavTest
|
||||
{
|
||||
public static class RandomHelper
|
||||
{
|
||||
private static Random s_random = new Random();
|
||||
|
||||
public static double RandomDouble(double min, double max)
|
||||
{
|
||||
return (s_random.NextDouble() * (max - min)) + min;
|
||||
}
|
||||
|
||||
public static float RandomFloat(float min, float max)
|
||||
{
|
||||
return (float)(RandomDouble(min, max));
|
||||
}
|
||||
|
||||
public static int RandomInt(int min, int max)
|
||||
{
|
||||
return (int)(Math.Floor(RandomDouble(min, max)));
|
||||
}
|
||||
|
||||
public static SplineCurve3D RandomLoop(Vector3 start, float minMotion, float maxMotion, float minTime, float maxTime)
|
||||
{
|
||||
var midpoint = start + RandomVector3(minMotion, maxMotion);
|
||||
var controlPointTranslation = RandomVector3(minMotion, maxMotion);
|
||||
|
||||
var curveOne = new QuadraticBezierCurve3D(
|
||||
start,
|
||||
start + controlPointTranslation,
|
||||
midpoint
|
||||
);
|
||||
var curveTwo = new QuadraticBezierCurve3D(
|
||||
midpoint,
|
||||
start - controlPointTranslation, // co-linear control points produce smooth curves
|
||||
start
|
||||
);
|
||||
|
||||
return new SplineCurve3D(
|
||||
ImmutableArray.Create<ICurve3D>(
|
||||
curveOne,
|
||||
curveTwo
|
||||
),
|
||||
ImmutableArray.Create<float>(
|
||||
RandomFloat(minTime, maxTime / 2),
|
||||
RandomFloat(minTime, maxTime / 2)
|
||||
),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
public static Vector3 RandomVector3(float min, float max)
|
||||
{
|
||||
return new Vector3(
|
||||
RandomFloat(min, max),
|
||||
RandomFloat(min, max),
|
||||
RandomFloat(min, max)
|
||||
);
|
||||
}
|
||||
|
||||
public static Microsoft.Xna.Framework.Color RandomColor()
|
||||
{
|
||||
var randomColor = RandomVector3(0f, 1f);
|
||||
return new Microsoft.Xna.Framework.Color(randomColor.X, randomColor.Y, randomColor.Z);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue