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;
代码运行结果: