2011-09-15 3 views
0

私は私が書いているアプリケーションでこの例のプロジェクトのXNA 4.0フォームコントロールを使用しています: http://creators.xna.com/en-US/sample/winforms_series1エッジのギザギザのあるウィンドウでXNA 4.0問題が発生する...高品質の出力方法を知っていますか?

をそれは素晴らしい働いていると私はビジュアルとアニメーションでかなりやりました。私が頭を悩ましている主な問題は3Dモデルであり、レンダリングするプリミティブな3Dシェイプ(テッセレーションが30の円柱)は、低解像度であるかのように非常にギザギザのエッジがあります。

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

GraphicsDeviceService()コンストラクタ内にPresentationParametersオブジェクトが作成されていますが、使用できるプロパティはinteger型のparameters.MultiSampleCountだけです。私は何の効果もなく設定してみました。

は私も二回、コントロールのサイズ(GraphicsDeviceService.cs)と同じ大きさのバックバッファを作成しようとしました:

 
    GraphicsDeviceService(IntPtr windowHandle, int width, int height) 
    { 
     parameters.BackBufferWidth = width * 2; 
     parameters.BackBufferHeight = height * 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の新機能ですから、どんな提案も最も役立ちます。

おかげ

答えて

5

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

GraphicsDeviceServiceクラスにあります。

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

parameters.MultiSampleCount = 10; 

その値Iは、任意に選びました。これは、健全なアンチエイリアシングを提供します。この番号が正確であることを理解する必要がある場合は、アンチエイリアスの詳細をお読みください。これは、アンチエイリアスフィルタを通過する回数です。だから、より良いパフォーマンスのためにそれを下げたり、より多くのアンチエイリアスのためにそれを上げたいかもしれません。

+2

変更を無視します、あなたはすでにMultiSampleCountを試みたようです。また、多くの異なる値を試したことがないようです。より高い値で試してください。私にとっては、1-2のギザギザのエッジを確実に見ることができます.10にするとエッジが非常にスムーズになります。私はシリンダー、SpaceShipなどのコードサンプルに付属のデフォルトモデルでこれをテストしました –

+0

また、私は質問を意味しました!神様、私は疲れました、申し訳ありません。 –

+0

私はあなたの助けに感謝します。私の場合は効果がないようです。多分私が使用しているラップトップは不可能なのでしょうか? (インテルの統合グラフィックスを搭載)。完全にハードウェアに依存する場合は、別の方法を探す必要があります。 – Scott

2

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

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

graphics.PreparingDeviceSettings += (s, e) => 
{ 
    e.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount = 16; 
}; 
+1

ゲームクラスはウィンドウで利用できませんフォームメソッド。 – Scott

0

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

この初期化を調べて、グラフィックスデバイスの作成時にマルチサンプル数を定義することができます。

GraphicsDeviceService(のIntPtr windowHandle、INT幅、INT高さ)

{パラメータ=新しい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); 
    } 
どこでも他

とグラフィックスデバイスは、私は完全にあなたの答えを読んでいないためすみません

関連する問題