過去数か月間、私は WebGL に手を出していました。greggman によるWebGL Fundamentalsでは、使い慣れたピクセル空間を作成する手順を順を追って説明しています。(0, 0)
は左上隅で、行列は拡大縮小、回転、移動などを可能にします。これについて考えさせられたことの 1 つは、gl コンテキストで2 次元の単純な多角形canvas2d
を作成することですsvg
。
これを行うために、さまざまなリソースをオンラインでまとめて、ブラウザーでレンダリングされる点の配列を三角測量しました。ポイントの配列は次のようになります。
- Catmull Rom 曲線計算は、点の配列を取り、各点にハンドル座標
u, v
プロパティを追加します。 - 肉眼ではカーブしているように見えながら、カーブを直線セグメントに分割するアダプティブ サブディビジョン。
- ループのある形状をチェックして個別の単純なポリゴンに分離するための線分交差。
- 最後に、分割された各シェイプにテッセレーションが適用されます。三角形の最終的な配列が返され、WebGL によってレンダリングされます。
これらの操作の実際の例は、ここにあります。(WebGL対応ブラウザが必要)
svg
との同じ例canvas2d
。
現在、これはすべて JavaScript で行われており、「見た目も音も非常に高価だ」というあなたの考えに同意します。そのため、更新ループで頂点を変更すると、またはrequestAnimationFrame
よりもはるかに遅くなります。これは、効率的なアルゴリズムを書き写す私の能力と関係があります。しかし、それは、私が低レベルで概説した同様の一連のアルゴリズムを作成することによって、アフォーダンスとパフォーマンスの向上を実現するブラウザー ベンダーの能力に関係しているに違いありません。canvas2d
svg
私の質問は、ブラウザ ベンダーがレンダリングに使用し、開発者が使用できるように公開する方法はありcanvas2d
ますsvg
か?
ナイーブに聞こえるかもしれませんが、それはおそらくナイーブだからです。しかし、WebGL が Web 開発者向けのよりネイティブなアクセスと制御のサンプル API である場合、WebGL と連携する他のメソッドが利用できないのはなぜでしょうか?