3

ポイント スプライトを使用する小さな OpenGL Mac アプリを作成しています。それらを描画するために頂点配列を使用しています。同様の「配列」関数を使用して、すべての異なるサイズを指定したいと考えています。

OpenGL ESには、GL_POINT_SIZE_ARRAY_OESと呼ばれるクライアント状態と、まさに私が望むことを行う対応する関数glPointSizePointerOES()がありますが、標準のOpenGLで同等のものを見つけることができないようです.

OpenGL は何らかの形でこれをサポートしていますか?

4

3 に答える 3

2

Fen の答えを少し拡張すると、固定関数の OpenGL パイプラインは、まさにあなたが望むことを行うことができません。Z距離が大きくなるにつれて小さくなる「遠近」ポイントを実行できますが、それだけです。

各頂点の任意のポイント サイズについては、それぞれのサイズを設定するカスタム頂点シェーダーが必要です。ポイント サイズを属性配列 (サーフェス法線または tex 座標を再利用するか、独自の属性インデックスを使用) として渡すか、テクスチャ マップ (ポイント配列のサイズに等しい幅の 1D テクスチャなど) で渡します。Fen が参照しているシェーダー コードの例では、テクスチャ マップ手法を使用しています。

于 2013-03-30T09:29:38.003 に答える
2

「OpenGL はこれをサポートしていますか」とは、「OpenGL でそのようなことを行うことはできますか」という意味です。

シェーダーを使用します。ポイント サイズを表す 1 次元の汎用頂点属性を渡します。そして、頂点シェーダーで、そのポイント サイズをgl_PointSize頂点シェーダーからの出力として設定します。それは本当にとても簡単です。

「固定機能の OpenGL はこれをサポートしていますか」という意味であれば、いいえ。

于 2013-03-30T10:22:17.130 に答える