【发布时间】:2019-05-23 05:44:52
【问题描述】:
所以我最终为 MonoGame 编写了我的第一个 HLSL 着色器,并设法以某种方式将它连接到我想要绘制的模型。 到目前为止,一切都很好。 然而,在我看来,“不知何故设法做到这一点”是丑陋的,可能不是实现这一目标的预期方式:
internal Model(ContentManager content)
{
mModel = content.Load<Microsoft.Xna.Framework.Graphics.Model>("models/CustomModel");
// individual effect for individual models
var effect = content.Load<Effect>("effects/CustomEffect").Clone();
effect.Parameters["Texture"].SetValue(mModel.Meshes[0].MeshParts[0].Effect.Parameters["Texture"].GetValueTexture2D());
foreach (var mesh in mModel.Meshes)
{
foreach (var meshPart in mesh.MeshParts)
{
meshPart.Effect = effect;
}
}
}
如您所见,我分别加载了我的模型和效果,并用我新加载的自定义效果替换了模型的所有基本效果。并保留旧的 TextureVariable。
我自己相信有一个更优雅的解决方案,这个解决方案涉及告诉 MonoGame 使用 CustomEffect 而不是 BasicEffect。 我知道使用 MGCB 工具我可以为 ModelProcessor 指定一个 DefaultEffect,但是我还没有找到我需要做什么,所以我可以在那里指定我的效果而不会导致游戏崩溃并告诉我效果/CustomEffect 不是有效的效果。
那么有没有更好的方法来实现与现有代码相同的目标?如果有,怎么做?
【问题讨论】: