Monogame和.fx文件?

时间:2014-05-19 08:50:03

标签: mono monogame

我目前正在学习本教程,但使用的是MonoGame:
http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Terrain_from_file.php
如教程中所述,我的主要目标是从图像文件中渲染地形。

我的项目中包含的教程提供了.fx。

我在使用MonoGame加载bmp文件时遇到了一些问题,现在我设法加载了它。问题来自fx文件。 MonoDevelop告诉我:The MGX File is Corrupt !

以下是文章作者的原始代码:
effect = Content.Load<Effect> ("effects");

以下是我在MonoGame中使用它的方式:
effect = Content.Load<Effect> ("effects.fx");

我真的迷失了MonoGame中效果文件的用法。关于这个有什么好的教程吗?无论如何,我真的迷失了MonoGame。为什么没有明确的MonoGame教程,它被广泛使用?

4 个答案:

答案 0 :(得分:2)

您需要使用2MGFX工具将着色器.fx转换为适合monogame的文件格式。您可以在已安装的monogame目录C:\Program Files (x86)\MSBuild\MonoGame\v3.0

中找到该工具

使用方法:

  1. 创建.bat文件并编写代码,如下所示:
  2. 2MGFX.exe effects.fx effects.mgfxo pause
  3. 执行.bat文件
  4. 请注意,着色器文件,.bat文件和2MGFX.exe必须位于同一目录中。

    以下是如何使用已编译的.mgfxo文件作为效果:

    1. 将effects.mgfxo放入项目的Assets \ Content文件夹
    2. 加载文件,如下所示

    3. Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("ProjectNameSpace.Assets.Content.effects.mgfxo");
      BinaryReader Reader = new BinaryReader(s);
      Effect effect = new Effect(graphics, Reader.ReadBytes((int)Reader.BaseStream.Length)); 
      

      如果您在将着色器.fx转换为.mgfxo时遇到问题,请发表评论。

答案 1 :(得分:2)

我一直在尝试自己跟踪Riemers教程,就像你一样,我努力学习这些效果。

在成功设法编译并使用它之前,我必须对原始效果文件进行一些更改,没有任何例外。

重命名以下内容:

  • vs_2_0至 vs_4_0
  • ps_2_0至 ps_4_0
  • 位置为 SV_POSITION

完成这些更改后,我使用了以下编译工具:

  

2MGFX.exe effects.fx effects.mgfxo / Profile:DirectX_11

编译完成后,我将mgfxo文件移动到我的内容文件夹中并分配了以下参数:

  • 构建操作:嵌入资源
  • 复制到输出目录:始终复制

我花了几次尝试,直到我设法使用没有MonoGame的着色器向我抛出任何异常。

byte[] bytes = File.ReadAllBytes("Content/effects.mgfxo");
effect = new Effect(GraphicsDevice, bytes);

答案 2 :(得分:1)

使用2MGFX工具是可选的,你可以使用工具或内容管道,我个人更喜欢Content管道,因为每次我(重新)构建Content项目时它都会自动处理着色器文件。

怎么做?

  1. 首先:添加一个MonoGame内容项目,
  2. 然后在此项目中添加.FX文件
  3. 将内容处理器设置为:&#34; MonoGame效果内容处理器&#34;在属性
  4. 然后,在您的游戏项目添加参考到此内容项目。
  5. 并像这样使用着色器:

    var myEffect = Content.Load<Effect>("shaderFileNameWithoutExtension"); 
    

    或者如果您的内容项目中有文件夹:

    var myEffect = Content.Load<Effect>("FolderName\\shaderFileNameWithoutExtension");
    

答案 3 :(得分:1)

我看到您正在使用Linux。在Linux上编译着色器有些困难。在我自己的项目中,我发现以下资源特别有用。

http://www.infinitespace-studios.co.uk/general/monogame-building-fx-shaders-on-a-mac-and-linux/

在此之后,您可以正常使用MonoGame管道构建着色器(前提是您已添加管道参考)。

希望这会有所帮助!