首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Monogame和.fx文件?

Monogame和.fx文件?
EN

Stack Overflow用户
提问于 2014-05-19 16:50:03
回答 4查看 7.4K关注 0票数 3

我目前正在学习本教程,但使用的是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已经被广泛使用,怎么还没有明确的教程呢?

EN

回答 4

Stack Overflow用户

发布于 2014-05-19 21:31:41

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

使用方法:

  1. 创建.bat文件并编写代码,如.bat file

所示

请注意,着色器文件、.bat文件和2MGFX.exe必须位于同一目录中。

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

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

代码语言:javascript
复制
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时遇到问题,请留下评论。

票数 2
EN

Stack Overflow用户

发布于 2016-02-16 00:43:23

我自己也在尝试学习Riemers教程,就像你一样,我也在为效果而苦苦挣扎。

在成功编译和使用它之前,我不得不对原始效果文件做了几处更改。

重命名如下:

  • vs_2_0 to vs_4_
  • ps_2_0 to ps_4_
  • POSITION to SV_POSITION

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

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

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

  • 生成操作: Embedded
  • Copy to output directory: Copy always

我尝试了几次,直到我成功地使用了着色器,而MonoGame没有向我抛出任何异常。

代码语言:javascript
复制
byte[] bytes = File.ReadAllBytes("Content/effects.mgfxo");
effect = new Effect(GraphicsDevice, bytes);
票数 2
EN

Stack Overflow用户

发布于 2014-05-28 23:16:08

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

该怎么做呢?

  1. First:添加MonoGame内容项目,然后在此项目中添加.FX文件
  2. 在属性
  3. 中将内容处理器设置为:"MonoGame effect Content processor“然后,在游戏项目中添加对此内容项目的引用。

并按如下方式使用着色器:

代码语言:javascript
复制
var myEffect = Content.Load<Effect>("shaderFileNameWithoutExtension"); 

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

代码语言:javascript
复制
var myEffect = Content.Load<Effect>("FolderName\\shaderFileNameWithoutExtension");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23733470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档