精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一起學 WebGL:繪制三角形

開發 前端
這次繪制三角形,要繪制的點就有三個了,不再是一個。為此我們需要用到緩存區對象(buffer object)。

三角形可太重要了,再復雜的三維模型都是由一個個小三角形組合而成,越多越精細越真實。

繪制三角形

這次繪制三角形,要繪制的點就有三個了,不再是一個。為此我們需要用到緩存區對象(buffer object)。

通過緩存區對象,我們可以一次性向頂點著色器傳入多個頂點數據。

Float32Array

首先我們來用 Float32Array 數組保存需要用到的三個點的位置信息。

// 頂點數據
const vertices = new Float32Array([
// 第一個點
0, 0.5,
// 第二個點
-0.5, -0.5,
// 第三個點
0.5, -0.5
]);

為了更簡單一些,這里先不考慮 z 維度,每個頂點只用了 x 和 y 分量。到時候傳遞到頂點著色器的 gl_Position  時,z 會自動填充默認的 0。

Float32Array 是一個比較特殊的 JavaScript 數組,最初也是為了和 WebGL 配合使用的,它可以創建一個 32 位浮點數的強類型數組。

普通的 JS 數組沒有類型的概念,數組元素可能是數字、字符串、對象的混合體,傳給 WebGL,要處理也麻煩,不太合適。

需要注意的是這種強類型數組的 API 和普通數組不一樣,比如不能用 push 方法。

緩沖區對象的創建和數據寫入

// 創建緩沖區對象
const vertexBuffer = gl.createBuffer();
// 綁定緩沖區對象到上下文
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// 向緩沖區對象寫入數據
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

首先是用 gl.createBuffer 方法創建一個緩沖區對象。

然后用 gl.bindBuffer(target, buffer) 將緩存區綁定到 gl 上下文指定目標(gl.ARRAY_BUFFER)中。target 參數還有另一個值是 gl.ELEMENT_ARRAY_BUFFER,這個我們后面章節講如何繪制立方體的時候會用到哈。

buffer 參數就是剛剛創建的緩沖區對象。

最后往緩沖區對象寫入我們剛剛的數組數據。最后一個參數 gl.STATIC_DRAW,表示數據寫入后不會再被修改,去繪制 靜態 場景。

綁定到頂點著色器上

接著就是讓緩沖區對象對接上頂點著色器的變量。

// 獲取 a_Position 變量地址
const a_Position = gl.getAttribLocation(gl.program, "a_Position");
// 將緩沖區對象分配給 a_Position 變量
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
// 允許訪問緩存區
gl.enableVertexAttribArray(a_Position);

首先通過 gl.getAttribLocation 拿到頂點著色器中聲明的 a_Position 變量的地址。

然后是比較復雜的 gl.vertexAttribPointer 方法。參數說明:

  1. location,待分配的 attribute 變量地址;
  2. size,每個頂點分量分量個數,就是一次從中取幾個作為一個頂點數據,不夠的補缺省值。
  3. type,指定數據格式,gl.FLOAT 表示使用的是 Float32Array 的類型。
  4. normalize,是否將浮點數歸一化到 [0, 1] 或 [-1, 1] 。
  5. stride,相鄰兩個頂點之間的字節數,以后用數組保存多種信息數據時會用到。
  6. offset,指定緩沖區對象中的偏移量。

目前我們只需要知道 location 和 size 就行了。最后兩個參數會在繪制顏色漸變的三角形用到,這里不細說。

最后是用調用  gl.enableVertexAttribArray(a_Position),表示 a_Position 變量對應的緩沖區被開啟了。開啟后,我們就不能再用原來的 gl.vertexAttrib3f 來傳遞數據了,WebGL 會從緩存區一個個拿。如果你想關閉分配,可以調用

繪制

/*** 繪制 ***/
// 清空畫布,并指定顏色
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
// 繪制三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

最后是清空畫布,然后繪制三角形。

這里 gl.drawArrays 方法的第一個 mode 參數換成了 gl.TRIANGLES(三角形圖元),不再是原來的 gl.POINTS。

繪制效果:

圖片

如果用原來的 gl.POINTS,并設置好 gl_PointSize 指定點大小,則會繪制出下面的效果:

圖片

代碼

下面是完整的代碼實現。

/** @type {HTMLCanvasElement} */
const canvas = document.querySelector("canvas");
const gl = canvas.getContext("webgl");

const vertexShaderSrc = `
attribute vec4 a_Position;
void main() {
gl_Position = a_Position;
gl_PointSize = 10.0;
}
`;

const fragmentShaderSrc = `
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

/**** 渲染器生成處理 ****/
// 創建頂點渲染器
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSrc);
gl.compileShader(vertexShader);
// 創建片元渲染器
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSrc);
gl.compileShader(fragmentShader);
// 程序對象
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
gl.program = program;

// 頂點數據
const vertices = new Float32Array([
// 第一個點
0,
0.5,
// 第二個點
-0.5,
-0.5,
// 第三個點
0.5,
-0.5
]);

// 創建緩存對象
const vertexBuffer = gl.createBuffer();
// 綁定緩存對象到上下文
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// 向緩存區寫入數據
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

// 獲取 a_Position 變量地址
const a_Position = gl.getAttribLocation(gl.program, "a_Position");
// 將緩沖區對象分配給 a_Position 變量
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);

// 允許訪問緩存區
gl.enableVertexAttribArray(a_Position);

/*** 繪制 ***/
// 清空畫布,并指定顏色
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
// 繪制三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

在線 demo:

https://codesandbox.io/s/gbh1xf?file=/index.js。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2023-05-06 07:23:57

2023-11-01 07:51:15

WebGPU3D 圖形

2023-04-12 07:46:24

JavaScriptWebGL

2016-10-20 13:36:28

WebRTC瀏覽器服務器

2021-10-19 10:09:21

三角形個數數組

2023-05-16 07:44:03

紋理映射WebGL

2023-05-31 20:10:03

WebGL繪制立方體

2023-04-11 07:48:32

WebGLCanvas

2013-09-26 13:43:13

iOS開發OpenGL ES教程圖元

2022-03-16 14:27:49

CSS三角形前端

2022-09-14 15:17:26

ArkUI鴻蒙

2023-04-26 07:42:16

WebGL圖元的類型

2021-08-29 18:32:18

CSS

2020-12-09 08:34:24

css生成器設計師

2012-12-24 09:55:15

iOSUnity3D

2024-02-20 18:30:53

CSS屬性邊框

2023-03-29 07:31:09

WebGL坐標系

2023-05-04 08:48:42

WebGL復合矩陣

2023-06-26 15:14:19

WebGL紋理對象學習

2018-03-02 15:54:37

三角形主機比特幣
點贊
收藏

51CTO技術棧公眾號

国产精品美女| 日韩精品麻豆| 91美女精品福利| 国产成人福利视频| 91香蕉一区二区三区在线观看| 日本亚洲视频| 色欧美日韩亚洲| 毛片av在线播放| 国产一区电影| 国产成人丝袜美腿| 国产成一区二区| 九九视频免费观看| 成人精品中文字幕| 亚洲国产成人精品一区二区| 天天碰免费视频| 狂野欧美激情性xxxx欧美| 国产欧美日韩综合精品一区二区| 91精品综合久久| 探花国产精品一区二区| 亚洲美女少妇无套啪啪呻吟| 久久精品福利视频| 91网站免费视频| 国产主播性色av福利精品一区| 欧美日韩国产首页在线观看| 男人靠女人免费视频网站| 1区2区在线观看| 国产精品美女www爽爽爽| 欧美成人一区二区在线| 全国男人的天堂网| 国产乱码精品一区二区三| 国产精品久久久久久久av电影| 国产精品suv一区二区69| 亚洲欧美在线专区| 丁香五月缴情综合网| 99久久精品一区| 91久色国产| 国产理论片在线观看| 日韩avvvv在线播放| 8050国产精品久久久久久| 精品视频在线观看免费| 91成人精品视频| 中文字幕日韩专区| www..com.cn蕾丝视频在线观看免费版 | 黄色美女久久久| 欧美一级艳片视频免费观看| 小明看看成人免费视频| 久久夜夜久久| 欧美日韩一区二区三区在线看| 不卡av免费在线| 欧美福利在线播放| 日本韩国一区二区三区| 免费大片在线观看| 国产超碰精品| 在线观看不卡一区| 在线观看av日韩| 成人福利一区二区| 99伊人成综合| 欧美激情免费视频| 久久精品国产亚洲av高清色欲| 欧美精品18| 欧美激情视频给我| 日韩精品成人在线| 亚洲综合日韩| 国产精品96久久久久久| 国产美女www爽爽爽| 蜜桃久久精品一区二区| 成人免费看黄网站| 亚洲乱色熟女一区二区三区| 国产91精品免费| 国产另类自拍| 免费一级在线观看| 欧美激情资源网| 热这里只有精品| 爱福利在线视频| 欧美性猛交xxxx久久久| 无限资源日本好片| 欧一区二区三区| 亚洲精品久久久一区二区三区 | 欧美国产日韩在线观看| 一本久久a久久精品vr综合| 中文字幕99页| 理论片中文字幕| 2023国产一二三区日本精品2022| 欧美日韩精品免费观看| 北岛玲日韩精品一区二区三区| 1024国产精品| 免费看国产曰批40分钟| 日韩一区二区三区免费| 日韩情涩欧美日韩视频| 日韩精品卡通动漫网站| 希岛爱理一区二区三区| 性欧美亚洲xxxx乳在线观看| 国产偷人爽久久久久久老妇app| 国产曰批免费观看久久久| 精品久久久久亚洲| 欧美午夜电影一区二区三区| 亚洲国产精品久久不卡毛片| 婷婷丁香激情网| 成人动态视频| 最好看的2019年中文视频| 精品无码人妻一区二区三| 夜间精品视频| 国产精品1234| 天堂在线视频观看| 亚洲视频一区二区免费在线观看 | a视频在线观看| 日本精品免费观看高清观看| 扒开伸进免费视频| 免费在线性爱视频| 欧美一级精品| 欧美人交a欧美精品| 特级西西444www高清大视频| 国产成人精品综合在线观看 | 日本激情视频在线观看| 精品久久久久久久久久ntr影视| www激情五月| 欧美日韩国产在线观看网站 | 久久精品九色| 一区二区成人精品| 亚洲免费在线观看av| 国产乱码精品一区二区三区忘忧草| 日韩三级电影免费观看| www在线观看黄色| 日韩一区二区电影在线| 羞羞在线观看视频| 日韩精品一级二级| 蜜桃视频日韩| 在线人成日本视频| 亚洲国产高清自拍| 国产探花在线播放| 精品一二三四在线| 狠狠躁夜夜躁人人爽超碰91| 夜夜爽www精品| 日韩欧美一区二区三区免费观看| 亚洲国产成人久久| 国产无精乱码一区二区三区| 国产成人免费视频一区| 最新av网址在线观看| 伊人国产精品| 日韩在线视频一区| 97超碰人人草| 亚洲视频免费观看| 午夜一级免费视频| 婷婷另类小说| 亚洲自拍欧美另类| 天堂av资源在线观看| 日韩欧美国产成人一区二区| 日韩在线观看视频一区二区| 国产综合色精品一区二区三区| 在线免费观看成人网| 久久av日韩| 日韩视频一区在线| 国产精品美女一区| 亚洲欧美日韩国产中文在线| 欧美性受xxxxxx黑人xyx性爽| 国产精品久久久久一区二区三区厕所| 国产日韩在线看| dj大片免费在线观看| 欧美mv日韩mv| 天天操天天爽天天干| 国产九九视频一区二区三区| 免费看日b视频| 国产尤物视频在线| 好吊日精品视频| 91在线精品播放| av电影免费在线观看| 日韩精品在线一区二区| 国产午夜久久久| 91亚洲永久精品| 欧美精品成人网| 久久在线播放| 翡翠波斯猫1977年美国| 涩涩视频网站在线观看| 一本色道久久综合狠狠躁篇的优点| 亚洲系列在线观看| 亚洲激情自拍偷拍| 欲求不满的岳中文字幕| 奇米亚洲午夜久久精品| 美国av在线播放| 国产精品玖玖玖在线资源| 欧洲成人在线视频| 日本在线观看网站| 精品国产免费久久| www.欧美色| 亚洲精品午夜| 日韩久久精品成人| www.亚洲激情| 亚洲精品成人悠悠色影视| 国产精品伦子伦| 免费成人在线影院| 日韩一级片免费视频| 国产精品一线天粉嫩av| 99国产高清| 日韩一区二区三区在线免费观看 | aaa国产一区| 欧美女同在线观看| 亚洲狼人精品一区二区三区| 亚洲激情一区二区三区| 精品三级av在线导航| 国产在线精品成人一区二区三区| bl在线肉h视频大尺度| 中文字幕综合一区| 艳母动漫在线看| 91精品国产色综合久久不卡蜜臀| 97久久久久久久| 亚洲人成7777| 日本理论中文字幕| 白白色 亚洲乱淫| 一二三av在线| 青青青伊人色综合久久| 欧美变态另类刺激| 国产精品二区影院| 日本成人性视频| 精品日韩在线| 久久综合福利| 国产欧美一区二区三区米奇| 亚洲va电影大全| 日本在线中文字幕一区二区三区| 97久久精品视频| 四虎亚洲成人| 欧美超级乱淫片喷水| 在线免费看av| 亚洲欧美日韩在线高清直播| 人人妻人人玩人人澡人人爽| 欧美一二区视频| 中文字幕精品在线观看| 色婷婷精品大在线视频| 青青草成人av| 婷婷综合久久一区二区三区| 久久久久久蜜桃| 亚洲免费在线看| 亚洲女人久久久| 国产精品久久久久影院老司| 老熟妇一区二区| 久久精品日产第一区二区三区高清版 | 欧美二区乱c黑人| 国产调教视频在线观看| 日韩在线视频导航| av男人的天堂在线| 中文字幕国产精品| 91在线高清| 日韩在线中文字幕| 伊人免费在线| 精品精品国产国产自在线| 日本高清中文字幕在线| 日韩中文字在线| 麻豆网在线观看| 久久国产精品免费视频| av网址在线免费观看| 久久中文久久字幕| gogogogo高清视频在线| 九九热在线精品视频| 美女尤物在线视频| 久久免费在线观看| 色在线中文字幕| 国产激情999| 日本电影久久久| 91精品国产高清久久久久久91裸体 | 国产乱码精品一区二区三区日韩精品| 91在线一区| 国产精品三区在线| 亚洲综合福利| 视频在线99| 久久久久午夜电影| 成人免费性视频| 亚洲久久视频| 欧美一级片中文字幕| 蜜臀av国产精品久久久久| 午夜伦理一区二区| 深夜福利影院在线观看| 亚洲成人av一区二区| 毛片在线免费视频| 欧美日韩一区视频| www.黄色小说.com| 亚洲欧美日韩一区二区在线| 国产精品色眯眯| 18禁免费无码无遮挡不卡网站| 国产精品乱看| 手机av在线网| 成人一道本在线| 日本少妇高潮喷水xxxxxxx| 国产精品久久久久影院老司| 久久久国产精品黄毛片| 色综合一区二区| 99在线精品视频免费观看20| 亚洲爱爱爱爱爱| av中文在线| 久久久久久久国产| 最新日韩一区| 成人看片视频| 欧美三级美国一级| 999一区二区三区| 日本成人中文字幕| 成年女人免费视频| 国产精品―色哟哟| 五月婷婷开心网| 欧美一区二区三级| 精品av中文字幕在线毛片| 久久国产精品首页| 123成人网| 国产在线欧美日韩| 久久久久久久久国产一区| 欧美私人情侣网站| 国产不卡视频一区二区三区| 欧美性受xxxx黑人| 欧美性感美女h网站在线观看免费| 国产精品一区二区av白丝下载| 精品视频一区在线视频| 中文字幕中文字幕在线十八区 | 91久久精品无码一区二区| 亚洲成人激情在线观看| 毛片激情在线观看| 日韩av免费在线看| 成人动态视频| 韩国黄色一级大片| 久久精品72免费观看| a级片在线观看| 黄网站色欧美视频| 国产黄色美女视频| www.日韩av.com| 日韩一区二区三区在线免费观看 | 在线精品一区| 中文国产在线观看| 中日韩免费视频中文字幕| 亚洲va在线观看| 日韩国产精品一区| 成人性生交大片免费看在线播放| 成人精品视频在线| 欧美高清视频在线观看mv| www.色偷偷.com| 国产日韩欧美电影| 久久精品视频5| 亚洲精选中文字幕| 国模冰冰炮一区二区| 精品欧美国产| 一本久道久久综合婷婷鲸鱼| 国产污在线观看| 亚洲国产视频a| 亚洲欧美另类日韩| 久久久久久亚洲精品中文字幕| 91精品国产自产精品男人的天堂| 久久久久福利视频| 国产69精品久久久久毛片 | 色哟哟在线观看一区二区三区| 午夜视频1000| 欧美亚洲第一区| 久久99精品久久久久久园产越南| 欧美牲交a欧美牲交aⅴ免费下载| 91亚洲精华国产精华精华液| 欧美精品二区三区| 日韩av在线免费播放| 中文字幕一区久| 欧美一区1区三区3区公司| 日韩精品电影在线观看| 四虎国产成人精品免费一女五男| 欧美日韩视频不卡| 久久久久久久久免费视频| 成人免费网站在线观看| 欧美日韩午夜| 日韩综合第一页| 欧美性猛交xxxxx免费看| 国产女主播在线直播| 成人黄色av播放免费| 欧美阿v一级看视频| 天堂www中文在线资源| 一本一道综合狠狠老| av成人手机在线| 99国产在线| 久久aⅴ乱码一区二区三区| 中文字幕伦理片| 欧美一区二区在线播放| 超碰97免费在线| 欧美日韩精品久久久免费观看| 麻豆精品一区二区三区| 欧美黑人精品一区二区不卡| 亚洲国产欧美一区二区三区同亚洲 | 不卡一区二区三区四区五区| 一区二区毛片| 久久久国产一级片| 精品国产91九色蝌蚪| 羞羞影院欧美| 成人一级生活片| 国产欧美日韩三级| 亚洲国产精品国自产拍久久| 欧美在线免费观看| 欧美一区亚洲| 中文字字幕码一二三区| 91精品在线麻豆| 在线日韩影院| 91看片淫黄大片91| 久久精品日产第一区二区三区高清版| av中文字幕在线免费观看| 欧美在线视频免费| 牛牛国产精品| 无码人妻aⅴ一区二区三区69岛| 日韩视频123| 91成人在线| 精品欧美一区免费观看α√| 亚洲人吸女人奶水| 国产日本在线观看|