12

たくさんのポイントを描くときにポイントサイズを変える方法はありますか?glPointSize(float)があることは知っていますが、「バッチ」または配列でそれを行う方法はありますか?

データの属性に基づいて、ポイントのサイズを変えてほしい。x、y、z、およびサイズ属性を持つ各ポイントなど。現在、Javaでフレームバッファを使用しています。

これに頂点シェーダーを使用できますか?

4

5 に答える 5

18

ポイントスプライトを使用できます。を使用して有効にすると、頂点プログラムで属性をglEnable(GL_VERTEX_PROGRAM_POINT_SIZE);使用できます。gl_PointSize

OpenGLディスカッションスレッドから取得した頂点シェーダーの例:

void main() {
    gl_FrontColor=gl_Color;
    gl_PointSize = gl_Normal.x;
    gl_Position = ftransform();
} 
于 2011-01-04T18:36:24.407 に答える
3

これは私が今までにしたことでした、

 //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();
于 2013-11-13T09:18:18.570 に答える
1

glPointSize(GLfloat size)であると思います

ソース:

http://www.talisman.org/opengl-1.1/Reference/glPointSize.html

于 2011-01-04T18:35:41.800 に答える
0

(GL14?)を使用GL_POINT_DISTANCE_ATTENUATIONすると、Z距離からポイントサイズを計算するための関数(2次式だと思います)の係数を設定できます。

于 2011-01-04T19:58:40.883 に答える
0

ポイントサイズの増減は複数のピクセルに影響しますが、シェーダーはピクセルごとに1回だけ実行されるようになっています。シェーダープログラムが特定のピクセルに対して実行されると、変更は次のピクセルにのみ影響し、前のピクセルには影響しないため、失敗します。

シェーダープログラムは、多くのシェーダーユニットで同時に実行され、多くのピクセルに対して並行して実行されるため、実行しようとしていることを実行できません。制限は、シェーダープログラムでピクセルサイズを設定できることですが、シェーダープログラムが実行されるすべてのピクセルのサイズを維持します。

ポイントデータをサイズで並べ替え、同じサイズのポイントを1つの配列にグループ化し、各配列を異なるポイントサイズで描画することができます。

または、最初にさまざまなポイントサイズをテクスチャにレンダリングし、2番目のパスでテクスチャデータにアクセスし、それを使用してピクセルをレンダリングする必要があるかどうかをテストすることで、ピクセルをレンダリングする間接参照を試してみることができます。

于 2014-07-21T18:07:26.030 に答える