canvas坐标系转webgl坐标系

红色的canvas坐标系,蓝色是webgl坐标系

需要注意的地方有三点

  1. 坐标原点不同,需要将canvas的中间位置作为webgl的原点,求出绿色的点相对于canvas中间位置的偏移量
  2. 求出绿色的点 相对于canvas中间位置的偏移量 对应的webgl的位置
  3. 处理y轴,canvas的y向下,webgl的y轴向上,需要将 y 的值取反

代码为鼠标点击canvas,获取当前的点的webgl坐标

复制代码
canvas.addEventListener('click', (e) => {
    // 第一步:e.clientX 是鼠标在网页中的位置,需要根据 e.clientX 求出鼠标在canvas中的位置
    const { clientX, clientY } = e
    const { top, left } = canvas.getBoundingClientRect();
    const [canvasX, canvasY] = [clientX - left, clientY - top]

    // 第二步:求canvas中的坐标值对应的webgl的坐标值
    // 1、处理原点,以canvas的中间位置(canvas.width/2,canvas.height/2)作为webgl的原点(0,0),求出鼠标当前位置在canvas系统中相对于webgl中的位置
    const canvasOffsetX = canvasX - canvas.width / 2
    const canvasOffsetY = canvasY - canvas.height / 2

    // 2、将canvas系统中的坐标值转换成webgl中的值
    const canvas2WebglX = canvasOffsetX / (canvas.width / 2)
    const canvas2WebglY = canvasOffsetY / (canvas.height / 2)

    // 3、处理y轴,canvas的y向下,webgl的y轴向上
    const canvas2WebglY2 = -canvas2WebglY;

    // canvas2WebglX 即为鼠标点在webgl中的x,canvas2WebglY2 即为鼠标点在webgl中的y
})
相关推荐
ThreePointsHeat3 天前
Unity WebGL打包后启动方法,部署本地服务器
unity·游戏引擎·webgl
林枫依依5 天前
电脑配置流程(WebGL项目)
webgl
冥界摄政王6 天前
CesiumJS学习第四章 替换指定3D建筑模型
3d·vue·html·webgl·js·cesium
温宇飞8 天前
高效的线性采样高斯模糊
javascript·webgl
冥界摄政王9 天前
Cesium学习第一章 安装下载 基于vue3引入Cesium项目开发
vue·vue3·html5·webgl·cesium
光影少年12 天前
三维前端需要会哪些东西
前端·webgl
nnsix12 天前
Unity WebGL jslib 通信时,传入字符串,变成数值 问题
webgl
二狗哈12 天前
Cesium快速入门34:3dTile高级样式设置
前端·javascript·算法·3d·webgl·cesium·地图可视化
AlanHou12 天前
Three.js:Web 最重要的 3D 渲染引擎的技术综述
前端·webgl·three.js
二狗哈13 天前
Cesium快速入门33:tile3d设置样式
3d·状态模式·webgl·cesium·地图可视化