1

私は少し複雑な問題を抱えていて、アイデアがなくなったので、またここに来ました。

私は、任意の 3D エンジンからショットを生成するアプリに取り組んでおり、C# でアプリを作成したかったため、(残念ながら) これを実現するために XNA を提案しました。プログラミング仲間に XNA コード (インターフェイスの形式) を含むライブラリを送信したいので、画像がどのように生成されるかを知る必要さえありません。

ここに私の問題があります-xnaゲームを個別に実行しても問題はありませんが、コンテンツマネージャーがライブラリプロジェクトにないため、シーンのモデルとテクスチャをロードできません。

だからここに私の質問があります:

  1. ライブラリとして/ライブラリ内で使用できるように、コンテンツにアクセス/ロードすることは可能ですか?
  2. 推奨できる 3D シーン (C#) を生成するためのライブラリはありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

1

はい、ライブラリ プロジェクトにコンテンツを読み込むことができます。クラスContentManager外のインスタンスを作成し、それを使用してコンテンツをロードできます。Game

の新しいインスタンスを作成する秘訣ContentManagerは 2 つのコンストラクターであり、どちらも のインスタンスをIServiceProvidor最初の引数として受け入れます。で作成しているどのクラスでも、ContentManagerこのインターフェイスを実装できます。このインターフェイスから実装する必要があるメソッドは 1 つだけです。

public object GetService(Type serviceType)

ContentManagerのインスタンスを取得するために、によって呼び出されますIGraphicsDeviceService。このインターフェイスを実装できるクラスが必要になります。これは、主にデバイスの作成と破棄に関連するイベントです。実装する必要がある重要なプロパティが 1 つあります。それは次のとおりです。

public GraphicsDevice GraphicsDevice

インターネットの他の場所で見つけることができるので、この回答の定型コードをたくさん残しておきます。以下のコードは、XNA Graphics システムを初期化し、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 Framework が面倒な作業を処理できるようにすることをお勧めします。シーンのレンダリングと画像の作成について心配する必要はありません。

Axiom ( http://www.axiom3d.net ) は、3D シーンをビットマップ イメージに生成できる C# エンジンです。

于 2013-05-15T22:43:23.577 に答える