0

私が書いているアプリケーションでこのサンプル プロジェクトの XNA 4.0 フォーム コントロールを使用しています: http://creators.xna.com/en-US/sample/winforms_series1

うまく機能しており、ビジュアルとアニメーションでかなりの作業を行いました。私が頭を悩ませている主な問題は、レンダリングする 3D モデルとプリミティブ 3D 形状 (30 のテッセレーションを持つ円柱) が、低解像度であるかのように非常にギザギザになっていることです。

マルチサンプリングを有効にする方法を見つけようとしましたが、オンラインで見つけることができるすべての例は、カスタム フォーム コントロールで XNA を使用するこの斬新な方法には当てはまらないようです。

GraphicsDeviceService() コンストラクター内には、PresentationParameters オブジェクトが作成されていますが、使用可能な唯一のプロパティは、整数型の parameters.MultiSampleCount です。私はそれを設定しようとしましたが、効果はありませんでした。

また、バック バッファーをコントロールのサイズ (GraphicsDeviceService.cs) の 2 倍の大きさにしようとしました。

    GraphicsDeviceService(IntPtr windowHandle, int width, int height)
    {
        parameters.BackBufferWidth = 幅 * 2;
        parameters.BackBufferHeight = 高さ * 2;
        ...
    }

次に、この関数 (GraphicsDeviceControl.cs) を変更しました。

    void EndDraw()
    {
        Rectangle sourceRectangle = new Rectangle(0, 0, ClientSize.Width * 2, ClientSize.Height * 2);
        Rectangle destinationRectangle = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height);
        GraphicsDevice.Present(sourceRectangle, destinationRectangle, this.Handle);
    }

しかし、それは適切に機能しませんでした。画面にレンダリングされたオブジェクトは、ウィンドウの 1/4 に追いやられ、クリップされました。少しギザギザが少なく見えましたが...

したがって、この時点で、この方法 (ウィンドウ内の XNA コントロール) を使用して高品質のグラフィックスを取得するために何ができるかわかりません。私は一般的にXNAにはかなり慣れていないので、どんな提案でも最も役に立ちます。

ありがとう

4

3 に答える 3

5

そのコード サンプルをダウンロードして、PresentationParameters が設定されている場所を確認しました。これらは、変更する必要があるものです。

GraphicsDeviceService クラスにあります。

このクラスのコンストラクターでは、「parameters」というオブジェクト、PresentationParamters オブジェクトを設定しています。new の後、パラメータを graphicsDevice に渡す前に、次の行を追加します。

parameters.MultiSampleCount = 10;

私が恣意的に選んだその値。健全なアンチエイリアシングを提供します。この数値が正確に何であるかを理解する必要がある場合は、アンチエイリアシングの詳細をお読みください。アンチエイリアス フィルターを通過した回数です。したがって、パフォーマンスを向上させるために値を下げたり、アンチエイリアシングを強化するために値を上げたりすることができます。

于 2011-09-15T05:53:38.607 に答える
2

設定できる GraphicsDeviceManager のプロパティがいくつかあります。それらがすべて完了していることを確認してください。

graphics = new GraphicsDeviceManager(<A reference to your game class>)
{
  PreferMultiSampling = true,
};

graphics.PreparingDeviceSettings += (s, e) =>
{
  e.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount = 16;
};
于 2011-09-16T13:17:14.740 に答える
0

私はこの正確な問題を抱えていました。XNA グラフィックスデバイス コントロール オブジェクトを Windows フォームで使用している場合、マルチサンプル カウントを設定するだけでは機能しません。初期化部分で GraphicsDeviceService.cs を変更する必要があります。

この初期化を探して、事後ではなく、グラフィックス デバイスの作成時にマルチサンプル カウントを定義できるようにします。

GraphicsDeviceService(IntPtr windowHandle, int width, int height)

{ パラメータ = 新しい PresentationParameters();

        parameters.BackBufferWidth = Math.Max(width, 1);
        parameters.BackBufferHeight = Math.Max(height, 1);
        parameters.BackBufferFormat = SurfaceFormat.Color;
        parameters.DepthStencilFormat = DepthFormat.Depth24;
        parameters.DeviceWindowHandle = windowHandle;
        parameters.PresentationInterval = PresentInterval.Immediate;
        parameters.IsFullScreen = false;
        parameters.MultiSampleCount = 10; //  <--- RIGHT HERE

        graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter,
                                            GraphicsProfile.Reach,
                                            parameters);
    }

それ以外の場所とグラフィックス デバイスは変更を無視します

于 2012-09-27T14:52:25.483 に答える