Освещение 2D-сетки в 3d-среде

#c# #monogame #lighting

Вопрос:

Я делаю 2,5-D игру с моногамой. У меня есть 2D-сетки в 3D-пространстве, и я хочу, чтобы они сияли. Но если я включу освещение по умолчанию, они будут черными как смоль.

Здесь код рендеринга:

 BasicEffect effect = new BasicEffect(graphicsDevice);

VertexPositionTexture[] vertices = 
{
    new VertexPositionTexture(new Vector3(-.5f   Position.X, 0.5f   Position.Y, 0.0f), new Vector2(0, 0)),
    new VertexPositionTexture(new Vector3(-.5f   Position.X, -.5f   Position.Y, 0.0f), new Vector2(0, 1)),
    new VertexPositionTexture(new Vector3(0.5f   Position.X, 0.5f   Position.Y, 0.0f), new Vector2(1, 0)),
    new VertexPositionTexture(new Vector3(0.5f   Position.X, -.5f   Position.Y, 0.0f), new Vector2(1, 1)),
};

graphicsDevice.BlendState = BlendState.AlphaBlend;

effect.EnableDefaultLighting();
effect.LightingEnabled = true;
//effect.AmbientLightColor = new Vector3(.75f, .75f, .75f);
effect.DirectionalLight0.DiffuseColor = new Vector3(.75f, .75f, .75f);
effect.DirectionalLight0.Direction = new Vector3(0, 0, -1);
effect.DirectionalLight0.SpecularColor = new Vector3(.75f, .60f, .60f);
effect.TextureEnabled = true;
effect.Texture = Subtexture;

effect.Projection = camera.Fov;
effect.View = camera.ViewMatrix;
effect.World = camera.WorldMatrix;

VertexBuffer buffer = new VertexBuffer(graphicsDevice, typeof(VertexPositionTexture), vertices.Length, BufferUsage.WriteOnly);
buffer.SetData(vertices);
graphicsDevice.SetVertexBuffer(buffer);
graphicsDevice.RasterizerState = RasterizerState.CullNone;

foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
    pass.Apply();
    graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, vertices,  0, 2);
}
 

Комментарии:

1. Добро пожаловать в Stack Overflow. Пожалуйста, отредактируйте сообщение и добавьте языковой тег.

2. Для освещения требуются нормали в буфере вершин.