1

我有一个有点复杂的问题,因为我没有想法,我又来了。

我在应用程序上工作以从任何 3d 引擎生成镜头,我(不幸地)建议 XNA 来实现这一点,因为我们想用 c# 制作应用程序。我想向我的编程伙伴发送一个带有 XNA 代码的库(以接口的形式),这样他甚至不必知道图像是如何生成的。

这是我的问题 - 我无法为我的场景加载模型和纹理,因为 contentmanager 不在库项目中,尽管我单独运行 xna 游戏没有问题。

所以这是我的问题:

  1. 是否可以访问/加载内容,使其可用作/在库中?
  2. 有没有可以推荐的生成 3d 场景的库(在 c# 中)?

任何帮助将不胜感激。

4

1 回答 1

1

是的,可以在库项目中加载内容。ContentManager您可以在类之外创建一个实例Game并使用它来加载您的内容。

创建一个新实例的技巧ContentManager是两个构造函数,它们都接受一个实例IServiceProvidor作为第一个参数。无论你创建什么类都ContentManager可以实现这个接口。您只需要从此接口实现一种方法,那就是:

public object GetService(Type serviceType)

它将被 调用ContentManager以检索 的实例IGraphicsDeviceService。您需要一个可以实现此接口的类,该接口主要是与设备创建和销毁相关的事件。有一个重要的属性需要实现,那就是:

public GraphicsDevice GraphicsDevice

我将在这个答案中留下很多样板代码,因为你可以在 internetz 的其他地方找到它。下面的代码假定您已经初始化了 XNA 图形系统并GraphicsDevice在创建此类的实例之前创建了一个

public class ImageGenerator : IServiceProvider, IGraphicsDeviceService
{
    public GraphicsDevice GraphicsDevice { get; private set; }
    public ContentManager ContentManager { get; private set; }

    public ImageGenerator( GraphicsDevice device )
    {
        this.GraphicsDevice = device;
        this.ContentManager = new ContentManager( this );
    }

    public object GetService(Type serviceType)
    {
        if (serviceType == typeof(IGraphicsDeviceService))
        {
            return this;
        }
        return null;
    }
    public event EventHandler<EventArgs> DeviceCreated;

    public event EventHandler<EventArgs> DeviceDisposing;

    public event EventHandler<EventArgs> DeviceReset;

    public event EventHandler<EventArgs> DeviceResetting;
}

然而,在走这条路之前,我建议您研究子类Game化并允许 XNA 框架处理繁重的工作,您只需担心渲染场景和创建图像。

Axiom ( http://www.axiom3d.net ) 是一个 C# 引擎,能够为位图图像生成 3D 场景。

于 2013-05-15T22:43:23.577 回答