学习日报 2018.8.20

1.《新东方考研英语》 俞敏洪/乱序版 2015年2月第1版

1个list的单词

2.《c++语言程序设计》郑莉 董渊 何江舟 编著 清华大学出版社 2010年7月第4版

 学习第十章泛型程序设计与c++标准模板库的深度搜索内容。

3.网站https://learnopengl-cn.github.io/intro/

学习基础光照中漫反射光照和镜面光照。并编写结合环境光照、漫反射光照和镜面光照的代码。

心得:

OpenGL

1.计算漫反射光照

   光的方向向量是光源位置向量与片段位置向量之间的向量差

  vec3 norm = normalize(Normal);

  vec3 lightDir = normalize(lightPos - FragPos);

  对norm和lightDir向量进行点乘,计算光源对当前片段实际的漫发射影响。结果值再乘以光的颜色,

  得到漫反射分量。两个向量之间的角度越大,漫反射分量就会越小

  float diff = max(dot(norm, lightDir), 0.0);

  vec3 diffuse = diff * lightColor;

  有了环境光分量和漫反射分量,我们把它们相加,然后把结果乘以物体的颜色,来获得片段最后的输出颜色

  vec3 result = (ambient + diffuse) * objectColor;

  FragColor = vec4(result, 1.0);

2.为修复不等比缩放,需要用到法线矩阵

  Normal = mat3(transpose(inverse(model))) * aNormal;

3.镜面光照

  计算视线方向向量,和对应的沿着法线轴的反射向量

  vec3 viewDir = normalize(viewPos - FragPos);

  vec3 reflectDir = reflect(-lightDir, norm);

  计算镜面分量,计算视线方向与反射方向的点乘(并确保它不是负值),然后取它的32次幂。这个32是高光的反光度

  float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);

  vec3 specular = specularStrength * spec * lightColor;

代码运行结果:

猜你喜欢

转载自www.cnblogs.com/jingrui/p/9508778.html