【发布时间】:2015-04-02 15:27:58
【问题描述】:
我有两个顶点缓冲区,每个缓冲区在每个元素中存储一系列 XYZ 坐标。如何将两个缓冲区传递给着色器以在每个缓冲区的坐标之间执行线性插值?
例如:
buffer1 = [3, 5, 7, 4, 2, 3 ...etc]
buffer2 = [7, 11, 3, 10, 0, 5 ...etc]
要显示到画布的结果顶点缓冲区应该是:
bufferInterp = [5, 8, 5, 7, 1, 4 ...etc]
我可以按如下方式使用单个顶点缓冲区:
vertexPositionBuffer = vertexPositionBuffer1;
vertexIndexBuffer = vertexIndexBuffer;
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer[frameCount]);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, vertexPositionBuffer[0].itemSize, gl.FLOAT, false, 0, 0);
注意这两个对象都共享同一个索引缓冲区。
我的顶点着色器定义如下:
var vertexShaderSrc = "attribute vec3 aVertexPosition;\n"
+ "attribute vec2 aTextureCoord;\n"
+ "uniform mat4 uMVMatrix;\n"
+ "uniform mat4 uPMatrix;\n"
+ "varying highp vec2 vTextureCoord;\n"
+ "void main(void) {\n"
+ "gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n"
+ "vTextureCoord = aTextureCoord;\n"
+ "}";
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSrc);
gl.compileShader(vertexShader);
shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);
gl.useProgram(shaderProgram);
shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
【问题讨论】:
标签: webgl shader interpolation vbo