0

いくつかのラインループを1ピクセル幅に設定しようとしていますが、幅の数値が奇数の場合、常にアンチエイリアス効果が得られます

ここにいくつかのサンプルコードがあります:

                    gl2.glLineWidth(1.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, 0); 
                        gl2.glVertex2i(-10, 10); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(2.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -10); 
                        gl2.glVertex2i(-10, 0); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(3.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -20); 
                        gl2.glVertex2i(-10, -10); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(4.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -30); 
                        gl2.glVertex2i(-10, -20); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(5.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -40); 
                        gl2.glVertex2i(-10, -30); 
                    gl2.glEnd(); 

これを生成します(上から下の順序で):

http://dl.dropbox.com/u/1401029/LineWidth.png

gl2.glIsEnabled(GL2.GL_LINE_SMOOTH)はfalseを返し、gl2.glhintはまったく影響を与えていないようです

何か案は?

4

2 に答える 2

1

ドキュメントによると、JOGL のデフォルトは MSAAx2 です。

setNumSamples(1)初期化時にトリックを実行する必要がありますが、アンチエイリアシングが完全に失われます。glLineWidth をNumSamples必要な値の倍数で呼び出すのはどうですか?

于 2012-05-22T07:44:24.740 に答える
1

OpenGL 仕様が pixel-exact ではないことを明確にする必要がある前に。実際、すべての OpenGL 実装でまったく同じ結果になるふりをすることはできません。

ただし、ほとんど制御可能な入力値では、ポリゴンのラスター化により、さまざまな実装で安定した結果が得られます。

あなたのコメントから、これはモデルビュー/投影マトリックスをセットアップする方法です:

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity(); // map a 2D bild width*height on OpenGL
glu.gluOrtho2D(-width/2, (width+1)/2, -(height+1)/2, height/2);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();

タイプと値はわかりませんがwidthheightビューポートでさえありません...しかし、この答えを出すために、ビューポートwidthxheightがあるwidthと仮定しheightます。に100

実際、この方法で射影行列を設定することをお勧めします。

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity(); // map a 2D bild width*height on OpenGL
glu.gluOrtho2D(-width/2, +width/2, -height/2, height/2);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();

最大限のスケーラビリティを得るには、次のモデル ビュー マトリックス変換を追加することをお勧めします。

gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslate(0.376, 0.376, 0.0);

Java OpenGLバインディングの詳細はわかりませんが、Calvin1602が言ったことにも従いますマルチサンプリングを無効にします)。

于 2012-05-25T19:24:13.513 に答える