Opengl 如何将二维坐标反向投影到三维中的z=n平面
我想将二维坐标“取消投影”回三维空间,到给定的Opengl 如何将二维坐标反向投影到三维中的z=n平面,opengl,3d,webgl,Opengl,3d,Webgl,我想将二维坐标“取消投影”回三维空间,到给定的z平面。(其中z是已知的,投影的2D坐标和使用的pMatrix和mvMatrix也是已知的) Web搜索只显示了glunproject的变体,这些变体具有完全不同的用途 首先确保屏幕坐标位于正确的坐标空间,即-1和1之间 然后,需要将投影矩阵和模型视图矩阵合并为一个矩阵。使用Javascript的示例代码,为方便起见: var m = mat4.create(); mat4.multiply(m, pMatrix, mvMatrix); 在维基百科
z
平面。(其中z是已知的,投影的2D坐标和使用的pMatrix
和mvMatrix
也是已知的)
Web搜索只显示了
glunproject
的变体,这些变体具有完全不同的用途 首先确保屏幕坐标位于正确的坐标空间,即-1
和1
之间
然后,需要将投影矩阵和模型视图矩阵合并为一个矩阵。使用Javascript的示例代码,为方便起见:
var m = mat4.create();
mat4.multiply(m, pMatrix, mvMatrix);
在维基百科上你可以找到基本的。分解这些乘法,并为x
和y
求解它们,将为您提供(mxMaxima的屏幕截图):
请注意索引中的列主格式
该公式的JS版本(已知x2
和y2
为投影二维坐标,x
和y
为原始三维坐标和原始z
):
作为奖励,您可以通过以下方式获得与投影平面的距离:
var w = m[10]*z+m[6]*y+m[2]*x+m[14];
首先确保屏幕坐标位于正确的坐标空间,即
-1
和1
之间
然后,需要将投影矩阵和模型视图矩阵合并为一个矩阵。使用Javascript的示例代码,为方便起见:
var m = mat4.create();
mat4.multiply(m, pMatrix, mvMatrix);
在维基百科上你可以找到基本的。分解这些乘法,并为x
和y
求解它们,将为您提供(mxMaxima的屏幕截图):
请注意索引中的列主格式
该公式的JS版本(已知x2
和y2
为投影二维坐标,x
和y
为原始三维坐标和原始z
):
作为奖励,您可以通过以下方式获得与投影平面的距离:
var w = m[10]*z+m[6]*y+m[2]*x+m[14];
最初的二维坐标系是什么坐标系?我有点惊讶,您可以在不知道视口映射的情况下执行此操作,但前提是您从窗口空间坐标开始。@AndonM.Coleman二维坐标必须位于
-1+1
空格。您只需将像素(鼠标)坐标与视口的像素宽度和高度分开,因此(0,0)是视口的中心,几乎可以肯定地否定y
值。-其他(信息方面的)都在你的两个矩阵中。最初的二维坐标系是什么?我有点惊讶,您可以在不知道视口映射的情况下执行此操作,但前提是您从窗口空间坐标开始。@AndonM.Coleman二维坐标必须位于-1+1
空格。您只需将像素(鼠标)坐标与视口的像素宽度和高度分开,因此(0,0)是视口的中心,几乎可以肯定地否定y
值。-其他一切(信息方面)都在您的两个矩阵中。