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
})
相关推荐
Highcharts.js1 天前
Highcharts 渲染方式解析:SVG 默认渲染与 Boost 模块的 WebGL 加速,以及它与其他可视化库的不同
svg·webgl·可视化·canvas·highcharts·渲染方式
UWA4 天前
GPM 2.0 WebGL 监测能力扩容|覆盖 Unity/Cocos/LayaAir 多引擎微信 & 抖音小游戏
unity·微信·性能优化·小游戏·webgl
像我这样帅的人丶你还4 天前
🚀苹果的液态玻璃咋做?🚀
前端·webgl·three.js
用户83134859306985 天前
Cesium实现动态流动火烧云晚霞效果(可用slider调整火烧云浓度)
vue.js·webgl·cesium
IT爱学堂5 天前
Three.js可视化企业实战WEBGL课,2023年全新WEB 3D THREEJS技术
前端·javascript·webgl
智商偏低6 天前
attribute 与 uniform 本质区别(WebGL)
webgl
进哥AI研习社7 天前
WebGL 与视频背景——首屏视觉层的性能博弈
性能优化·webgl·gpu·canvas·shader·帧率·视频背景
IT小白杨14 天前
链上任务与海外社媒多账号:环境隔离工具技术横评
经验分享·webgl·chrome devtools·安全架构·指纹浏览器
AI_AGENT_DEV_AI20 天前
数字孪生项目的开发
webgl
supermapsupport21 天前
SuperMap GIS 基础产品 FAQ 集锦(20260807)
webgl·supermap·idesktopx