久久久精品视频在线_免费在线a视频_在线看的黄色网址_懂色av粉嫩av浪潮av_艳妇乳肉豪妇荡乳av_国产午夜大地久久_国产在线观看免费播放_天堂视频免费看_久久精品女同亚洲女同13_各处沟厕大尺度偷拍女厕嘘嘘

當(dāng)前位置: 首頁 >滾動 > 正文

一起學(xué) WebGL:紋理對象學(xué)習(xí)|天天速訊

2023-06-28 03:43:44 來源:前端西瓜哥

大家好,我是前端西瓜哥,今天我們來了解 WebGL 的紋理對象(Texture)


(資料圖片僅供參考)

紋理對象,是將像素(texels)以數(shù)組方式傳給 GPU 的對象,常見場景是貼圖,就是將圖片的數(shù)據(jù)應(yīng)用到 3D 物體上。

紋理對象創(chuàng)建和綁定

先創(chuàng)建紋理對象:

const texture = gl.createTexture(); // 創(chuàng)建紋理對象

然后綁定到紋理單元:

gl.bindTexture(gl.TEXTURE_2D, texture); // 將紋理對象綁定上去
填充方式

紋理是要貼到畫布的某個區(qū)域上的,并不一定剛好設(shè)置一下填充方式。

紋理比繪制區(qū)域大,就要做縮放;紋理比繪制區(qū)域小,就要做放大;紋理沒能完全填充繪制區(qū)域,就要在水平和垂直方向進(jìn)行填充。

這些場景都需要對應(yīng)設(shè)置不同的策略。

// 縮小和放大都都使用 “最近點(diǎn)采樣”gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
紋理單元

WebGL 支持設(shè)置多個紋理單元(Texture Unit),即我們可以將多個圖片放到多個單元中,然后進(jìn)行切換。

就好像手里拿著不同的蓋章,想印哪種圖案就掏出哪個蓋上去。

紋理單元是有上限的,至少要支持 8 個,主流瀏覽器一般支持 16 個。

具體支持幾個,可通過下面代碼獲得。

gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) // 通常是 16

默認(rèn)使用 0 號紋理單元,可通過下面這一行代碼來切換紋理單元:

gl.activeTexture(gl.TEXTURE1); // 開啟 1 號紋理單元

注意這個要在將紋理對象綁定紋理單元之前執(zhí)行。

最后我們需要設(shè)置一下我們的紋理采樣器選擇使用哪個紋理單元:

gl.uniform1i(u_Sampler, 0); // 開啟 0 號紋理對象

不主動調(diào)用這個方法,默認(rèn)會使用 0 號紋理單元。

切換紋理單元是有一定的性能代價的,不建議你在短時間內(nèi)不斷地切換紋理單元。簡單的渲染場景可忽略不計。

純色紋理

畫個純純的紅色紋理。

// 紅色const data = new Uint8Array([  255, 0, 0]);gl.texImage2D(  gl.TEXTURE_2D, // 紋理目標(biāo),這里是二維紋理  0, // 細(xì)節(jié)級別,0 表示最高級別  gl.RGB, // 紋理內(nèi)部格式,還支持其他的比如 gl.RGBA、LUMINANCE(流明)  1, // 寬(寬高的單位為像素,且為 2 的 n 次冪)  1, // 高  0, // 是否描邊。必須為 0(但 opengl 支持)  gl.RGB, // 源圖像數(shù)據(jù)格式  gl.UNSIGNED_BYTE, // 紋素(單個像素)數(shù)據(jù)類型  data // 數(shù)據(jù)數(shù)組,一個個像素點(diǎn));

主要注意的是,gl.texImage2D()方法支持函數(shù)重載,有多種傳入的參數(shù)的方式,注意分辨。具體看 官方文檔。

這里選擇使用 gl.RGB 格式,設(shè)置了一個(255, 0, 0)的紅色顏色值。

最后我們成功畫出一個純紅色塊。

完整代碼:

/** @type {HTMLCanvasElement} */const canvas = document.querySelector("canvas");const gl = canvas.getContext("webgl");const vertexShaderSrc = `attribute vec4 a_Position;attribute vec2 a_TexCoord;varying vec2 v_TexCoord;void main() { gl_Position = a_Position; v_TexCoord = a_TexCoord;}`;const fragmentShaderSrc = `precision highp float;uniform sampler2D u_Sampler;varying vec2 v_TexCoord;void main() {  gl_FragColor = texture2D(u_Sampler, v_TexCoord);}`;// 創(chuàng)建程序?qū)ο骳reateProgram(gl);// 頂點(diǎn)坐標(biāo),紋理坐標(biāo)const verticesTexCoords = new Float32Array([  // 左上點(diǎn)。  // 左邊兩個是頂點(diǎn);右邊兩個是紋理  -0.5, 0.5, 0.0, 1,  // 左下  -0.5, -0.5, 0.0, 0.0,  // 右上  0.5, 0.5, 1, 1,  // 右下  0.5, -0.5, 1, 0.0,]);const FSIZE = verticesTexCoords.BYTES_PER_ELEMENT;// 創(chuàng)建緩存對象const verticesTexBuffer = gl.createBuffer();// 綁定緩存對象到上下文gl.bindBuffer(gl.ARRAY_BUFFER, verticesTexBuffer);// 向緩存區(qū)寫入數(shù)據(jù)gl.bufferData(gl.ARRAY_BUFFER, verticesTexCoords, gl.STATIC_DRAW);// 獲取 a_Position 變量地址const a_Position = gl.getAttribLocation(gl.program, "a_Position");// 將緩沖區(qū)對象分配給 a_Position 變量gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, FSIZE * 4, 0);// 允許訪問緩存區(qū)gl.enableVertexAttribArray(a_Position);// 傳入紋理坐標(biāo)位置信息const a_TexCoord = gl.getAttribLocation(gl.program, "a_TexCoord");gl.vertexAttribPointer(a_TexCoord, 2, gl.FLOAT, false, FSIZE * 4, FSIZE * 2);gl.enableVertexAttribArray(a_TexCoord);/***** 紋理對象 *****/const texture = gl.createTexture(); // 創(chuàng)建紋理對象const u_Sampler = gl.getUniformLocation(gl.program, "u_Sampler"); // 獲取 u_Sampler 地址// 記載圖片gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1); // 翻轉(zhuǎn)紋路圖像的 y 軸gl.activeTexture(gl.TEXTURE0); // 開啟 0 號紋理單元gl.bindTexture(gl.TEXTURE_2D, texture); // 將我們的紋理對象綁定上去// 配置紋理參數(shù)gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);// 【----關(guān)鍵代碼---】配置紋理圖像const data = new Uint8Array([255, 0, 0, 0, 255, 255, 0, 255, 0, 0, 255, 0]);gl.texImage2D(  gl.TEXTURE_2D, // 紋理目標(biāo)  0, // 細(xì)節(jié)級別  gl.RGB, // 紋理內(nèi)部格式  1,  1,  0,  gl.RGB, // 源圖像數(shù)據(jù)格式  gl.UNSIGNED_BYTE, // 紋素數(shù)據(jù)類型  data // 數(shù)據(jù));gl.uniform1i(u_Sampler, 0); // 開啟 0 號紋理對象/****** 繪制 ******/// 清空畫布,并指定顏色gl.clearColor(0, 0, 0, 1);gl.clear(gl.COLOR_BUFFER_BIT);// 繪制矩形,這里提供了 4 個點(diǎn)gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);/**** 封裝的方法 ****/function createProgram(gl) {  /**** 渲染器生成處理 ****/  // 創(chuàng)建頂點(diǎn)渲染器  const vertexShader = gl.createShader(gl.VERTEX_SHADER);  gl.shaderSource(vertexShader, vertexShaderSrc);  gl.compileShader(vertexShader);  // 創(chuàng)建片元渲染器  const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);  gl.shaderSource(fragmentShader, fragmentShaderSrc);  gl.compileShader(fragmentShader);  // 程序?qū)ο? const program = gl.createProgram();  gl.attachShader(program, vertexShader);  gl.attachShader(program, fragmentShader);  gl.linkProgram(program);  gl.useProgram(program);  gl.program = program;}

線上 demo:

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

多個色塊紋理

也可以同時設(shè)置多個色塊。

const data = new Uint8Array([  255, 0, 0, 255,   // 紅色  255, 255, 0, 255, // 黃色  0, 0, 255, 255,  // 藍(lán)色  0, 255, 0, 255,  // 綠色]);gl.texImage2D(  gl.TEXTURE_2D, // 紋理目標(biāo)  0, // 細(xì)節(jié)級別  gl.RGBA, // 紋理內(nèi)部格式  2,  2,  0,  gl.RGBA, // 源圖像數(shù)據(jù)格式  gl.UNSIGNED_BYTE, // 紋素數(shù)據(jù)類型  data // 數(shù)據(jù));

創(chuàng)建了 2x2 4個像素大小的紋理,并制定了這個 4 個像素點(diǎn)的顏色,然后被放大繪制到指定區(qū)域上。

線上演示 demo:

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

圖片紋理

圖片紋理,需要加載玩圖片,將圖片對象綁定到紋理對象上。

// 將紋理圖像分配給紋理對象gl.texImage2D(  gl.TEXTURE_2D,  0, // 細(xì)節(jié)級別  gl.RGB,  gl.RGB,  gl.UNSIGNED_BYTE,  img // Image 實(shí)例);
結(jié)尾

紋理對象是很常用的一個對象,用于指定區(qū)域要填充的像素。

常見的是加載圖片,把圖片貼到三維的一個面上。也可以自己指定像素值。

標(biāo)簽:

返回頂部
国产亚洲精品av| 涩涩网站在线看| 夜夜躁狠狠躁日日躁av| 99精品中文字幕| 青青视频在线播放| 国产精品国产三级国产aⅴ| 韩国一级黄色录像| 久久久久久91亚洲精品中文字幕| 欧美亚一区二区三区| gogogo高清免费观看在线视频| 丁香花免费高清完整在线播放 | 蜜桃视频久久一区免费观看入口| 国产成人生活片| 亚洲综合视频在线播放| 欧美a级黄色大片| 亚洲高清视频免费观看| 国产人妻精品一区二区三区不卡| 亚洲欧美综合自拍| 久久免费看少妇高潮v片特黄 | 日本一卡二卡在线| 亚洲免费黄色录像| 亚洲熟女乱综合一区二区三区| 伊人国产在线视频| 国产不卡一二三| 久久99久久久| 亚洲女优在线观看| 国语对白做受69按摩| 偷偷色噜狠狠狠狠的777米奇| 999久久久精品视频| 中文幕无线码中文字蜜桃| 国产一级理论片| 亚洲少妇xxx| 中文字幕第2页| 91传媒免费视频| 天天色天天操天天射| 黄色国产小视频| 中文字幕日韩三级片| 日本在线免费观看| www.黄色网址.com| 亚洲三区在线观看无套内射| 国产在线观看中文字幕| 你懂得视频在线观看| 中国女人一级一次看片| 我的公把我弄高潮了视频| 神马午夜一区二区| 久久无码精品丰满人妻| 青花影视在线观看免费高清| 国产毛片一区二区三区va在线| 水蜜桃在线免费观看| 色婷婷av一区二区三区之红樱桃 | 91ts人妖另类精品系列| 国产91国语对白在线| 免费看黄在线看| 日本免费福利视频| 精品久久久久久久久久久国产字幕| 国产一区一区三区| 亚欧洲精品视频| 国产高潮久久久| 丰满爆乳一区二区三区| 免费高清视频在线观看| 你懂的国产视频| 国产老熟妇精品观看| 中文字幕 亚洲一区| 这里只有精品国产| 日韩成人精品视频在线观看| mm131午夜| av网页在线观看| 国产精品爽爽久久| 日韩av在线中文| 超碰10000| 丰满少妇一区二区三区| 99riav国产| 日本熟妇毛茸茸丰满| 欧美成人高潮一二区在线看| 日韩视频在线观看免费视频| 亚洲av少妇一区二区在线观看| 97超碰人人爽| 成人午夜精品久久久久久久蜜臀| 国产探花视频在线播放| 人人妻人人澡人人爽精品日本| 国产成人精品网| 欧美黄色性生活| 成年在线观看视频| 丁香花五月婷婷| 精品久久久无码中文字幕| 久久久久99精品| 丁香婷婷激情网| 99热这里只有精品7| 国产精品亚洲无码| 日本人dh亚洲人ⅹxx| 一级片一区二区三区| 久草免费在线观看视频| 欧美牲交a欧美牲交aⅴ免费下载| 精品91一区二区三区| 国产一区二区三区四区五区六区| 亚州av在线播放| 国产三级三级在线观看| 波多野结衣小视频| 亚洲一区二区在线视频观看| 亚欧无线一线二线三线区别| 三年中国中文在线观看免费播放| 中文字幕欧美激情极品| 一出一进一爽一粗一大视频| 四虎永久在线精品免费网址| 国产富婆一级全黄大片| 中文在线免费看视频| 亚洲精品午夜久久久久久久| 日韩欧美亚洲另类| 欧美日韩在线免费播放| 亚洲熟妇无码另类久久久| 欧美a级黄色大片| 在线观看黄网址| 日本黄区免费视频观看| 日韩av在线看免费观看| 久久一区二区电影| 日本黄色录像片| 最新国产精品自拍| 在线观看一区二区三区视频| 你懂的网站在线| 蜜臀av免费在线观看| 亚洲成a人片77777精品| 亚洲精品网站在线| www.天堂av.com| 性欧美18一19性猛交| 97精品人妻一区二区三区在线| 一区二区三区麻豆| 一区二区三区在线免费观看视频| 久久精品国产av一区二区三区| 做a视频在线观看| 激情文学亚洲色图| 尤物网站在线看| 欧美成人精品欧美一级私黄| 久久久精品99| 日韩欧美高清在线观看| 国产在线一区视频| 久久久久久不卡| 日韩av免费播放| 91在线你懂的| 蜜桃在线一区二区| 韩国三级在线看| 亚洲AV无码片久久精品| 免费看一级黄色| 青青草影院在线观看| aa视频在线播放| 不卡av免费在线| 国产精品探花在线播放| 中文字幕亚洲精品在线| 波多野结衣日韩| www.久久视频| 国产91久久久| 又色又爽又黄18网站| 久久精品国产亚洲av麻豆| 黄色免费一级视频| 青青草视频国产| www.com毛片| 国产欧美精品一二三| 日韩xxxxxxxxx| 亚洲自拍偷拍另类| 人人妻人人玩人人澡人人爽| 波多野结衣影院| 老湿机69福利| 欧美视频在线第一页| 九色91popny| 国产精品黄色大片| av男人天堂网| 亚洲精品乱码久久久久久久| 欧美美女性生活视频| 黄色影视在线观看| 日本中文字幕高清| 一二三区免费视频| 三级视频在线看| 国产一级久久久久毛片精品| 日本久久久网站| 一区二区三区入口| 免费av中文字幕| 色婷婷在线视频| 青青草华人在线视频| 国产一线二线三线女| 中文字幕第66页| 一级做a爱片久久毛片| 中国极品少妇xxxx| 亚洲区自拍偷拍| 和岳每晚弄的高潮嗷嗷叫视频| 中文字幕中文在线| 一级黄色片在线播放| 免费无码一区二区三区| www.亚洲视频.com| 亚洲一区 视频| 天堂av资源在线| 林心如三级全黄裸体| www.四虎成人| 久久久久亚洲视频| 免费看的av网站| 欧美性生交大片| 人妻丰满熟妇av无码区app| 国产黄色免费视频| 国产伦精品一区二区免费| 人人妻人人澡人人爽欧美一区 | 九九精品视频免费| 亚洲一区日韩精品| 国产精品久久久久久久成人午夜| 国产ts在线观看| 在线观看av的网址| 草久久免费视频| 一本色道久久hezyo无码| 999一区二区三区| 欧美黑人一区二区| 女同性恋一区二区三区| 每日在线观看av| 日本久久综合网| a级片在线观看| 狠狠97人人婷婷五月| 国产精品传媒在线观看| 美女洗澡无遮挡| 天天干天天av| 天堂中文在线官网| 日韩五码在线观看| 亚洲免费在线观看av| 老鸭窝一区二区| 色多多视频在线播放| 超碰在线播放97| av动漫在线免费观看| 欧美人妻一区二区| 在线观看成人动漫| 欧洲av无码放荡人妇网站| 国产免费高清视频| dy888午夜| 久久亚洲精品国产| av电影网站在线观看| 久久久久久久久久一区| 性一交一黄一片| 少妇性l交大片| 国产精品探花视频| 亚洲精品无码国产| 99热这里是精品| 日韩一二区视频| 国产一区二区在线不卡| 东方av正在进入| 伊人中文字幕在线观看| 久久国产柳州莫菁门| 国产一级中文字幕| 成人免费av片| 69精品久久久| 纪美影视在线观看电视版使用方法| 久久久久久久久久91| 亚洲 小说 欧美 激情 另类| 久操视频免费在线观看| 性欧美精品男男| 日本免费观看视| 日本不卡一二区| 国产精品熟女视频| 成人午夜免费剧场| jizz中国女人| 奇米精品一区二区三区| 原创真实夫妻啪啪av| 亚洲美女性囗交| 亚洲第一综合网| 看黄色一级大片| 欧美做暖暖视频| 黄色成人一级片| 午夜精品久久久久久久无码| 美女又黄又免费的视频| 在线视频观看一区二区| 国产美女免费网站| 国产成人无码专区| 国产精品videossex国产高清| www.国产精品视频| 国产精品无码专区av在线播放 | 国产成人精品毛片| 日韩一级性生活片| 亚洲一二三四五| 久久网中文字幕| 特大黑人娇小亚洲女mp4| 风流老熟女一区二区三区| 不卡的av中文字幕| 少妇高潮惨叫久久久久| 97人妻精品一区二区三区| 国产视频一区二区视频| 国产综合精品在线| 国产喷水福利在线视频| 91制片厂毛片| 免费中文字幕在线| av官网在线观看| 日本精品一区在线| 国产精品av免费| 亚洲av激情无码专区在线播放| 91aaa精品| 久久福利一区二区| jjzzjjzz欧美69巨大| 中文字幕有码视频| 日韩av影视大全| 日本黄大片在线观看| 99久久人妻无码精品系列| 亚洲男人天堂久久| 丁香六月婷婷综合| 一女二男3p波多野结衣| 97在线免费视频观看| 久久精品成人av| 三级小视频在线观看| 中文字幕一区二区三区四区免费看 | 久久午夜福利电影| 亚洲欧美日韩动漫| 一级特黄色大片| 日韩 欧美 综合| 视频免费1区二区三区| 久操网在线观看| 一区二区三区四区久久| 一区二区三区四区免费| 制服下的诱惑暮生| 国产99对白在线播放| 久久久精品毛片| 国产在线一二区| 一二三av在线| 国产自偷自偷免费一区| 久久av综合网| 国产又大又长又粗又黄| 99久久99久久精品免费| 少妇一级淫免费观看| 午夜视频在线播放| 精品人妻少妇嫩草av无码专区| 少妇无套内谢久久久久| 成人免费看片98欧美| 午夜福利123| xx欧美撒尿嘘撒尿xx| www.com毛片| 欧美精品久久久久久久免费| 成人性做爰片免费视频| 成人自拍小视频| 欧美色图17p| 国产一区二区三区精品在线| 37p粉嫩大胆色噜噜噜| 国产精品无码电影| 性活交片大全免费看| 亚洲成年人av| 国产精品成人免费一区久久羞羞| 无码精品人妻一区二区| 少妇精品高潮欲妇又嫩中文字幕 | 亚欧美一区二区三区| 国产精品99久久免费黑人人妻| 国产高清av在线播放| 久久久久99精品成人片试看| 久久人妻无码aⅴ毛片a片app| 伊人久久一区二区三区| 精品国产区一区二| 亚洲精品久久久狠狠狠爱| 中文字幕有码无码人妻av蜜桃| 中文在线观看av| 国产免费www| 91 中文字幕| 中文字幕日本人妻久久久免费| 亚洲天堂网视频| 伊人亚洲综合网| 波多野结衣电车| 亚洲图片视频小说| 中文字幕+乱码+中文字幕明步| 伊人久久一区二区| 中文字幕免费播放| a天堂中文在线观看| 国产精品无码一区二区桃花视频| 亚洲午夜精品久久久| 在线观看国产一区二区三区| 国产一级片av| 国产免费的av| 性欧美18一19性猛交| 超级砰砰砰97免费观看最新一期| 婷婷五月综合久久中文字幕| 亚洲高清无码久久| 日b视频在线观看| 网站黄在线观看| 喷水视频在线观看| 一区二区三区久久久久| 国产系列第一页| 麻豆映画在线观看| 亚洲人成无码www久久久| 亚洲一区二区三区四区五区xx| 免费在线观看国产精品| 久久在线视频精品| 国产一区二区麻豆| av中文字幕免费在线观看| 波多野结衣啪啪| 风流老熟女一区二区三区| 天堂中文网在线| 美女100%露胸无遮挡| 免费高清在线观看电视| 91视频最新入口| 在线看的黄色网址| 精品不卡一区二区| 国产精品无码免费播放| 中国一级特黄录像播放| 少妇av片在线观看| 性一交一乱一伧国产女士spa| 成人小视频在线看| 精品欧美一区二区三区免费观看| 中文字幕 日韩有码| av加勒比在线| 亚洲人成人无码网www国产| 婷婷久久综合网| 人人干人人干人人| 精品在线播放视频| 蜜桃在线一区二区|