webgl 入门(二) - 简书
文章推薦指數: 80 %
在JavaScript 中使用gl.vertexAttrib3f函数对attribute 变量赋值. gl.vertexAttrib3f()函数拥有很多同族函数,比如gl.vertexAttrib1f,gl.vertexAttrib2f,gl ...
webgl入门(二)webgl参数传递
webgl是基于着色器进行绘制的.着色器本身无法与JavaScript进行通讯以及数据的传输.为了能够与JavaScript语言进行数据的交互,webgl封装了很多函数,这些函数根据GLSLES暴露出来地址来传递参数.下面主要介绍两种变量:attribute变量和和uniform变量
attribute变量
attribute变量是一种GLSLES变量,被用来从外部想顶点着色器内传输数据.只有顶点着色器可以使用它,在对变量命名的时候,对于顶点变量一般使用a_开头.
使用attribute变量包含以下几个步骤
在顶点着色器中声明attribute变量
将attribute变量赋值给gl_Position变量
向attribute变量传输数据
声明attribute.attribute变量必须声明为全局变量,数据从着色器外部传递给变量.变量声明的格式按照以下格式:
变量如下所示
attributevec4a_Position;
存储限定符号-类型-变量名
将attribute变量赋值给gl_Position.在赋值的数据的类型必须一致,否则将会报错
如下所示
gl_Position=a_Position;
向attribute变量传输数据
gl.vertexAttrib3f(a_Position,0.2,0.0,0.0)
完整代码如下所示
initShader代码如下 functioninitShaders(gl,vsShader,fShader){ constprogram=gl.createProgram(); constvertextShader=loaderShader(gl,gl.VERTEX_SHADER,vsShader) constfragmentShader=loaderShader(gl,gl.FRAGMENT_SHADER,fShader) gl.attachShader(program,vertextShader) gl.attachShader(program,fragmentShader) //链接webgl上下文和程序对象 gl.linkProgram(program) gl.useProgram(program) gl.program=program returntrue } //加载着色器 functionloaderShader(gl,type,source){ constshader=gl.createShader(type) gl.shaderSource(shader,source) //编译着色器 gl.compileShader(shader) returnshader } 抽奖赞1赞赞赏更多好文
延伸文章資訊
- 1webgl 入门(二) - 简书
在JavaScript 中使用gl.vertexAttrib3f函数对attribute 变量赋值. gl.vertexAttrib3f()函数拥有很多同族函数,比如gl.vertexAttri...
- 2Gl.VertexAttrib3f (gb.opengl.glsl) - / - Gambas Documentation
Gl.VertexAttrib3f (gb.opengl.glsl) ... Specifies the value of a generic vertex attribute. Paramet...
- 3[Day5] WebGL 修羅道(2) - 資料傳遞 - iT 邦幫忙
而傳入值的話,則是使用 gl.vertexAttrib3f ,要注意attribute 這個型別只能夠用在vertex shader 中!其實在使用attribute,是先取用buffer 中的...
- 4egaku2d_core::gl::VertexAttrib3f - Rust - Docs.rs
API documentation for the Rust `VertexAttrib3f` mod in crate `egaku2d_core`. ... [−][src]Module e...
- 5gl::VertexAttrib3f - Rust - Docs.rs
API documentation for the Rust `VertexAttrib3f` mod in crate `gl`.