成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一起學 WebGL:坐標系

開發(fā) 前端
WebGL 的世界坐標系使用右手坐標系,當然坐標系可以通過矩陣計算進行轉換,理論上你可以使用任何你想要的坐標系。

大家好,我是前端西瓜哥,今天我們來學習 WebGL。

WebGL 的世界坐標系是三維的。默認使用笛卡爾坐標系的右手坐標系,滿足右手定則,即 x 軸向右,y 軸向上,z 軸向著觀察者,原點位于畫布中心。

圖片

然后是比較微妙的東西是坐標值,使用的是百分比。

比如對于 x 維度,取值范圍為 [-1, 1]。比如 -1 表示在屏幕的最左側,1 表示在屏幕的最右側,0 則是在原點,0.5 表示在 x 正半軸的 1/2 處。其他維度同理。

圖片

demo

下面提供繪制一個紅色點的 demo。

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

修改代碼開頭的 x、y、z 坐標值,體驗不同坐標的繪制效果。

/**
* wegbl 繪制一個點
*/

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

const x = 0;
const y = 0;
const z = 0; // 因為沒有引入透視矩陣,所以設置 y 沒啥效果

const vertexShaderSrc = `
void main() {
gl_Position = vec4(${x.toFixed(1)}, ${y.toFixed(1)}, ${z.toFixed(1)}, 1.0);
gl_PointSize = 10.0;
}
`;

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

/**** 渲染器生成處理 ****/
// 創(chuàng)建頂點渲染器
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);
// 程序對象
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
gl.program = program;

/** 畫布繪制 **/
// 清空畫布,并指定顏色
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
// 繪制點
gl.drawArrays(gl.POINTS, 0, 1);

效果是:

圖片

瀏覽器坐標轉 WebGL 坐標

瀏覽器上的點擊事件,其坐標位置(e.clientX 和 e.clientY)使用的坐標系系統和 WebGL 不同。該坐標系的原點位于左上角,x 向右,但 y 是向下的。

所以如果希望光標的位置,在視覺上能夠對應上 WebGL 的同一個地方,我們需要做一個坐標轉換(這里假設 Canvas 左上角和網頁左上角在一個位置)。

const newX = (x - canvas.height / 2) / (canvas.height / 2);
const newY = (canvas.width / 2 - y) / (canvas.width / 2);

思路是將坐標移動到畫布中心,如果軸向反了,取反,然后再除以畫布尺寸的一半,得到一個百分比值。

結尾

WebGL 的世界坐標系使用右手坐標系,當然坐標系可以通過矩陣計算進行轉換,理論上你可以使用任何你想要的坐標系。本文講了瀏覽器的坐標系,我們還有紋理坐標系,圖片坐標系等坐標系,繪制到 WebGL 畫布上需要做一層轉換,以后再講解。

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

2023-05-04 08:48:42

WebGL復合矩陣

2023-06-26 15:14:19

WebGL紋理對象學習

2023-04-26 07:42:16

WebGL圖元的類型

2023-04-12 07:46:24

JavaScriptWebGL

2023-05-16 07:44:03

紋理映射WebGL

2023-05-31 20:10:03

WebGL繪制立方體

2023-04-13 07:45:15

WebGL片元著色器

2023-04-11 07:48:32

WebGLCanvas

2023-05-17 08:28:55

2023-04-27 08:27:29

WebGL變形矩陣

2023-04-17 09:01:01

WebGL繪制三角形

2023-05-08 07:29:48

WebGL視圖矩陣

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發(fā)畫布功能

2023-05-06 07:23:57

2024-02-28 12:12:20

Pipeline數據機制

2023-11-13 22:27:53

Mapping數據庫

2023-02-28 07:28:50

Spritepixijs
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品第一国产综合野 | 狠狠视频| 午夜久久久 | 日韩国产欧美一区 | 成人在线观看免费视频 | 伊人网影院 | 国产aa | 黄色一级免费看 | 久久久九九九九 | 亚洲一区在线免费观看 | 正在播放亚洲 | 综合精品 | 久久一级 | 亚洲www啪成人一区二区 | 国产成人免费视频网站视频社区 | 欧美久久不卡 | 99久久婷婷国产综合精品首页 | 日韩一区二区三区在线观看 | 国产一区影院 | 一区二区三区四区视频 | 一道本不卡 | 免费一级欧美在线观看视频 | 天天操天天干天天曰 | 日本 欧美 国产 | 国产综合久久 | 亚洲国产精品一区二区久久 | 色婷婷一区二区三区四区 | 97久久精品午夜一区二区 | 美女黄频 | 国产又爽又黄的视频 | 一区二区三区免费网站 | 亚洲 欧美 日韩在线 | 男女网站视频 | 狠狠操狠狠操 | 国产男女视频网站 | 国产精品毛片无码 | 国产精品成人一区二区 | 日本涩涩网 | 精品av天堂毛片久久久借种 | 国产精品69毛片高清亚洲 | 成人在线视频免费看 |