Graphics 无法识别GLSL内置dFdx函数

Graphics 无法识别GLSL内置dFdx函数,graphics,3d,three.js,webgl,shader,Graphics,3d,Three.js,Webgl,Shader,我正在用GLSL编写着色器。这些tho着色器:(顶点着色器和片段着色器)用于平面着色,但我的问题是: 它不起作用,所以我设法调试它。当所有内容都被注释时,它工作得很好,但是,当我取消注释第一行时,vec3u=dFdx(vVertex),它停止工作 所以我的假设是它不理解dFdx()函数。在其他函数(如pow())中,情况类似 我没有导入任何库,或者可能存在其他问题吗 我使用THREE.js并将着色器插入到应用程序中 <script type="text/x-glsl" id="flatVe

我正在用GLSL编写着色器。这些tho着色器:(顶点着色器和片段着色器)用于平面着色,但我的问题是:

它不起作用,所以我设法调试它。当所有内容都被注释时,它工作得很好,但是,当我取消注释第一行时,
vec3u=dFdx(vVertex),它停止工作

所以我的假设是它不理解
dFdx()
函数。在其他函数(如
pow()
)中,情况类似

我没有导入任何库,或者可能存在其他问题吗

我使用THREE.js并将着色器插入到应用程序中

<script type="text/x-glsl" id="flatVertexShader">
varying vec3 vVertex;

void main(){
    vVertex = vec3(modelMatrix * vec4(position, 1.0));
    gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4( position, 1.0 );
}   

</script>

<script type="text/x-glsl" id="flatFragmentShader">
varying vec3 vVertex;

uniform int ill_type;           //type of illumination
uniform vec3 uMaterialColor;    //color of material
uniform float uKa;              //ambient coefficient [0,1]
uniform float uKd;              //diffuse coefficient [0,1]
uniform float uKs;              //specular coefficient [0,1]
uniform float uNShiny;          //shininess coefficient
uniform vec3 uDirLightPos;      //light position
uniform float uLightIntensity;  //light intensity [0,1]

void main()
{     
    vec3 u = dFdx(vVertex);
    //vec3 v = dFdy(vVertex);
    //vec3 u = vVertex;
    //vec3 v = vVertex;
    //vec3 N = normalize(cross(u,v));

    //ambient
    float ambient = uKa;
    float diffuse = 0.0;
    float specular = 0.0;


    //vec3 L = normalize(uDirLightPos - vVertex);

    //diffuse
    //diffuse += uLightIntensity * uKd * max(dot(N, L), 0.0);


    if(ill_type == 0){  //Phong Illumination Model
        //vec3 R = normalize(reflect(L,N));
        //specular += uLightIntensity * uKs * pow(max(dot(R,normalize(vVertex)),0.0), uNShiny);
    }
    else{               //Blinn Illumination Model
        //vec3 H = L-vVector;
        //H = H / length(H);
        //specular += uKs * uLightIntensity * pow(max(dot(N,H),0.0), uNShiny);
    }


    float total = ambient + diffuse + specular;

    gl_FragColor = vec4(total * uMaterialColor.x, total*uMaterialColor.y, total * uMaterialColor.z,1.0);
}

可变vec3 vVertex;
void main(){
vVertex=vec3(模型矩阵*vec4(位置,1.0));
gl_位置=投影矩阵*视图矩阵*模型矩阵*向量4(位置,1.0);
}   
可变vec3 vVertex;
统一整数型//照明类型
均匀的vec3-紫外光//材料颜色
均匀浮动uKa//环境系数[0,1]
均匀浮动uKd//扩散系数[0,1]
统一浮动uKs//镜面反射系数[0,1]
均匀浮动//反光系数
均匀vec3-uDirLightPos//灯位
强度均匀//光强度[0,1]
void main()
{     
vec3u=dFdx(vVertex);
//vec3 v=dFdy(vVertex);
//vec3u=vVertex;
//vec3 v=vVertex;
//vec3 N=归一化(交叉(u,v));
//环境的
浮动环境=uKa;
浮动漫反射=0.0;
浮动镜面反射=0.0;
//vec3 L=标准化(uDirLightPos-vVertex);
//漫
//漫反射+=uLightIntensity*uKd*max(点(N,L),0.0);
如果(ill_type==0){//Phong照明模型
//vec3r=归一化(反射(L,N));
//镜面反射+=uLightIntensity*uKs*pow(最大值(点(R,归一化(vVertex)),0.0),非正弦);
}
else{//Blinn照明模型
//vec3 H=L-vVector;
//H=H/长度(H);
//镜面反射+=uKs*uLightIntensity*pow(最大值(点(N,H),0.0),非正弦);
}
浮点总数=环境光+漫反射+镜面反射;
gl_FragColor=vec4(总*uMaterialColor.x,总*uMaterialColor.y,总*uMaterialColor.z,1.0);
}

什么是“停止工作”应该是什么意思?在vanilla WebGL中,你需要在着色器代码的开头有一个扩展指令来使用派生函数
#extension GL_OES_standard_派生函数:enable
我不知道它们是否自动注入到three.js中。WebGL提供并调试着色器。什么是“停止工作”应该是什么意思?在香草WebGL中,您需要在着色器代码的开头有一个扩展指令来使用派生函数
#extension GL_OES_standard_派生:enable
我不知道它们是否自动注入到three.js中。WebGL提供和调试着色器。