私のJavaアプリケーションは、joglを使ってオーバーレイされたグリッドを持つサーフェスを作成します。グリッドの線はアンチエイリアス処理されています。しかし、Windows上では、小さなアルファ値をサーフェスに追加しない限り、アンチエイリアスは完全なゴミです。Windows 7でjoglを使用したアンチエイリアス処理された線はひどく見えます
のMac OS X:
Ubuntuの11.10:
のWindows 7:ここでは3つのすべてのプラットフォームで同じシーンのスクリーンショットがある
アルファとののWindows 7 = 0.01:
次のようにこれを作成するための基本的な手順がある:
gl.glPushAttrib(GL.GL_ALL_ATTRIB_BITS);
gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f);
drawSurface(gl);
gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPopAttrib();
gl.glDisable(GL.GL_LIGHTING);
gl.glDepthFunc(GL.GL_LEQUAL);
float[] c = {0, 0, 0, 0.5f};
gl.glColor4fv(c, 0);//the alpha here gets overridden if one is specified for the surface (which is why the Windows-with-alpha produces a darker grid)
drawGrid(gl);
gl.glDepthFunc(GL.GL_LESS);
gl.glEnable(GL.GL_LIGHTING);
drawSurface()メソッドもためのポリゴンを作成する前に次の処理を実行し(GL_TRIANGLE_STRIPプリミティブを使用して)表面:
gl.glPushAttrib(GL.GL_LIGHTING_BIT);
gl.glColorMaterial(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE);
gl.glEnable(GL.GL_COLOR_MATERIAL);
drawGrid()メソッドは次のようにアンチエイリアシングを設定しますそう:
gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL.GL_LINE_SMOOTH);
gl.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST);
グリッド自体はGL_LINE_STRIPs
私はOpenGL documentation regarding line anti-aliasing上に読んでもポリゴンを例hereオフセット試してみましたを使用して作成されます。
ハードウェアに関しては、nVidia 3100MカードとIntel Core 2 Duo iMac(ATI Radeon内蔵)を搭載したデュアルブートIBM ThinkPad(64ビットクアッドコア)を使用しています。 UbuntuとWindowsは同じハードウェア上で動作しているので、ハードウェアの問題ではないことはわかっています。
Windowsのグリッド線のアンチエイリアスを改善するための提案を探しています。
表面を少し上に描こうとしましたか?私はあなたが 'gl.glDepthFunc(GL.GL_LEQUAL)'に切り替わったことに気が付きましたが、FP丸めのためにzバッファリングの問題がある可能性があります。 –
また、あなたがリンクしているOpenGLのドキュメントでは、クリップをクリップしたい場合でも、ラインを描いている間に深さバッファに**書き込み**を無効にすることを提案しています( 'glDepthMask_FALSE(GL_FALSE)')。 –
@RussellZahniser:私はそれを達成するためにGL_POLYGON_OFFSET_FILLを使用しています。 – javagrendel