首页 > 解决方案 > 在 3D 环境中照亮 2D 网格

问题描述

我正在用 Monogame 制作 2.5D 游戏。我在 3D 空间中有 2D 网格,我希望它们发光。但是如果我激活默认照明,它们就会变成黑色。

这里是渲染代码:

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);
}

标签: c#monogamelighting

解决方案


推荐阅读