テレインでハード エッジを取得するにはどうすればよいですか? GLSL にシンプルなアンビエント シェーダーとディフューズ シェーダーがあります。フラグメントシェーダーが頂点法線を補間して滑らかなシェーディングを起こしていると思います。私のコードが必要ですか、それとも有効にできる設定がありますか?
ハードエッジのない現在の地形: http://twirlbound.com/uploads/terain.png
テレインでハード エッジを取得するにはどうすればよいですか? GLSL にシンプルなアンビエント シェーダーとディフューズ シェーダーがあります。フラグメントシェーダーが頂点法線を補間して滑らかなシェーディングを起こしていると思います。私のコードが必要ですか、それとも有効にできる設定がありますか?
ハードエッジのない現在の地形: http://twirlbound.com/uploads/terain.png
頂点シェーダーで、次のようにします。
flat out vec3 v_normal;
フラグメント シェーダーでは、次のようになります。
flat in vec3 v_normal;
flat
三角形のラスタライズされたすべてのフラグメントに同じ値を与えるように GL に指示します。どの頂点の法線が使用されるかは、 を呼び出して設定された現在の「誘発頂点」に依存しglProvokingVertex
ます。
求めているようなハード エッジを取得するには、三角形の方向に垂直な三角形ごとの法線を指定する必要があります。このためには、それらを三角形として送信する必要があります。
フラット シェーディングを取得するには、描画ルーチンの前に次の設定も行う必要があります。
glEnable(GL_FLAT);
glShadeModel(GL_FLAT);
でシェーディングをスムーズに戻すことができます
glEnable(GL_SMOOTH);
glShadeModel(GL_SMOOTH);