たくさんのポイントを描くときにポイントサイズを変える方法はありますか?glPointSize(float)があることは知っていますが、「バッチ」または配列でそれを行う方法はありますか?
データの属性に基づいて、ポイントのサイズを変えてほしい。x、y、z、およびサイズ属性を持つ各ポイントなど。現在、Javaでフレームバッファを使用しています。
これに頂点シェーダーを使用できますか?
ポイントスプライトを使用できます。を使用して有効にすると、頂点プログラムで属性をglEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
使用できます。gl_PointSize
OpenGLディスカッションスレッドから取得した頂点シェーダーの例:
void main() {
gl_FrontColor=gl_Color;
gl_PointSize = gl_Normal.x;
gl_Position = ftransform();
}
これは私が今までにしたことでした、
//reset
glLoadIdentity();
//set size to 1 for a group of points
glPointSize(1);
//group #1 starts here
glBegin(GL_POINTS);
//color of group #1 is white
glColor3f(1,1,1);
for(int a=0; a<x; a++)
for(int b=0; b<y; b++)
glVertex3f(a/953.,-b/413.,0.); //location of points
glEnd();
//set size to 5 for another group of points
glPointSize(5);
//group #2 starts here
glBegin(GL_POINTS);
//color of group #2 is red
glColor3f(1,0,0);
for(unsigned long int a=0; a<jd; a++)
{
glVertex3f(data[a].i,data[a].j,0);
}
glEnd();
glPointSize(GLfloat size)であると思います
ソース:
http://www.talisman.org/opengl-1.1/Reference/glPointSize.html
(GL14?)を使用GL_POINT_DISTANCE_ATTENUATION
すると、Z距離からポイントサイズを計算するための関数(2次式だと思います)の係数を設定できます。
ポイントサイズの増減は複数のピクセルに影響しますが、シェーダーはピクセルごとに1回だけ実行されるようになっています。シェーダープログラムが特定のピクセルに対して実行されると、変更は次のピクセルにのみ影響し、前のピクセルには影響しないため、失敗します。
シェーダープログラムは、多くのシェーダーユニットで同時に実行され、多くのピクセルに対して並行して実行されるため、実行しようとしていることを実行できません。制限は、シェーダープログラムでピクセルサイズを設定できることですが、シェーダープログラムが実行されるすべてのピクセルのサイズを維持します。
ポイントデータをサイズで並べ替え、同じサイズのポイントを1つの配列にグループ化し、各配列を異なるポイントサイズで描画することができます。
または、最初にさまざまなポイントサイズをテクスチャにレンダリングし、2番目のパスでテクスチャデータにアクセスし、それを使用してピクセルをレンダリングする必要があるかどうかをテストすることで、ピクセルをレンダリングする間接参照を試してみることができます。