最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 学习 WebGL(2) - JavaScript 向着色器传递数据

    正文概述 掘金(leochen)   2021-02-13   539

    上一章中,我们画了一个点,点的位置信息是直接写在顶点着色器中的,程序很容易理解,但是缺乏扩展性。WebGL 程序提供了从 JavaScript 传递数据到着色器的能力,让我们能够在 JavaScript 中创建数据,然后传递给着色器使用。

    attribute、uniform、varying三种存储限定符

    想要从 JavaSctript 中传递数据给着色器,我们在着色器中需要使用 attribute, uniform, varying 这三种存储限定符创建全局变量来接受 JavaScript 传入的数据。基本格式为 <存储限定符> <变量类型> <变量名称>

    attribute

    attribute 限定符表示变量只能出现在顶点着色器中。比如我们声明一个顶点位置的 attribute 变量。

    // attribute 只能出现在顶点着色器中,并且必须是全局变量
    let vertexShaderSource = `
    	attribute vec4 a_Position;
    	void main() {
    		gl_Position = a_Position;
    	}
    `
    

    uniform

    uniform 限定符表示变量可以出现在顶点着色器和片元着色器中,一般是两个着色器共同用到的变量。

    varying

    varying 限定符变量是为了从顶点着色器向片元着色器传输数据。需要在两个着色器中声明同名的变量。

    使用 attribute 变量

    // 获取 attribute 变量的存储位置
    let a_Position = gl.getAttribLocation( program, "a_Position" );
    
    // 向 attribute 变量赋值,这里的 a_Position 第四个值没有设置会自动默认为 1
    gl.vertexAttrib3f( a_Position, 0, 0, 0 )
    

    uniform 和 varying 在后续使用到的时候再进行说明。

    完整示例代码在 github learn-webgl


    起源地下载网 » 学习 WebGL(2) - JavaScript 向着色器传递数据

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元