WebGL属性始终为空

WebGL属性始终为空,webgl,Webgl,我正试图在WebGL中制作一个图形引擎,但我遇到了很多麻烦。 其中一个问题是,当我使用gl.getUniformLocation调用属性时,属性为null或-1 我现在的主要问题是avertexturecoords,它总是-1。 我把我的着色器留在这里,以防万一它们是问题所在 <script id="shader-vs" type="x-shader/x-vertex"> attribute vec3 aVertexPosition; attribute vec3 aVertexN

我正试图在WebGL中制作一个图形引擎,但我遇到了很多麻烦。 其中一个问题是,当我使用gl.getUniformLocation调用属性时,属性为null或-1

我现在的主要问题是avertexturecoords,它总是-1。 我把我的着色器留在这里,以防万一它们是问题所在

<script id="shader-vs" type="x-shader/x-vertex">

attribute vec3 aVertexPosition;
attribute vec3 aVertexNormal;
attribute vec4 aVertexColor;

attribute vec2 aVertexTextureCoords;

uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform mat4 uNMatrix;
uniform float uAlpha;

const int NUM_LIGHTS = 4;

uniform vec4 uMaterialDiffuse;
uniform vec3 uLightPosition[NUM_LIGHTS];

//varyings
varying vec4 vColor;
varying vec2 vTextureCoord;


varying vec3 vNormal;
varying vec3 vLightRay[NUM_LIGHTS];

void main(void) {

 //Transformed vertex position
 vec4 vertex = uMVMatrix * vec4(aVertexPosition, 1.0);


 //Transformed normal position
 vNormal = vec3(uNMatrix * vec4(aVertexNormal, 1.0));

 //Calculate light ray per each light
 for(int i=0; i < NUM_LIGHTS; i++){
    vec4 lightPosition = uMVMatrix * vec4(uLightPosition[i], 1.0);
    vLightRay[i] = vertex.xyz - lightPosition.xyz;
 }


 //Final vertex position
 gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
 vTextureCoord = aVertexTextureCoords;

}   
</script>

<script id="shader-fs" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif

//object uniforms
uniform bool uWireframe;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
//Incluimos un uniform que asociara la textura a un uniform
uniform sampler2D uSampler;

//light uniforms
const int NUM_LIGHTS = 4;
uniform bool uLightSource;
uniform vec4 uLightAmbient;
uniform vec4 uLightDiffuse[NUM_LIGHTS];
uniform float uCutOff;   

//varyings
varying vec2 vTextureCoord;
varying vec3 vNormal;
varying vec3 vLightRay[NUM_LIGHTS];

void main(void)
{
    if(uWireframe || uLightSource){
        gl_FragColor = uMaterialDiffuse;
    }
    else{
        vec4 Ia = uLightAmbient * uMaterialAmbient; //Ambient component: one for all
        vec4 finalColor = vec4(0.0,0.0,0.0,1.0);    //Color that will be assigned to gl_FragColor

        vec3 N = normalize(vNormal);
        vec3 L = vec3(0.0);
        float lambertTerm = 0.0;

        for(int i = 0; i < NUM_LIGHTS; i++){                    //For each light

            L = normalize(vLightRay[i]);            //Calculate reflexion
            lambertTerm = dot(N, -L);

            if (lambertTerm > uCutOff){         
                finalColor += uLightDiffuse[i] * uMaterialDiffuse *lambertTerm; //Add diffuse component, one per light
            }
        }

        //Final color
        finalColor  += Ia;
        finalColor.a = 1.0;             //Add ambient component: one for all                    
        gl_FragColor = finalColor * texture2D(uSampler, vTextureCoord);     //The alpha value in this example will be 1.0
  }

}
</script>

有人能告诉我我做错了什么吗?

为顶点属性调用gl.getUniformLocation是错误的,因为它是一个属性,而不是统一属性。将调用替换为gl.GetAttributeLocation。

顶点属性不一致