webgl 創(chuàng)建多個(gè)緩沖區(qū)

index.html

<html>

<head>
  <meta lang="en">
  <meta charset="UTF-8">
  <title>webgl 使用多個(gè)緩沖區(qū)</title>
  <script src="../lib/cuon-utils.js"></script>
  <style>
      body{
          margin:0;
      }
      canvas{
          display:block;
          border:1px solid #999;
      }
      .btn-group {
          width: 500px;
          text-align: center;
          padding: 10px 0;
      }
  </style>
</head>

<body>
  <canvas id="canvas" width="500" height="500"></canvas>
</body>

<script src="./index.js"></script>

index.js

// 頂點(diǎn)著色器程序
var VSHADER_SOURCE =`
    attribute vec4 a_Position;
    attribute float a_PointSize;
    void main() {
        //設(shè)置坐標(biāo)
        gl_Position = a_Position; 
        //設(shè)置尺寸
        gl_PointSize = a_PointSize; 
    } 
`;

// 片元著色器
var FSHADER_SOURCE =`
    precision mediump float;
    uniform vec4 u_FragColor;
    void main() {
        //設(shè)置顏色
        gl_FragColor = vec4(0.5, 0.2, 0.5, 0.5);
    }
`;

// 獲取canvas元素
var canvas = document.getElementById('canvas');

// 獲取繪制二維上下文
var gl = canvas.getContext('webgl');

gl.clearColor(0, 0, 0, 1);

// 初始化shader
initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE);

// 初始化頂點(diǎn)
var n = initVertexBuffer(gl);

function draw(gl, n) { 
    gl.clear(gl.COLOR_BUFFER_BIT);
    gl.drawArrays(gl.POINTS, 0, n );
}

/**
 * 初始化頂點(diǎn)
 */
function initVertexBuffer(gl) {
    /* ==================== 創(chuàng)頂點(diǎn)坐標(biāo)建緩沖區(qū) ==================== */
    var vertices = new Float32Array([
        -0.5, 0,
        0, 0,
        0.5, 0
    ]);
    var size = 2;
    var vertexPositionBuffer = gl.createBuffer();
    // 將緩沖區(qū)綁定到目標(biāo)
    gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
    // 向緩沖區(qū)寫入數(shù)據(jù)
    gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
    var a_Position = gl.getAttribLocation(gl.program, 'a_Position');
    // 將緩沖區(qū)對(duì)象分配給a_Position
    gl.vertexAttribPointer(a_Position, size, gl.FLOAT, false, 0, 0);
    // 激活attibue 是緩沖區(qū)對(duì)attribute變量分配生效
    gl.enableVertexAttribArray(a_Position);

    /* ==================== 創(chuàng)頂點(diǎn)建緩沖區(qū) ==================== */
    var sizes = new Float32Array([
        10.0, 20.0, 30.0
    ]);
    var vertexBuffer = gl.createBuffer();
    // 將緩沖區(qū)綁定到目標(biāo)
    gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
    // 向緩沖區(qū)寫入數(shù)據(jù)
    gl.bufferData(gl.ARRAY_BUFFER, sizes, gl.STATIC_DRAW);
    var a_PointSize = gl.getAttribLocation(gl.program, 'a_PointSize');
    // 將緩沖區(qū)對(duì)象分配給a_Position
    gl.vertexAttribPointer(a_PointSize, 1, gl.FLOAT, false, 0, 0);
    // 激活attibue 是緩沖區(qū)對(duì)attribute變量分配生效
    gl.enableVertexAttribArray(a_PointSize);

    return vertices.byteLength / size / Float32Array.BYTES_PER_ELEMENT;;
}

draw(gl, n);

以下函數(shù)庫(kù)詳見 http://www.reibang.com/p/589579ee70b2

  <script src="../lib/cuon-utils.js"></script>
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末署咽,一起剝皮案震驚了整個(gè)濱河市蔬胯,隨后出現(xiàn)的幾起案子万伤,更是在濱河造成了極大的恐慌濒憋,老刑警劉巖串前,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件散吵,死亡現(xiàn)場(chǎng)離奇詭異十籍,居然都是意外死亡见剩,警方通過查閱死者的電腦和手機(jī)蓬衡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門喻杈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人狰晚,你說(shuō)我怎么就攤上這事筒饰。” “怎么了壁晒?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瓷们,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我秒咐,道長(zhǎng)谬晕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任携取,我火速辦了婚禮攒钳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雷滋。我一直安慰自己不撑,他們只是感情好文兢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著燎孟,像睡著了一般禽作。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揩页,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天旷偿,我揣著相機(jī)與錄音,去河邊找鬼爆侣。 笑死萍程,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兔仰。 我是一名探鬼主播茫负,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼乎赴!你這毒婦竟也來(lái)了忍法?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤榕吼,失蹤者是張志新(化名)和其女友劉穎饿序,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羹蚣,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡原探,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顽素。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咽弦。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胁出,靈堂內(nèi)的尸體忽然破棺而出型型,到底是詐尸還是另有隱情,我是刑警寧澤全蝶,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布闹蒜,位于F島的核電站,受9級(jí)特大地震影響裸诽,放射性物質(zhì)發(fā)生泄漏嫂用。R本人自食惡果不足惜型凳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一丈冬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甘畅,春花似錦埂蕊、人聲如沸往弓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)函似。三九已至,卻和暖如春喉童,著一層夾襖步出監(jiān)牢的瞬間撇寞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工堂氯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔑担,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓咽白,卻偏偏與公主長(zhǎng)得像啤握,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晶框,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355