亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

glsl_buffer實現漸變三角形方法詳解

 更新時間:2023年03月31日 16:45:20   作者:mool  
這篇文章主要為大家介紹了glsl_buffer實現漸變三角形方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

上篇文章我簡單封裝了一個glsl的程序類,并簡單介紹了glsl的一些通信方式。這篇文章我們主要來介紹glsl中buffer的使用,結合上一篇文章中的attributevarying來實現一個漸變色的三角形~

三角形

我們通過glsl畫一個三角形需要的是三個坐標系中的點,三點成面。而我們在使用glsl畫一個動態(tài)點用到的是vertexAttrib2fvertexShader傳遞位置坐標,通過drawArrays繪制點。繪制一個三角形也是類似的思想,但是多頂點我們就不能以vertexAttrib2f的形式傳遞參數,這時我們就要用到buffer,下面通過代碼詳細介紹buffer~

創(chuàng)建一個buffer

第一步我們需要創(chuàng)建一個buffer容器并綁定它

//創(chuàng)建一個buffer
let buffer = gl.createBuffer();
//綁定buffer
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);

傳遞數據

通過Float32Array對象創(chuàng)建一個點位信息組合,并傳遞到buffer中

let vertices = [
    ......
];
vertices = new Float32Array(vertices); //創(chuàng)建一個float對象
//傳數據
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

分析

我們實現一個三角形需要的是三個二維的坐標點,所以我們需將vertices中的數據以倆倆一組的形式呈現。如何實現漸變呢? 我們不僅要存頂點位置信息也要存顏色rab信息,所以我們在vertices中需以5個float為一組傳遞給attribute。下面我們來實現一下代碼~

三角形buffer數據及著色器信息

let vertices = [
  -0.5,
  0.0,
  1.0,
  0.0,
  0.0, //頂點1
  0.0,
  0.8,
  0.0,
  1.0,
  0.0, //頂點2
  0.5,
  0.0,
  0.0,
  0.0,
  1.0, //頂點3
];
//頂點著色器,聲明a_position和a_Color的attribute屬性,v_Color的varying屬性
let vertexShader = ` 
  attribute vec2 a_position;
  attribute vec3 a_Color;
  varying vec3 v_Color;
  void main(){
    v_Color = a_Color;
    gl_Position = vec4(a_position,0.0,1.0);
  }
`;
//片源著色器
let fragmentShader = `
    precision mediump float;
    varying vec3 v_Color;
    void main() {
     gl_FragColor = vec4(v_Color,1.0);
    }
`;

buffer賦值attribute

這里用到了glsl通信相關知識,我就不做展開,不了解的可以查看我的第一篇glsl開篇文章中有詳細介紹~ 這里需要獲取到attribute的內存地址,并將buffer中的數據傳遞給attribute。這里面有一些注意點,由于我們采用5個float一組的形式,前兩位是位置信息、后三位存儲顏色rgb,所以在傳遞前我們需告知attribute一組有幾位且從第幾位開始拾取~

let FSIZE = vertices.BYTES_PER_ELEMENT; //每一個值占用多少字節(jié) float32為4字節(jié)

//把buffer賦值給attribute
let a_position = gl.getAttribLocation(webgl.program, "a_position");
let a_Color = gl.getAttribLocation(webgl.program, "a_Color");
gl.vertexAttribPointer(
  a_position, //vertexshader里面的變量的地址
  2, //size:attribute變量的長度(幾個一組)
  gl.FLOAT, //數據類型 float
  false, //歸一化 相當于length等于1
  FSIZE * 5, //stride:每個點(組)的信息所占用的字節(jié)BYTES
  0 // offset:偏移(從第幾個開始)
);
gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, FSIZE * 5, FSIZE * 2);
//確認賦值
gl.enableVertexAttribArray(a_position);
gl.enableVertexAttribArray(a_Color);

繪制三角形

完成上方的buffer綁定以及傳遞attribute后,我們只需最后繪制三角形就行了~

//畫三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

效果

結語

本系列作為glsl入門系列,本人也才接觸glsl語言,后續(xù)會根據學習進度不斷更新,更多關于glsl buffer漸變三角形的資料請關注腳本之家其它相關文章!

相關文章

  • JavaScript對象原型鏈原理詳解

    JavaScript對象原型鏈原理詳解

    這篇文章主要介紹了JavaScript對象原型鏈原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Flow之一個新的Javascript靜態(tài)類型檢查器

    Flow之一個新的Javascript靜態(tài)類型檢查器

    今天我們興奮的發(fā)布了 Flow 的嘗鮮版,一個新的Javascript靜態(tài)類型檢查器。Flow為Javascript添加了靜態(tài)類型檢查,以提高開發(fā)效率和代碼質量,本文給大家分享Flow之一個新的Javascript靜態(tài)類型檢查器,感興趣的朋友一起學習吧
    2015-12-12
  • javascript中setAttribute兼容性用法分析

    javascript中setAttribute兼容性用法分析

    這篇文章主要介紹了javascript中setAttribute兼容性用法,結合實例形式分析了javascript使用setAttribute進行屬性設置操作的相關使用技巧,需要的朋友可以參考下
    2016-12-12
  • Webpack中css-loader和less-loader的使用教程

    Webpack中css-loader和less-loader的使用教程

    這篇文章主要介紹了關于Webpack中css-loader和less-loader的使用教程,文中通過示例代碼介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • 微信小程序實現YDUI的ScrollNav組件

    微信小程序實現YDUI的ScrollNav組件

    這篇文章主要為大家詳細介紹了微信小程序實現YDUI的ScrollNav組件,滾動導航效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • js中arguments對象的深入理解

    js中arguments對象的深入理解

    這篇文章主要給大家介紹了關于js中arguments對象的深入理解,文中通過示例代碼介紹的非常詳細,對大家學習或者使用javascript具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • 常用DOM整理

    常用DOM整理

    js在操作DOM中存在著許多跨瀏覽器方面的坑,本文花了我將近一周的時間整理,我將根據實例整理那些大大小小的“坑”。
    2015-06-06
  • 三種在ES6中將非數組轉換為數組的方法詳情

    三種在ES6中將非數組轉換為數組的方法詳情

    這篇文章主要介紹了三種在ES6中將非數組轉換為數組的方法詳情,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • javascript中window.open在原來的窗口中打開新的窗口(不同名)

    javascript中window.open在原來的窗口中打開新的窗口(不同名)

    本文給大家介紹使用window.open在原來的窗口中打開新的窗口,涉及到win.open新窗口相關知識,對本文感興趣的朋友參考下
    2015-11-11
  • IE關閉時判斷及AJAX注銷案例學習

    IE關閉時判斷及AJAX注銷案例學習

    當關閉系統時會提示:你確定要退出系統嗎?退出請按'離開此頁'接下來將講解下IE關閉判斷及AJAX注銷,感興趣的你可不要錯過了哈,希望本例對你學習ajax有所幫助
    2013-02-02

最新評論