2017-01-23 36 views
0

OpenGL ES2.0で線の点描(破線/点線)を実装しようとしていて、このトピックについて多くのスレッドが見つかりました。しかし、例はありませんでした。誰かがこれを前にやっていて、実装に手伝ってもらえますか?OpenGL ESで線を点描する

答えて

1

存在のOpenGL ESに点描線には直接サポートされないので、一般的なアプローチは、次のとおり

  • は、複数の別個のラインセグメントをレンダリングし、点描パターンの一つの固体部分をレンダリングする各セグメントは。
  • 2つの三角形でできた細い四角形をレンダリングし、透明なテクスチャを使用して線の点描効果を適用します。

パフォーマンス上の観点からは、画面にかなりの数の行がある場合は後者をお勧めします。

+0

私は後者の方が線の太さとアンチエイリアスをよりよく制御できると思います。 – Columbo

+0

私は円のようないくつかの異なる要素を持っているので、私の問題のために非常に重くて非常に困難な最初の接近を理解しています。しかし、私は第二の近道を理解していない。例がありますか? –

+0

http://korkd.com/2012/02/15/dashed-lines/ –

0

オプション3は、solidpixelによって指定されたものを超えて、テクスチャ線を使用することです。ラインのフラグメントシェーダは、他のフラグメントシェーダと同様に変化を受け取り、テクスチャをサンプリングすることができます。したがって、さまざまなテクスチャ座標をx = 0からx = k * (length of line)まで入力し、テクスチャをサンプリングしてフラグメントカラーを生成します。

OpenGLで線を描画するときの動作は、四角形を描画するときの動作と異なります。対角線上の細い四角形は、フラグメント中心を欠くことがありますが、線は常にフラグメントの連続コレクションを描画します。

だから、それをあらかじめ計算してそれを調べることと比較して、飛行中に点描を計算することは多かれ少なかれです。あなたが固体ピクセルの支持者としてそれを計算することができるなら、より少ない帯域幅を消費するので、それはおそらく望ましいです。

+0

このオプションは単純な行で使用できます。しかし、私は2つの線を点描しようとすると(3つの位置の頂点を渡すことによって)、テクスチャリングは最初の線に関連しているので機能しません。 2番目の行には点描パターンがありません。 –

+0

私は、各点でのテクスチャ座標が、その点までのストリップ内のすべての線に沿った合計距離から計算される限り、それは良いと思います。したがって、ジオメトリを生成する際には累積合計を維持してください。 – Tommy

関連する問題