グローシェーディング(代わりに、風水着色)を達成するようにしてください。あなたは正しいことを行う場合には、光のキューブは少し奇妙に見える必要があり、それは奇妙なように見える理由は、推理をしてみてください
1 // 頂点シェーダ: 2 // ================ 3 #version 330 コア 4レイアウト(位置= 0)におけるvec3の4'- 5レイアウト(位置= 1)にvec3対法線。 6 7 アウト vec3 LightingColor。// 照明計算から色を得 8 9 均一vec3のlightPos。 10 均一vec3のviewPos。 11 lightColor vec3均一。 12 13 一様MAT4モデル。 14 均一MAT4図。 15 均一MAT4投影; 16 17 ボイドメイン() 18 { 19 gl_Position =投影*ビュー*モデル* vec4(APOS、1.0 )。 20 21 // グローシェーディング 22 // ------------------------ 23 vec3位置= vec3(モデル* vec4(APOS、1.0 ))。 24 vec3ノーマル= MAT3(転置(逆(モデル)))* 対法線。 25 26 // 周囲 27 フロート ambientStrength = 0.1 。 28 vec3周囲= ambientStrength *明色; 29 30 // 拡散 31 vec3ノルム= 正規化(標準)。 32 vec3 lightDir =ノーマライズ(lightPos - ポジション)。 33 フロートのdiff = MAX(ドット(ノルム、lightDir)、0.0 )。 34 vec3びまん=差分* lightColor。 35 36 // 鏡面 37 フロート specularStrength = 1.0。// これは、より良好なグローシェーディングの影響を示すために高く設定されている 38 vec3 VIEWDIR =ノーマライズ(viewPos - 位置)。 39 vec3 reflectDir =反映( - lightDir、ノルム)。 40 フロートスペック= POW(MAX(ドット(VIEWDIR、reflectDir)、0.0)、32 )。 41 vec3鏡面= specularStrength *スペック* lightColor。 42 43 LightingColor =周囲+拡散+ 鏡面。 44 } 45 46 47 // フラグメントシェーダ: 48 // ================ 49 #version 330 コア 50 アウトvec4 FragColor。 51 52 でvec3 LightingColor。 53 54 objectColor vec3均一。 55 56 ボイドメイン() 57 { 58 FragColor = vec4(LightingColor * objectColor、1.0 )。 59 } 60 61 62 / * 63 だから我々は何を見ていますか? 64 あなたは目の前に2つの三角形の明確な区別(自分のためか、提供された画像で)見ることができる 65 の立方体。この「ストライプ」ためフラグメント補間見えます。例の画像から、我々は右上ていることがわかります 66 キューブの前面の頂点が鏡面ハイライトで点灯されます。右下の三角形の右上の頂点があるので、 67 点灯三角形の他の2つの頂点は他の2つの頂点に、明るい値補間ではありません。同じ 68は 左上の三角形について起こります。中間体断片の色は、光源から直接ではないので、 69 が、補間の結果であり、照明は中間フラグメントおよび左上とで誤っている 70 の両方の間に目に見えるストライプをもたらすそれらの輝度の右下の三角形の衝突三角形。 71 72 、より複雑な形状を使用している場合、この効果がより明らかになるであろう。 73 * /
説明:頂点シェーダの最終的なカラー値がちょうど頂点カラー値であり、得られた断片から補間されたカラー値は、カラーの光です。その結果、光は、頂点の数が多い場合を除き、非常に現実的ではないようですということです。
2019 // 11月30日