[英]Converting Screen 2D to World 3D Coordinates
我想将2D屏幕坐标转换为3D世界坐标。 我进行了很多搜索,但没有得到满意的结果。
注意:我没有使用OpenGL或任何其他图形库。
我拥有的数据:
屏幕X
屏幕Y
屏幕高度
屏幕宽度
长宽比
如果您拥有“相机世界”矩阵和“投影矩阵”,这将非常简单。
如果您没有世界矩阵,则可以根据其位置和旋转度对其进行计算。
worldMatrix = Translate(x, y, z) * RotateZ(z_angle) * RotateY(y_angle) * RotateX(x_angle);
其中平移返回4x4平移矩阵,而Rotate返回围绕给定轴的4x4旋转矩阵。
投影矩阵可以从纵横比,视场角以及近平面和远平面中计算得出。
该博客很好地解释了如何计算投影矩阵。
您可以通过以下操作取消投影屏幕坐标:
mat = worldMatrix * inverse(ProjectionMatrix)
dir = transpose(mat) * <x_screen, y_screen, 0.5, 1>
dir /= mat[3] + mat[7] + mat[11] + mat[15]
dir -= camera.position
光线将从相机指向方向dir。
这应该可以工作,但它不是如何执行此操作的超级示例。
基本上,您只需要执行以下步骤:
calculate camera's worldMatrix
calculate camera's projection matrix
multiply worldMatrix with inverse projection matrix.
create a point <Screen_X_Value, Screen_Y_Value, SOME_POSITIVE_Z_VALUE, 1>
apply this "inverse" projection to your point.
then subtract the cameras position form this point.
产生的矢量是相机的方向。 沿该射线的任何点都是与2D屏幕坐标对应的3D坐标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.