我目前正在学习本教程,但使用的是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已经被广泛使用,怎么还没有明确的教程呢?
发布于 2014-05-19 21:31:41
您需要使用2MGFX工具将着色器.fx转换为适用于单人游戏的文件格式。您可以在安装的monogame目录C:\Program Files (x86)\MSBuild\MonoGame\v3.0中找到该工具
使用方法:
所示
请注意,着色器文件、.bat文件和2MGFX.exe必须位于同一目录中。
以下是如何使用编译后的.mgfxo文件作为效果:
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时遇到问题,请留下评论。
发布于 2016-02-16 00:43:23
我自己也在尝试学习Riemers教程,就像你一样,我也在为效果而苦苦挣扎。
在成功编译和使用它之前,我不得不对原始效果文件做了几处更改。
重命名如下:
完成这些更改后,我使用了编译工具,如下所示:
2MGFX.exe effects.fx effects.mgfxo /Profile:DirectX_11
编译完成后,我将mgfxo文件移动到我的contents文件夹中,并分配了以下参数:
我尝试了几次,直到我成功地使用了着色器,而MonoGame没有向我抛出任何异常。
byte[] bytes = File.ReadAllBytes("Content/effects.mgfxo");
effect = new Effect(GraphicsDevice, bytes);发布于 2014-05-28 23:16:08
使用2MGFX工具是可选的,您可以使用该工具或内容管道,我个人更喜欢内容管道,因为它会在每次我(重新)构建内容项目时自动处理着色器文件。
该怎么做呢?
并按如下方式使用着色器:
var myEffect = Content.Load<Effect>("shaderFileNameWithoutExtension"); 或者,如果您的内容项目中有文件夹:
var myEffect = Content.Load<Effect>("FolderName\\shaderFileNameWithoutExtension");https://stackoverflow.com/questions/23733470
复制相似问题