問題タブ [multisampling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - SDL マルチサンプリング
マルチサンプリングを使用して SDL FSAA を動作させようとしましたが、動作しません。
私は簡単なことから始めました:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2);
しかし、関連する get を実行すると、バッファーの場合は 0 が返され、サンプルの場合は 1 が返されます。(SetVideo の前後の両方)。
GeForce 280M の両方で試してみましたが、モバイルの問題ではないかと疑って、580 でも試してみましたが、うまくいきませんでした。
最新のドライバーで Windows 7 を実行しています。
NVidia コントロール パネルで FSAA を強制的にオンにすると、うまく機能しますが、アプリケーションでそれを有効にすることができないようです。
何か案は?
opengl - マルチサンプリングされた FBO 深度/ステンシルおよび OpenGL 仕様
OpenGL 4.2 仕様 (セクション 3.3.1) には、次のことが明確に記載されています。
各サンプルには色、深さ、およびステンシル情報が含まれているため、色 (テクスチャ操作を含む)、深さ、およびステンシル関数は、単一サンプル モードと同等に実行されます。 マルチサンプル バッファと呼ばれる追加バッファがフレームバッファに追加されます。 色、深度、ステンシル値などのピクセル サンプル値は、このバッファーに格納されます。サンプルには、フラグメントの色ごとに個別の色の値が含まれています。 フレームバッファにマルチサンプル バッファが含まれている場合、マルチサンプル バッファに深度またはステンシル値が格納されていなくても、深度またはステンシル バッファは含まれません。ただし、カラー バッファはマルチサンプル バッファと共存します。
ただし、深度/ステンシル テストが必要な場合は、depth_stencil マルチサンプリング レンダー バッファーをセットアップする必要があります。
これは仕様に反しますか、それとも何か不足していますか?
opengl - GLSL330のマルチサンプリングおよびフラグメントシェーダー
マルチサンプルレンダリング中にフラグメントシェーダーがどのように呼び出されるかを理解しようとしています。仕様を注意深く読みましたが、少し混乱しています。
色とデプス/ステンシルレンダーバッファを使用してマルチサンプルFBOをセットアップします。
変換専用の単純な1行の頂点シェーダーと、黒色を返す別の1行のフラグメントシェーダーをセットアップしました。
線を引きます-線は滑らかに表示されます..細かい
ここで、フラグメントシェーダーで、ぼんやりと黒い色を返す代わりに、マルチサンプルテクスチャからtexelFetchを実行し、常にサンプル番号0(つまり、黒)を読み取ると、ギザギザの線が表示されます。
シンプルmyoutcolor=vec4(0.0)
と?の違いはmyoutcolor=texelFetch(mysampler2DMS,...,0)
何ですか?
仕様では、フラグメントシェーダーは、静的に、、、gl_SampleID
またはgl_Samplemask[]
「サンプル」ストレージ修飾子を使用する場合にのみサンプルレベルで実行されると規定されています(これらすべての場合、これはGLSL#version 400
以上を意味します)。それ以外の場合は、フラグメントレベルで実行されます。 。
しかし、どうしてそれができるのでしょうか?上記の例では、常に同じ色を返しても滑らかな線が得られたので、フラグメントシェーダーは常にマルチサンプルフレームバッファーのサンプルレベルで実行されると考えました。一方、そうでない場合は、 MSテクスチャから常に同じサンプルを返す場合でも、スムーズな結果が得られるはずです。
誰かが私がこれを理解するのを手伝ってくれる?
PS:現在#version 330を使用していますが、MS(、、 sample ..)を正しく処理する必要があるすべてのマルチサンプリング対応ステートメントgl_SampleID
はgl_Samplemask[]
GLSL 400以降でのみサポートされていることがわかりました。したがって、GLSL330が提供するサポートは正確には何ですか。マルチサンプリングを正しく処理するために?GLSL 330でMSテクスチャを処理するにはどうすればよいですか?
opengl - マルチサンプルは実際にどのように機能しますか?
マルチサンプリングがどのように機能するかを理解することに非常に興味があります。私はそれを有効にする方法や使用する方法について多くの文献を見つけましたが、アンチエイリアスレンダリングを実現するためにそれが実際に何をするかについての情報はほとんどありません。私が見つけたのは、多くの場所で、私をさらに混乱させるだけの矛盾する情報です。
マルチサンプリングを有効にして使用する方法(実際にはすでに使用しています)、マルチサンプリングされたレンダーバッファ/テクスチャに実際にどのような種類のデータが入るのか、そしてこのデータがレンダリングパイプラインでどのように使用されるのかを知っていることに注意してください。
スーパーサンプリングがどのように機能するかはよく理解できますが、マルチサンプリングにはまだ理解したいいくつかのあいまいな領域があります。
仕様の内容は次のとおりです:(OpenGL 4.2)
色、深度、ステンシル値などのピクセルサンプル値は、このバッファー(マルチサンプルバッファー)に保存されます。サンプルには、フラグメントの色ごとに個別の色の値が含まれています。
..。
マルチサンプルレンダリング中に、ピクセルフラグメントの内容が2つの方法で変更されます。まず、各フラグメントには、SAMPLESビットのカバレッジ値が含まれています。
..。
次に、各フラグメントには、単一サンプルレンダリングモードで維持される単一の深度値と関連データのセットではなく、SAMPLES深度値と関連データのセットが含まれます。
したがって、各サンプルには、異なる色、カバレッジビット、および深さが含まれています。通常のスーパーサンプリングとの違いは何ですか?私には「加重」スーパーサンプリングのように見えます。各最終ピクセル値は、単純な平均ではなく、サンプルのカバレッジ値によって決定されますが、これについては非常によくわかりません。そして、サンプルレベルでのテクスチャ座標はどうですか?
たとえば、法線をRGBFマルチサンプルテクスチャに保存する場合、ポリゴンのエッジで「アンチエイリアス」(つまり、0に近づく)でそれらを読み戻しますか?
フラグメントシェーダーは、gl_SampleID、glSampleInを使用するか、「サンプル」ストレージ修飾子を持たない限り、フラグメントごとに1回呼び出されます。フラグメントシェーダーをフラグメントごとに1回呼び出して、アンチエイリアスレンダリングを取得するにはどうすればよいですか?
opengl - FBO を使用したマルチサンプリング時に OpenGL がシーンを明るくするのはなぜですか?
OpenGL 描画コードを、ディスプレイへの直接描画から、レンダー バッファーがアタッチされたオフスクリーン FBO の使用に切り替えました。通常のレンダリング バッファ ストレージを割り当てると、オフスクリーン FBO が画面に正しくブリットされます。
ただし、レンダー バッファでマルチサンプリングを有効にすると ( 経由でglRenderbufferStorageMultisample
)、シーン内のすべての色が明るくなったように見えます (したがって、マルチサンプリングされていない部分とは異なる色になります)。
同じ色を維持するために設定する必要があるglEnable
オプションがあると思われますが、この問題についての言及は他に見当たりません。
何か案は?
opengl - 異方性フィルタリングとマルチサンプリング
私はOpenGLSuperbible5thedを読んでいます。私は本で説明されているがまだ私にはそれほど明確ではないいくつかの用語に出くわしました。
1つ目はマルチサンプリングです。ポリゴンを滑らかにし、より良い画像をレンダリングするために使用されることを理解しています。私が理解していないのは、アンチエイリアシングとの違いです。
2つ目は異方性フィルタリングです。このタイプのテクスチャフィルタリングの効果は知っていますが、正確にいつどのように使用されるかを知りたいです。おそらくアルゴリズムの一般的な説明ですか?私はそれをグーグルで検索しましたが、ウィキペディアはあまり説明していません。
opengl - FBO ブリッティングが機能しない
マルチサンプリングされたシーンをテクスチャにレンダリングしようとしています。使用しているコードは次のとおりです。黒い画面が表示されます。init の最後に fbo の完全性をチェックすると、両方の fbo が完了していると報告されます。
私が忘れたものを見つけることができますか?glFramebufferRenderbuffer
問題は通話にあると思います。最初の引数をに切り替えてみましたGL_READ_FRAMEBUFFER
が、修正されませんでした。
確認glGetError
しましたが、エラーはありません。INVALID_ENUM
何か間違った設定をすると、必ず何かが失敗INVALID_OPERATION
し、問題を絞り込むのに役立ちます。
このコードを使用する方法は、マルチサンプリングを有効にするために変更する必要があるのは、描画時に multi_fbo をバインドし、バインドしてブリットする resolve 関数を呼び出すことだけです。その後、私の fbo テクスチャ (直接レンダリングすると正常に動作します) には、マルチサンプリングされたレンダリングが含まれているはずです。ただ、黒いだけです。glEnable(GL_MULTISAMPLE)
また、初期化コードの別の部分も呼び出しました。
マルチサンプリングされていないテクスチャを別のテクスチャにブリットして、それが機能することを確認します。うまくいけば、それは私が失敗した場所を絞り込むのに役立ちます.
更新: したがって、通常の FBO を別の同一の FBO (どちらもカラー アタッチメント 0 にテクスチャがアタッチされています) にコピーすると、同じ黒い画面が生成されることがわかりました。ブリットは単に機能しません。
また奇妙なのは、ブリットしようとすると、SOURCE fbo のテクスチャを描画しても、まだすべて黒のままです。ブリットしようとすると、すべてが台無しになるようなものです。
FBOブリッティングコードを知っている、または持っている人はいますか? 見つけることはできませんが、マルチサンプリング FBO が機能している人がいることは知っています。
支援方法は次のとおりです。任意の時点で呼び出すコードがある場合はglBlitFramebuffer
、その操作を設定するための他の呼び出しを確認したいと思います。起動すると、黒いバッファとテクスチャしか取得できないようです。
更新: バックバッファへのブリットは、マルチサンプリングでも機能します! もちろん、フレームバッファ 0 をバインドするだけなので、セットアップはまったく必要ありません。したがって、問題は、ブリットされるはずのテクスチャ アタッチメントを持つ FBO のセットアップにあるようです。
opengl - マルチサンプリング テクスチャで Framebuffer オブジェクトをレンダリングする方法は?
現在、画像のさまざまな部分がテクスチャでレンダリングされ、シェーダーを使用して結合される複数のパスを使用するレンダリング エンジンがあります。それは機能し、マルチサンプリングを有効にしたいと思います。
ここ ( http://www.opengl.org/wiki/Framebuffer_Object_Examples#MSAA )を読みましたが、OpenGL を使用するGL_TEXTURE2D_MULTISAMPLE
と、フレームバッファー オブジェクトに をアタッチできません。
マルチサンプリングを使用し、テクスチャとして結果にアクセスする方法の 1 つは、マルチサンプリングされたレンダー バッファを使用し、その結果をマルチサンプル テクスチャにコピーすることです。
私の質問は次のとおりです。前進するための最良の方法は何ですか?
- テクスチャにコピーせずに、レンダー バッファーでレンダリングし、シェーダーで出力を使用することは可能ですか?
- 実際にバッファの内容をテクスチャにコピーしてから使用する必要がありますか?
- 別のより良い解決策はありますか?
ありがとう。
python - wxPython OpenGL コンテキストでのマルチサンプリングの有効化
私が書いている OpenGL プログラムでマルチサンプリングを有効にしようとしています。アプリケーションにはかなりの量の GUI が必要になるため、PyGame (SDL) の代わりに wxPython (あまり詳しくない) を使用しています。
メインの GLCanvas にはハードウェア マルチサンプリングが本当に必要です。これは、wx の C++ バージョンでは可能な境界線であることを認識しています。たとえば、wxWidgets OpenGL プログラムのマルチサンプリングを有効にする方法は? . ただし、同様のことを試みましたが、 wx Python では機能しませんでした。
それで、私が知りたいのは、マルチサンプリングは wxPython でも可能ですか?
私がすでに考えているアイデア:
- 代わりに、wx.Frame 内で PyGame コンテキストを使用してください。SDL のハードウェア マルチサンプリングを使用します。これが実際に機能するかどうかはわかりません。IIRC では、SDL OpenGL コンテキストのサイズを変更すると、そのコンテンツが破壊されます。これは、このアプリケーションでは多少問題になります。それでも 。. . 活躍できそうです。
- より高い解像度の FBO を使用してレンダリングしてから、マルチサンプリングでダウンサンプリングします。これ 。. . 動作します。しかし、スーパーサンプリングはマルチサンプリングよりもはるかに遅く、この手法は GL_LINE のようなものにはうまく機能しません。私はすでにこの解決策を試しました。
- マルチサンプリング レンダー ターゲットで FBO を使用します。これには多くの変更が伴い、システム間の移植性が制限されます。
- 理想的には、wxPython の組み込みサポートがあればそれを使用します。
ありがとう、
イアン
ios - マルチサンプリングが機能しないのはなぜですか?
OpenGL ES アプリでマルチサンプリングを機能させようとしています。
フレームバッファのセットアップ コード:
レンダリング コード:
結果:
ご覧のとおり、三角形にはまだエイリアシングされた辺があります。