46 lines
1.3 KiB
GLSL

// shaders/phong.vert
#version 330 core
// 输入顶点属性
layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec3 vertexNormal_modelspace;
layout(location = 2) in vec2 vertexUV;
// 输出到片元着色器
out vec3 Position_worldspace;
out vec3 Normal_cameraspace;
out vec3 EyeDirection_cameraspace;
out vec3 LightDirection_cameraspace;
out vec2 UV;
// Uniform 变量
uniform mat4 MVP;
uniform mat4 M;
uniform mat4 V;
uniform vec3 lightPos_worldspace;
uniform vec3 viewPos;
void main(){
// 输出顶点在世界空间的位置
Position_worldspace = (M * vec4(vertexPosition_modelspace, 1)).xyz;
// 顶点在相机空间的位置
vec3 Position_cameraspace = (V * M * vec4(vertexPosition_modelspace, 1)).xyz;
EyeDirection_cameraspace = vec3(0,0,0) - Position_cameraspace;
// 光源在相机空间的位置
vec3 LightPosition_cameraspace = (V * vec4(lightPos_worldspace, 1)).xyz;
LightDirection_cameraspace = LightPosition_cameraspace - Position_cameraspace;
// 法线在相机空间
Normal_cameraspace = (V * M * vec4(vertexNormal_modelspace, 0)).xyz;
Normal_cameraspace = normalize(Normal_cameraspace);
// 计算裁剪空间中的顶点位置
gl_Position = MVP * vec4(vertexPosition_modelspace, 1);
// 传递UV坐标
UV = vertexUV;
}