3

2D 空間のポイントを表す 2D VBO オブジェクトがあります。その時点で任意の形状を描く最良の方法は何ですか? それぞれに赤い「X」を描きたいとしましょう。

これを行うためにシェーダーを使用できますか?

4

1 に答える 1

1

そのために必ずしも特別なシェーダーは必要ありません。ポイント スプライトを使用するだけでかまいません。これは基本的に、VBO をポイント セットとして描画し ( を使用glDrawArrays(GL_POINTS, ...))、ポイント スプライトが各ポイントの位置に (「X」のテクスチャを使用して) テクスチャ付きの正方形を描画できるようにすることを意味します。 .

各ポイントの位置で実際にジオメトリを生成するには、ジオメトリ シェーダーを使用できます。このようにして、VBO をポイント セットとしてレンダリングし、ジオメトリ シェーダー内の各ポイントに対して 2 つの線 (「X」) または任意のジオメトリを生成します。

ジオメトリ シェーダの代わりに、インスタンス化された配列があります (ジオメトリ シェーダに必要な同じ GL3/DX10 ハードウェアが必要です)。このようにして、'X' 形状の複数のインスタンスを描画し、インスタンスごとに 1 回インデックスを進めるアトリビュートを使用して、ポイント VBO からインスタンスの個々の位置を取得します。

最後の代替手段は、シェイプのジオメトリを CPU で手動で生成することです。これにより、すべての「X」をラインまたはスプライトなどとして含むライン セットまたはクワッド セットになります。

しかし、最も簡単な(そしておそらく最速の、それについてはわからない)方法は、最初に言及されたポイントスプライトアプローチである必要があります.とりあえず。この方法では、CPU でジオメトリを自分で生成する必要も、特別なシェーダーや GL3/DX10 ハードウェアも必要ありません (これは最近では非常に一般的ですが)。必要なのは、シェイプのテクスチャとポイント スプライトを有効にすることだけです (これは GL 1.5 以降のコアである必要があります)。

これらすべての一般的なアイデアから何もわからない場合は、OpenGL とリアルタイム コンピュータ グラフィックス全般についてもう少し詳しく調べてみてください。

于 2011-09-26T21:03:46.857 に答える