opengl - 镜面高光随着相机的移动而移动
问题描述
我正在 OpenGL 中实现镜面高光作为 phong 模型的一部分。目前,当我的相机移动时,高光会移动,而不是变得更亮或更暗,这显然不是预期的结果。我已经按照 learnopengl.com 上的教程进行操作
#version 330 core
in vec3 outColor;
in vec3 outNormal;
in vec3 fragPos;
out vec4 FragColor;
uniform vec3 lightPos = vec3(-2.0f, 0.0f, 0.0f);
uniform vec3 lightColor = vec3(1.0, 0.5f, 1.0f);
uniform vec3 viewPos;
float ambientStrength = 0.2;
float specularStrength = 0.5;
uniform sampler2D tex;
void main()
{
vec3 normal = normalize(outNormal);
vec3 lightDir = normalize(lightPos - fragPos);
//ambient lighitng
vec3 ambient = ambientStrength * lightColor;
//diffuse lighting
float diffuseFactor = max(dot(normal, lightDir), 0.0);
vec3 diffuse = diffuseFactor * lightColor;
//specular lighting
vec3 viewDir = normalize(viewPos - fragPos);
vec3 reflectDir = reflect(-lightDir, normal);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 128);
vec3 specular = specularStrength * spec * lightColor;
vec3 result = (ambient + diffuse + specular) * outColor;
FragColor = vec4(result, 1.0f);// texture(tex, outTexCoords);// vec4(0.0f, 1.0f, 0.0f, 1.0f);
}
解决方案
推荐阅读
- r - DT::formatStyle 根据原始 HTML 字符向量设置数据表行的背景颜色
- asp.net-mvc - 如何在 Asp.Net MVC - Razor 视图中引用视图模型属性
- openpyxl - Openpyxl 没有抛出错误,但没有对工作簿进行更改?
- opengl - 在使用较大的工作组时,我遇到了非常慢的 OpenGL 计算着色器编译(10 分钟以上),有什么办法可以加快速度吗?
- if-statement - 如果我的 SSRS 报告中的其他代码不起作用
- vb.net - 为函数发生器创建程序
- latex - Pandoc 不使用乳胶在降价中生成新行
- amazon-ec2 - Got Software 在使用 mobaxterm 连接到 EC2 实例时导致连接中止
- sql-server - 如何确定添加的最后一条记录在何处超过 34 天
- php - 将逗号分隔的列值拆分为单独的列