Matrix 非项目Webgl

Matrix 非项目Webgl,matrix,graphics,camera,webgl,Matrix,Graphics,Camera,Webgl,所以我尝试在WebGL中创建一个2d绘图程序,我可以很好地绘制所有东西,但是我很难检测鼠标点击的位置 我有一个4x4投影矩阵,设置如下: mat4.perspective(45, this.gl.viewportWidth / this.gl.viewportHeight, 0.1, 100.0, projectionMatrix); 然后,我有一个4x4视图矩阵,它保持摄像机的位置,如下所示: mat4.translate(viewMatrix, [camera.getX(), camera

所以我尝试在WebGL中创建一个2d绘图程序,我可以很好地绘制所有东西,但是我很难检测鼠标点击的位置

我有一个4x4投影矩阵,设置如下:

mat4.perspective(45, this.gl.viewportWidth / this.gl.viewportHeight, 0.1, 100.0, projectionMatrix);
然后,我有一个4x4视图矩阵,它保持摄像机的位置,如下所示:

mat4.translate(viewMatrix, [camera.getX(), camera.getY(), camera.getZoom()]);
我可以得到屏幕上鼠标点击位置的2d向量,范围从左上角的
[-1,-1]
到右下角的
[1,1]

我想做的是获取相机的当前位置,获得z平面上的截锥体边界,然后使用我的相对鼠标单击位置获得z平面上的实际世界空间位置

注:

  • 相机不旋转,仅平移和缩放
  • 所有内容都绘制在z=0平面上的模型矩阵上

那么为什么要使用透视投影矩阵呢?不管怎么说,你看过一般的非投影吗?基本上,你想用鼠标坐标乘以逆视图投影矩阵,我想用投影矩阵来放大和缩小。是否有其他选择?是的,使用正交投影矩阵。但是这两种方法的取消投影过程是相同的(尽管透视矩阵需要一个合理的深度)。是否与您正在寻找的类似?您可能会发现。平移和缩放可以被认为是在堆栈中预先设置平移和缩放矩阵。