Glsl 有人能解释这些WebGL片段吗?

Glsl 有人能解释这些WebGL片段吗?,glsl,webgl,Glsl,Webgl,我正在学习webgl,现在完全糊涂了。 对于像我这样的初学者,我正在浏览用代码编写的注释 例如: var canvas = document.getElementById('canvas'); var gl = getWebGLContext(canvas); if(!gl) { return; } //Setup GLSL var program = createProgramFromScripts(gl, ["2d-vertex-shader", "2d-fragment-shad

我正在学习webgl,现在完全糊涂了。 对于像我这样的初学者,我正在浏览用代码编写的注释

例如:

var canvas = document.getElementById('canvas');
var gl = getWebGLContext(canvas);
if(!gl) {
    return;
}

//Setup GLSL
var program = createProgramFromScripts(gl, ["2d-vertex-shader", "2d-fragment-shader"]);
gl.useProgram(program);

//Look up where the vertex data needs to go
var positionLocation = gl.getAttribLocation(program, 'a_position');     

//create a buffer and put a single CLIPSPACE rectangle in it.
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1.0, -1.0,
                                                 1.0, -1.0,
                                                 -1.0, 1.0,
                                                 -1.0, 1.0,
                                                 1.0, -1.0,
                                                 1.0, 1.0]), gl.STATIC_DRAW);
gl.enableVertexAttribArray(positionLocation);
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
//draw
gl.drawArrays(gl.TRIANGLES, 0, 6);
在上面的代码段中,行

var positionLocation = gl.getAttribLocation(program, 'a_position');
指示它得到了顶点需要移动的位置,但我在顶点着色器中没有找到任何特定的位置

attribute vec2 a_position;
void main() {
    gl_Position = vec4(a_position, 0, 1);
}
我们怎么能说职位在哪里

还有Float32Array,我们为什么要使用它,有没有任何场景可以实时使用它,我完全不明白这些着色器


我还阅读了GLSL essentials,以获得一些着色器知识,但仍然对这些东西感到困惑。有人能给它点颜色吗?

Float32Array包含将通过着色管道的所有顶点。 在顶点着色器中,指定
gl_位置
为4维向量,其中x和y属于插入的顶点。因此,一个_位置包含在数组中传递的值,顶点着色器将针对每个顶点运行

所以这个着色器几乎什么都不做。在实际应用程序中,您可以在此处执行多个变换和照明操作等

如果你运行这个程序,你会看到2个三角形被画出来(1个矩形)。这是因为数组包含6个2d值,这些值分配给2个三角形。
查看有关openGL管道的更多信息

您似乎对webgl很了解,您介意教我一点钱吗?对不起,我有一份全职工作和一个学位要追求:/好的,我现在明白了一件事。即我们应该使用
gl.drawArray(gl.TRIANGLES,0,SIZE\u OF\u FLOAT32ARRAY/2)。但现在我的疑问是,这些值在Float32Array中代表什么,如果我更改这些值,我看不到任何更改?它们代表场景中的位置。如果你对它们做了足够大的修改,你应该会看到一个变化。而且,如果我假设每两个顶点都是x和y,我仍然无法理解为什么当我只画一个三角形时,整个画布都被占据了<代码>var buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY\u BUFFER,BUFFER);gl.bufferData(gl.ARRAY_BUFFER,新Float32Array([100,-100150125,-175100]),gl.STATIC_DRAW);gl.EnableVertexAttributeArray(位置位置);gl.VertexAttribute指针(位置位置,2,gl.FLOAT,false,0,0);//绘制gl.DrawArray(gl.TRIANGLES,0,3)这有帮助吗?是的,我已经发布了很多关于SO的问题,你已经非常认真地回答了所有问题,你愿意在网上教我吗?如果愿意,你的报价是多少(你可以邮寄me@subhasishdash60@好吧,有一件事我现在明白了。那就是我们应该使用gl.drawArray(gl.TRIANGLES,0,SIZE_OF_FLOAT32ARRAY/2)。但是现在我的疑问是Float32Array中的值代表什么,如果我更改了值,我看不到任何更改?这个命令
gl.bufferData(…)
Float32Array中的数据复制到GPU。如果编辑
Float32Array
中的值,则需要再次调用
gl.bufferData(…)
将新值复制到GPU。