2

openGl コードのコンパイル中に問題が発生しました。問題は、シーン全体のアンチエイリアシングを実現したいのですが、その方法がわかりません。Nvidia コントロール パネルからフォース アンチエイリアシングを有効にしましたが、それこそが私が本当に得ようとしていたものでした。私はGL_POLYGON_SMOOTHでそれをやっています。明らかに、効率的で見栄えがよくありません。ここに質問があります

1) マルチサンプリングを使用する必要がありますか? 2) パイプラインのどこで openGl がアンチエイリアシングのために色をブレンドしますか? 3) GL_*_SMOOTH とマルチサンプリング以外にどのような選択肢がありますか?

4

2 に答える 2

5

GL_POLYGON_SMOOTH はフルスクリーン AA (FSAA) を行う方法ではありません。

このコンテキストで「非効率的」とはどういう意味かわかりませんが、メッシュの中央 (三角形のエッジ) でブレンドする傾向があるため、見栄えがよくありません。

さて、FSAAとあなたの質問に関して:

  1. マルチサンプリング (別名 MSAA) は、現在 FSAA を行うための標準的な方法です。通常の代替手段は、より高い解像度でレンダリングし、最後にダウンサンプリングするスーパーサンプリング (SSAA) です。それははるかに高価です。
  2. 仕様によると、論理的には、GL はサンプル バッファー (ピクセル バッファーのサイズの 4 倍、4xMSAA の場合) とピクセル バッファー (合計 5 倍のメモリ) を保持し、サンプル バッファーへのサンプル書き込みごとに更新します。サンプル バッファ内の現在の 4 つのサンプルから解決された値を持つピクセル バッファ(ちなみに、これはブレンディングとは呼ばれません。ブレンディングは、サンプル バッファへの書き込み時に発生するものであり、glBlendFuncら)。ただし、実際には、これはハードウェアでは発生しません。通常、サンプル バッファにのみ書き込みます (通常、ハードウェアはデータを圧縮しようとします)。それを使用するときが来ると、GL 実装は、使用が発生する前に完全なバッファを一度に解決します。これは、実際にサンプル バッファーを直接使用する場合にも役立ちます (解決する必要はまったくありません)。
  3. SSAA とそのコストについて説明しました。最新の技術は、Morphological anti-aliasing (MLAA) と呼ばれ、活発に研究されています。アイデアは、完全にレンダリングされた画像に対して後処理パスを実行し、鋭いエッジのように見えるものにアンチエイリアスを適用することです。要するに、これは GL 自体によって実装されていないため、後処理パスとしてコーディングする必要があります。参考までに載せておきますが、結構な値段がします。
于 2010-08-10T07:38:59.327 に答える
3

これについての投稿をここに書きました: OpenGL で滑らかで大きなポイントを取得する

ピクセル形式またはビジュアルを選択する場合、OpenGL コンテキストを作成する前に、WGL_SAMPLE_BUFFERS および WGL_SAMPLES (または XOrg/GLX の場合は GLX プレフィックス) を指定する必要があります。

Windows では、 GDI/GDI+ からwglChoosePixelFormatARB()ではなく、拡張された特性を持つピクセル形式が必要な場合は必ず使用してください。ChoosePixelFormat()wglChoosePixelFormatARB は、ICD ドライバーから wglGetProcAddress を使用してクエリする必要があるため、事前にダミーの OpenGL コンテキストを作成する必要があります。WGL 関数ポインターは、OpenGL コンテキストが破棄された後でも有効です。

WGL_SAMPLE_BUFFERS は、マルチサンプリングを切り替えるブール値 (1 または 0) です。WGL_SAMPLES は、必要なバッファーの数です。通常は 2、4、または 8 です。

于 2010-08-11T14:25:25.300 に答える