• 検索結果がありません。

フォングライティングモデル

ドキュメント内 opengl #opengl (ページ 95-101)

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/な

ドキュメント内 opengl #opengl (ページ 95-101)

関連したドキュメント