編集:ご存じのとおり、私はまだこの問題を完全に解決していません。現在、0.5pxのオフセットを使用していますが、うまくいくようですが、他の人が言ったように、それは「適切な」解決策ではありません. だから私は本当の取引を探しています.ダイヤモンド出口ルールソリューションはまったく機能しませんでした.
おそらくグラフィックカードのバグだと思いますが、もしそうなら、プロのプログラマーなら誰でもこれに対する防弾ソリューションを持っているはずですよね?
編集:新しい nvidia カード (以前は ATI カードを使用していました) を購入しましたが、まだこの問題が発生しています。また、非常に多くのゲームで同じバグが見られます。だから、きれいな方法で修正することは不可能だと思いますか?
バグの画像は次のとおりです。
この問題をどのように克服しますか?可能であれば、非シェーダー ソリューションが望ましいです。ワイヤーフレーム モードを使用する代わりに、自分で 4 本の線を描いたときに最初の線にオフセットを設定しようとしましたが、うまくいきませんでした: 四角形のサイズが変更された場合、完全な四角形に見えることもあれば、修正前よりもさらに悪化することもありました.
これは私がクワッドをレンダリングする方法です:
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_QUADS);
glVertex2f(...);
glVertex2f(...);
glVertex2f(...);
glVertex2f(...);
glEnd();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
はい、頂点配列または VBO を使用できることはわかっていますが、それはここでは重要ではありません。
も試しGL_LINE_LOOP
ましたが、バグは修正されませんでした。
編集:これまでのところ機能する1つのソリューションがあります: Lie RyanによるOpenglピクセルパーフェクト2D描画:
OpenGL 座標空間には整数の概念がないことに注意してください。すべてが float であり、OpenGL ピクセルの「中心」は実際には左上隅ではなく 0.5,0.5 にあります。したがって、0,0 から 10,10 までの 1 ピクセル幅の線が必要な場合は、実際には 0.5,0.5 から 10.5,10.5 までの線を引く必要がありました。
これは、アンチエイリアシングをオンにすると特に顕著になります。アンチエイリアシングがあり、50,0 から 50,100 まで描画しようとすると、線が 2 つのピクセルの間にあるため、2 ピクセル幅のぼやけた線が表示されることがあります。