Рисование модели с использованием texturecoord в шейдере Программа с webgl - PullRequest
0 голосов
/ 13 ноября 2018

Я рисую модели с помощью webgl. Когда я не использую текстуру, нет никаких проблем.

Этот код работает правильно

var VertexShaderCode =  "precision mediump float;"+
                         "attribute vec3 vertexPos;\n" +
                         "uniform mat4 modelViewMatrix;\n" +
                         "uniform mat4 projectionMatrix;\n" +
                         "    void main(void) {\n" +
                         "    gl_Position =  projectionMatrix * modelViewMatrix * vec4(vertexPos, 1.0); \n" +

                         "}\n";


 var vertexShader = gl.createShader(gl.VERTEX_SHADER)
 gl.shaderSource(vertexShader, VertexShaderCode)
 gl.compileShader(vertexShader)

 var FragmentShaderCode = "precision lowp float;"+
                           "uniform vec4 color;"+
                           "void main() { "+
                           "  gl_FragColor = vec4(color);"+
                           "}"

 var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
 gl.shaderSource(fragmentShader, FragmentShaderCode)
 gl.compileShader(fragmentShader)
 var shaderProgram= gl.createProgram()
 gl.attachShader(shaderProgram, vertexShader )
 gl.attachShader(shaderProgram, fragmentShader )
 gl.linkProgram(shaderProgram)
 return shaderProgram

Но когда я добавляю текстуру для рисования модели, у меня появляется ошибка. glDrawArrays: попытка доступа к вершинам вне диапазона в атрибуте 1

Это мой код программы шейдера

var VertexShaderCode =  "precision mediump float;"+
                         "attribute vec3 vertexPos;\n" +
                         "uniform mat4 modelViewMatrix;\n" +
                         "uniform mat4 projectionMatrix;\n" +
                         "attribute vec2 aTextureCoord;"+
                         "varying vec2 vTextureCoord;"+
                         "    void main(void) {\n" +
                         "    gl_Position =  projectionMatrix * modelViewMatrix * vec4(vertexPos, 1.0); \n" +
                         "           vTextureCoord = aTextureCoord;"+
                         "}\n";


 var vertexShader = gl.createShader(gl.VERTEX_SHADER)
 gl.shaderSource(vertexShader, VertexShaderCode)
 gl.compileShader(vertexShader)

 var FragmentShaderCode =  "precision lowp float;"+
                           "varying vec2 vTextureCoord;"+
                           "uniform sampler2D uSampler;"+
                           "uniform vec4 color;"+
                           "void main() { "+
                           "  gl_FragColor = texture2D(uSampler, vTextureCoord)*vec4(color);"+
                           "}"

 var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
 gl.shaderSource(fragmentShader, FragmentShaderCode)
 gl.compileShader(fragmentShader)
 var shaderProgram= gl.createProgram()
 gl.attachShader(shaderProgram, vertexShader )
 gl.attachShader(shaderProgram, fragmentShader )
 gl.linkProgram(shaderProgram)
 return shaderProgram

Есть идеи? Что мне делать?

...