diffuse lit mesh sprites
parent
4687d57b28
commit
822b897ffc
2
Kav
2
Kav
|
@ -1 +1 @@
|
|||
Subproject commit 47242e4f52d11b16ec4bc5b630d5d58869dedd92
|
||||
Subproject commit ca6c91446e7a36c72db4f50ba6d7b6ab91a35605
|
|
@ -0,0 +1,16 @@
|
|||
using Encompass;
|
||||
using Kav;
|
||||
|
||||
namespace KavTest
|
||||
{
|
||||
public struct MeshSpriteComponent : IComponent
|
||||
{
|
||||
public MeshSprite MeshSprite { get; }
|
||||
|
||||
public MeshSpriteComponent(
|
||||
MeshSprite meshSprite
|
||||
) {
|
||||
MeshSprite = meshSprite;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
using Encompass;
|
||||
using KavTest.Components;
|
||||
using KavTest.Messages;
|
||||
using Microsoft.Xna.Framework;
|
||||
|
||||
namespace KavTest.Spawners
|
||||
{
|
||||
public class BillboardSpriteSpawner : Spawner<BillboardSpriteSpawnMessage>
|
||||
{
|
||||
protected override void Spawn(in BillboardSpriteSpawnMessage message)
|
||||
{
|
||||
var entity = CreateEntity();
|
||||
|
||||
var transform = new Transform3D(
|
||||
message.Position,
|
||||
Quaternion.Identity,
|
||||
new Vector3(message.Scale, 1)
|
||||
);
|
||||
|
||||
AddComponent(entity, new Transform3DComponent(transform));
|
||||
AddComponent(entity, new SpriteComponent(
|
||||
message.Texture,
|
||||
message.Origin,
|
||||
message.Rotation,
|
||||
message.BillboardConstraint
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
using Encompass;
|
||||
using KavTest.Components;
|
||||
using KavTest.Messages;
|
||||
using Microsoft.Xna.Framework;
|
||||
|
||||
namespace KavTest.Spawners
|
||||
{
|
||||
public class MeshSpriteSpawner : Spawner<MeshSpriteSpawnMessage>
|
||||
{
|
||||
protected override void Spawn(in MeshSpriteSpawnMessage message)
|
||||
{
|
||||
var entity = CreateEntity();
|
||||
|
||||
AddComponent(entity, new Transform3DComponent(message.Transform));
|
||||
AddComponent(entity, new MeshSpriteComponent(message.MeshSprite));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -171,6 +171,12 @@ namespace KavTest
|
|||
|
||||
var mushroomGuyTexture = Texture2D.FromStream(GraphicsDevice, new FileStream("Content/Sprites/mushroomguy.png", FileMode.Open));
|
||||
|
||||
var mushroomGuyMeshSprite = new Kav.MeshSprite(
|
||||
GraphicsDevice,
|
||||
mushroomGuyTexture,
|
||||
Kav.SpriteBillboardConstraint.None
|
||||
);
|
||||
|
||||
WorldBuilder.AddEngine(new InputEngine(this));
|
||||
WorldBuilder.AddEngine(new AngularVelocityEngine());
|
||||
WorldBuilder.AddEngine(new MoveAlongCurve3DEngine());
|
||||
|
@ -180,7 +186,7 @@ namespace KavTest
|
|||
WorldBuilder.AddEngine(new LightBulbSpawner(lightBulbModel));
|
||||
WorldBuilder.AddEngine(new StaticModelSpawner());
|
||||
WorldBuilder.AddEngine(new DirectionalLightSpawner());
|
||||
WorldBuilder.AddEngine(new BillboardSpriteSpawner());
|
||||
WorldBuilder.AddEngine(new MeshSpriteSpawner());
|
||||
WorldBuilder.AddGeneralRenderer(new SceneRenderer(GraphicsDevice), 0);
|
||||
|
||||
// WorldBuilder.SendMessage(new RustyBallSpawnMessage(
|
||||
|
@ -244,12 +250,9 @@ namespace KavTest
|
|||
cubeModel
|
||||
));
|
||||
|
||||
WorldBuilder.SendMessage(new BillboardSpriteSpawnMessage(
|
||||
mushroomGuyTexture,
|
||||
new Vector3(3, -2, 8),
|
||||
0f,
|
||||
new Vector2(mushroomGuyTexture.Width, mushroomGuyTexture.Height) * 0.025f,
|
||||
Kav.SpriteBillboardConstraint.Full
|
||||
WorldBuilder.SendMessage(new MeshSpriteSpawnMessage(
|
||||
new Transform3D(new Vector3(3, 0, 11), Quaternion.Identity, Vector3.One),
|
||||
mushroomGuyMeshSprite
|
||||
));
|
||||
|
||||
// WorldBuilder.SendMessage(new StaticModelSpawnMessage(
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
using Encompass;
|
||||
using Kav;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
|
||||
namespace KavTest.Messages
|
||||
{
|
||||
public struct BillboardSpriteSpawnMessage : IMessage
|
||||
{
|
||||
public Texture2D Texture { get; }
|
||||
public Vector3 Position { get; }
|
||||
public Vector2 Origin { get; }
|
||||
public float Rotation { get; }
|
||||
public Vector2 Scale { get; }
|
||||
public SpriteBillboardConstraint BillboardConstraint { get; }
|
||||
|
||||
public BillboardSpriteSpawnMessage(
|
||||
Texture2D texture,
|
||||
Vector3 position,
|
||||
float rotation,
|
||||
Vector2 scale,
|
||||
SpriteBillboardConstraint billboardConstraint
|
||||
) {
|
||||
Texture = texture;
|
||||
Origin = new Vector2(texture.Width / 2, texture.Height);
|
||||
Position = position;
|
||||
Rotation = rotation;
|
||||
Scale = scale;
|
||||
BillboardConstraint = billboardConstraint;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
using Encompass;
|
||||
using Kav;
|
||||
|
||||
namespace KavTest.Messages
|
||||
{
|
||||
public struct MeshSpriteSpawnMessage : IMessage
|
||||
{
|
||||
public Transform3D Transform { get; }
|
||||
public MeshSprite MeshSprite { get; }
|
||||
|
||||
public MeshSpriteSpawnMessage(
|
||||
Transform3D transform,
|
||||
MeshSprite meshSprite
|
||||
) {
|
||||
Transform = transform;
|
||||
MeshSprite = meshSprite;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -78,37 +78,34 @@ namespace KavTest.Renderers
|
|||
}
|
||||
}
|
||||
|
||||
private Kav.DirectionalLight DirectionalLight()
|
||||
private Kav.DirectionalLight? DirectionalLight()
|
||||
{
|
||||
var entity = ReadEntity<DirectionalLightComponent>();
|
||||
var transformComponent = GetComponent<Transform3DComponent>(entity);
|
||||
var directionalLightComponent = GetComponent<DirectionalLightComponent>(entity);
|
||||
if (SomeComponent<DirectionalLightComponent>())
|
||||
{
|
||||
var entity = ReadEntity<DirectionalLightComponent>();
|
||||
var transformComponent = GetComponent<Transform3DComponent>(entity);
|
||||
var directionalLightComponent = GetComponent<DirectionalLightComponent>(entity);
|
||||
|
||||
return new Kav.DirectionalLight(
|
||||
transformComponent.Transform.Forward,
|
||||
directionalLightComponent.Color,
|
||||
directionalLightComponent.Intensity
|
||||
);
|
||||
return new Kav.DirectionalLight(
|
||||
transformComponent.Transform.Forward,
|
||||
directionalLightComponent.Color,
|
||||
directionalLightComponent.Intensity
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerable<Sprite> Sprites()
|
||||
private IEnumerable<(MeshSprite, Matrix)> MeshSpriteTransforms()
|
||||
{
|
||||
foreach (var entity in ReadEntitiesAsEnumerable<SpriteComponent>())
|
||||
foreach (var entity in ReadEntitiesAsEnumerable<MeshSpriteComponent>())
|
||||
{
|
||||
var transformComponent = GetComponent<Transform3DComponent>(entity);
|
||||
var spriteComponent = GetComponent<SpriteComponent>(entity);
|
||||
var spriteComponent = GetComponent<MeshSpriteComponent>(entity);
|
||||
|
||||
yield return new Sprite(
|
||||
spriteComponent.Texture,
|
||||
transformComponent.Transform.Position,
|
||||
spriteComponent.Origin,
|
||||
spriteComponent.Rotation,
|
||||
new Vector2(
|
||||
transformComponent.Transform.Scale.X,
|
||||
transformComponent.Transform.Scale.Y
|
||||
),
|
||||
spriteComponent.BillboardConstraint
|
||||
);
|
||||
yield return (spriteComponent.MeshSprite, transformComponent.Transform.TransformMatrix);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,11 +197,11 @@ namespace KavTest.Renderers
|
|||
ReadComponent<SkyboxComponent>().Skybox
|
||||
);
|
||||
|
||||
Renderer.BillboardSpriteRender(
|
||||
Renderer.MeshSpriteRender(
|
||||
BillboardTarget,
|
||||
camera,
|
||||
ModelTransforms,
|
||||
Sprites(),
|
||||
MeshSpriteTransforms(),
|
||||
AmbientLight,
|
||||
PointLights,
|
||||
DirectionalLight()
|
||||
|
|
Loading…
Reference in New Issue