|
?到底,虽然是简单的3个示例:一个画3角形,一个画立方体,一个画网格。但依然让人很烦,因为三个示例对数据的依赖不同。
画三角形需要:顶点颜色
画立方体需要:全局颜色、顶点法线
画平面网格需要:全局颜色、全局法线
所以我必须为每一个示例都编写各自的Vertex Shader与Fragment Shader,以及对应的赋值代码,十分的繁琐。
忙碌一天,基本的Shader自动生成器终于完成,三个示例完美测试通过。
明天又将是忙碌的一天。
vertex_shader:
#version 330
uniform mat4 projection_matrix;
uniform mat4 modelview_matrix;
in vec3 Vertex;
in vec3 Normal;
out vec3 fragment_normal;
void main(void)
{
fragment_normal=(modelview_matrix*vec4(Normal,0.0)).xyz;
gl_Position=projection_matrix*modelview_matrix*vec4(Vertex,1.0);
}
---------------------------------------------------------------------------------------
fragment_shader:
#version 330
in vec3 fragment_normal;
uniform vec4 color;
layout(location = 0, index = 0) out vec4 fragColor;
void main(void)
{
float intensity=max(dot(fragment_normal,vec3(0.0,0.0,1.0)),0.0);
fragColor=color*intensity;
} |
|