c# - 在 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);
}
解决方案
推荐阅读
- docker - 读取 Docker 容器中 shell 脚本的输入
- python - 使帮助命令打印未排序的命令
- consul - Envoy sidecar-proxy 公共监听器
- macos - 显示 gnuplot 终端的字体
- angular - 根据 ngxdaterangepicker angular 8 中的 minDate 设置 maxDate
- java - Java收集返回顶级项目的嵌套地图流
- java - 将方法转换为 Lambda 表达式
- javascript - Aurelia 项目在 iPad 上启动时出现问题:找不到变量:通知
- tensorflow - Cannot load model weights in TensorFlow 2
- sql-server - SQL Server:使用 CTE 展开视图