曲線形状のハードウェアアクセラレーションによる描画


11

曲線形状をすばやく描画する方法は?

  • 「すばやく」私は、ハードウェア機能をできるだけ使用するべきだと思います

  • 「湾曲した」とは、二次または三次ベジェ曲線のいずれかによって定義された境界を意味します

  • 「形状」とは、「太い」ストローク(つまり、幅1px以上)または偶数/奇数/ゼロ以外の塗りつぶされた「2D湾曲ポリゴン」のいずれかで、おそらく穴がある(つまり、文字「O」)

私が知っているオプションにはいくつかの欠点があるので、私は尋ねています:

  • 形状を三角形化してOpenGLに送信する-CPUで最も困難な作業を行い、使用する三角形が少なすぎる(つまり、もったいない/粗い)

  • テクスチャアトラス-すべての変更(形状、スケール、回転など)でテクスチャを再計算/アップロードする必要があります

  • 符号付き距離フィールド-大規模では、詳細がきれいに見えないか、テクスチャを再計算/アップロードする必要があります

  • NV_path_rendering-それがNvidiaのカードでのみ機能していなかった場合、それである可能性があります

  • OpenVG-それがモバイルでのみ機能していなかった場合、それである可能性があります


*控えめに言っても、OpenVGは正確には前進していないようです。誰かがその将来の見通しについて何か知っていますか?今日から目を離さないのは全然価値があるのでしょうか?

** OpenGL 4+は、ポリゴンのオンザフライテッセレーションの手段を提供します。形状の境界を少なくとも「斜め」に見えないように、「三角形分割」オプションからメッシュをリファインするために何らかの方法で使用できますか?


2
このGPU Gemsの物品は、一見の価値があるかもしれない湾曲している船体の部分を識別し、分析的にピクセルシェーダでのカバレッジを計算することによって、二次曲線をラスタライズ:developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.htmlを
yuriks

2
@yuriksええ、Loop&Blinn、完全に忘れていました。しかし、それは特許を受けていませんか?
Ecir Hana、2015

参照してくださいベクタグラフィックス超並列シーグラフアジア2014で発表され、
LHF

あなたが質問に挙げたオプションとループとブリンの論文の間で、私はあなたがすべての可能性をかなり使い果たしたと思います。
ネイサンリード

ここで説明するように、ラインをテッセレーションできます。または、コンピュートシェーダーで三角形分割することもできます。
nikitablack

回答:


2

OpenGl 4.xテッセレーションシェーダーを使用して、ベジェコントロールポイントをポリゴンに変換できます。

「テッセレーションシェーダーベジエ」をグーグルで検索すると、ベジェサーフェスとカーブのテッセレーションを説明する次のアウトラインが見つかりました。

http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf

これにより、ベジエ評価がCPUからGPUにオフロードされ、バス間のデータフローが減少します。


3
少し詳しく説明するか、さらに詳しく説明するものにリンクするだけで、この回答を改善できます。
Nathan Reed

1
この答えを拡張する1つの方法は、著者が言及する欠点に対処し、あなたのアプローチがそれらにどのように役立つかを説明することです。
trichoplax

0

ハードウェアで曲線描画を行うことができます。これを行う方法を説明するメソッドがGPU Gems 3に記述されています。ユーザー@yuriksが実際にコメントします。私は実際にあなたが見てみるために簡単なデモを行いました。

曲線

画像1:HW加速曲線シェイプ(三角形を使用して描画)とwebglソース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.