我正尝试在WebGL中实现平面着色。
我知道在顶点着色器中使用“varying”关键字可以插值该值并将其传递到片段着色器中。
我正在尝试禁用插值,并发现“flat”关键字可以做到这一点,但似乎无法在WebGL中使用?
flat varying vec4 fragColor;
总是出现错误:Illegal use of reserved word 'flat'
请查看WebGL 2。支持平面着色。对于顶点着色器:
#version 300 es
in vec4 vPos; //vertex position from application
flat out vec4 vClr;//color sent to fragment shader
void main(){
gl_Position = vPos;
vClr = gl_Position;//for now just using the position as color
}//end main
对于片段着色器
#version 300 es
precision mediump float;
flat in vec4 vClr;
out vec4 fragColor;
void main(){
fragColor = vClr;
}//end main
struct VSUniformState {
mat4 modelviewprojection_matrix;
mat4 modelview_matrix;
};
uniform VSUniformState GLUP_VS;
attribute vec4 vertex_in;
varying vec3 vertex_view_space;
void main() {
vertex_view_space = (GLUP_VS.modelview_matrix * vertex_in).xyz;
gl_Position = GLUP_VS.modelviewprojection_matrix * vertex_in;
}
在相关的片元着色器中:
#extension GL_OES_standard_derivatives : enable
varying vec3 vertex_view_space;
...
vec3 U = dFdx(vertex_view_space);
vec3 V = dFdy(vertex_view_space);
N = normalize(cross(U,V));
... do the lighting with N