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
})
相关推荐
丫丫7237341 天前
Three.js 模型树结构与节点查询学习笔记
javascript·webgl
allenjiao3 天前
WebGPU vs WebGL:WebGPU什么时候能完全替代WebGL?Web 图形渲染的迭代与未来
前端·图形渲染·webgl·threejs·cesium·webgpu·babylonjs
mapvthree4 天前
mapvthree Engine 设计分析——二三维一体化的架构设计
webgl·数字孪生·mapvthree·jsapi2d·jsapigl·引擎对比
GISer_Jing5 天前
3D Cesium渲染架剖析
javascript·3d·webgl
Swift社区5 天前
用 Chrome DevTools 深度分析 Vue WebGL 内存泄漏(进阶篇)
vue.js·webgl·chrome devtools
GISer_Jing7 天前
3DThreeJS渲染核心架构深度解析
javascript·3d·架构·webgl
ThreePointsHeat7 天前
Unity 关于打包WebGL + jslib录制RenderTexture画面
unity·c#·webgl
GISer_Jing9 天前
Three.js核心技术解析:3D开发指南
javascript·3d·webgl
l***O52012 天前
免费的WebGL性能优化,纹理压缩与实例化
性能优化·webgl
二川bro13 天前
第38节:WebGL 2.0与Three.js新特性
开发语言·javascript·webgl