13: な
Examples
f_Lambertian = max( 0.0, dot( N, L )
Nはのベクトルであり、 Lはにかうベクトルである。
い
に、2つのベクトルのドットは、ベクトルのきさなさをじ2つのベクトルののにしいです。
dot( A, B ) == length( A ) * length( B ) * cos( angle_A_B )
これは、ベクトルのさが1であるため、2つのベクトルのは、2つのベクトルののにしいとすると
、の。
uA = normalize( A ) uB = normalize( B )
cos( angle_A_B ) == dot( uA, uB )
-90°と90°ののcosxをると、0°ので1、90°ので0になることがわかります-90°である。
このるいは、リフレクション・モデルになものとまったくじです。ののvetorとへのdiretionがじに あるときそののは0°です、々はのをめます。に、されたベクトルそののが90°であるは、のがで
あり、0と90の2つののでらかでながです。
がごとにされる、はプリミティブのコーナーにしてされます。プリミティブので、はそのにって される。のをする
さて、フラグメントシェーダをいめるには、4つのがです。
バッファにあり、ポインタによってされる
•
フラグメントシェーダからフラグメントシェーダにするがあります
•
の•
るい•
in vec3 normal;
in vec3 fragPos;
out vec3 finalColor;
uniform vec3 lightColor;
uniform vec3 lightPos;
uniform vec3 objColor;
メインのはをするがあるです。のは、ととののにづいている。がきくなればなるほど、がくない 90°までのがなくなります。
のをするに、のベクトルがです。これは、のからフラグメントのをすベクトルをすフラグメント のからライトのをするだけでできます。
vec3 lightDir = lightPos-fragPos;
また、 normalとlightDirベクトルをして、じさになるようにしてください。
normal = normalize(normal);
lightDir = normalize(lightDir);
ベクトルがあるので、ベクトルのをすることができます。これをうには、ドットプロダクトをし ます。に、これは2つのベクトルをとり、されたのcosをします。これはです。なぜなら、90では 0がられ、0では1がられるからです。その、がオブジェクトをしているときには、にされ、その もあります。
float diff = dot(normal, lightDir);
されたにもうやらなければならないことがもうつあります。にのであることをするがあります。
それについてえると、がのろにあることをするので、のはをなさない。 ifをうか、2つのをす
max()をうことができます。
diff = max(diff, 0.0);
これで、フラグメントのカラーをするがいました。
vec3 diffuse = diff * lightColor;
finalColor = diffuse * objColor;
これはのようになります。
プログレッシヴでし、でチェックしてください。
された
ですが、でしてください。
のコードとは、これらの3つのをみわせてしています。
オンラインでなをむ https://riptutorial.com/ja/opengl/topic/4209/な