1

これを見てください: http://imgur.com/a/S8eOC

問題:

グリッドは霧なしで完全にきれいに描画されます。フォグを有効にすると、縦線が消えます。次に、少し左に回転すると、すべての線が見えなくなります。もっと回転していたら、完全に消えていたでしょう。見る角度にもよるみたいです。照明に問題があるのではないかと思いましたが、それをオフにしても結果は同じでした。

霧の種類も変えてみましたが結果は同じでした。真下 (グリッド面に対して 90 度の角度) を見ると、すべてのグリッド線がはっきりと見えます。

この行動の子犬は何ですか?修正できますか?

コードは非常に基本的なものですが、重要な場合に備えて以下に示します。

主要():

glEnable(GL_FOG);
glHint(GL_FOG_HINT, GL_NICEST);

renderScene():

float fogColor[3] = {0.8f, 0.8f, 0.8f};
glFogfv(GL_FOG_COLOR, fogColor);
glFogi(GL_FOG_MODE, GL_EXP2);
glFogf(GL_FOG_DENSITY, 0.01f);
4

1 に答える 1

3

線の描画方法については詳しくわかりませんが、グリッド上の水平線と垂直線ごとに 1 本の線を描いていると仮定します。フォグ方程式は頂点のみで評価されるため、唯一の頂点が線の端にある場合は、見ているような奇妙なアーティファクトが発生します。

これを解決する主な方法は、より多くの頂点を導入することです。すべての交点に頂点を作成し、それぞれを接続してグリッドを作成します。これにより、より多くの線と頂点が生成されますが、正しい動作が得られます。

エイリアシングの概念を説明するために、以下でさらに詳しく説明します。

頂点で評価された値 (頂点の色、法線、テクスチャ座標など) は、それらの間の三角形/線をカバーするために線形に補間されることに注意してください。画面の中央のピクセルを明るくし、端のピクセルを暗くしたい場合を想像してください。(厳密に理論的なケースですが、説明には役立ちます)。一方の端から中央を通り、もう一方の端まで線を引くとします。各エッジに 1 つずつ、2 つの頂点でのみこれを行うとします。次に、これら両方の頂点の明るさを計算して暗くします。次に、線を描画するために、OpenGL は暗と暗の間を補間して線の色を決定します。中央が明るくなければならないことをラインが認識する方法はありません。

したがって、中心に頂点を追加すると、中心が明るいと計算されます。追加する頂点が多いほど、明るさはより正確になります。

頑張って楽しんでね。:)

于 2011-03-26T01:45:42.707 に答える