Ai
1 Star 1 Fork 0

DGuco/qtproject

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
basic.fsh 1.59 KB
一键复制 编辑 原始数据 按行查看 历史
DGuco 提交于 2023-02-27 11:33 +08:00 . 给着色器程序添加注释
#version 410 core
//像素着色器
#extension GL_NV_shadow_samplers_cube : enable
out vec4 FragColor;
layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec3 texcoord;
layout(location = 3) in vec4 lightDirection;
layout(location = 4) in vec4 color;
uniform sampler2D tex;
uniform vec4 basicColor;
uniform vec4 light_position;
uniform vec4 light_ambient;
uniform vec4 light_diffuse;
uniform vec4 light_specular;
uniform vec4 material_specular;
uniform float material_shininess;
void main()
{
//归一化法线向量
vec3 N = normalize(normal);
//光照和法向量的夹角的cos值
float NdotL = dot(N, lightDirection.xyz);
//反射光照和法向量的夹角的cos值
float RdotL = dot(reflect(normalize(position), N), lightDirection.xyz);
//向量的绝对值
vec3 absN = abs(texcoord.xyz);
//把立方体坐标系移到坐标轴的原点
vec3 zerttexcoord = texcoord + 0.5;
vec2 texCoord;
//左右两个面(纹理取向量yz)
if (absN.x > absN.y && absN.x > absN.z)
texCoord = vec2(zerttexcoord.yz);
//上下两个面
else if (absN.y > absN.z)
texCoord = vec2(zerttexcoord.zx);
//前后两个面
else
texCoord = vec2(zerttexcoord.xy);
//获取对应坐标纹理的颜色值
vec4 texColor = texture(tex, texCoord.xy);
//混合基础颜色和纹理色
vec4 unlitColor = color * mix(basicColor, vec4(texColor.xyz, 1.0), texColor.w);
//输出最终颜色 =(环境光照 + 漫反射光照 * 光照夹角cos值) * 初始颜色 + 材质的颜色
FragColor = (light_ambient + light_diffuse * max(NdotL, 0.0)) * unlitColor +
material_specular * light_specular * pow(max(RdotL, 0.0), material_shininess);
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/DGuco/qtproject.git
git@gitee.com:DGuco/qtproject.git
DGuco
qtproject
qtproject
master

搜索帮助