繁体   English   中英

在C ++中将2D屏幕坐标转换为3D空间坐标?

[英]convert 2D screen coordinates to 3D space coordinates in C++?

我正在使用OpenGLES包装器编写2D游戏。 有一个针对大量纹理的相机,这些纹理是游戏的精灵。 用户应该能够通过在屏幕上四处移动手指来四处移动视图。 问题是,相机距离纹理大约100个单位,因此当手指在屏幕上滑动以平移相机时,由于视差效果,子画面的移动速度比手指快。

因此,基本上,我需要将2D屏幕坐标转换为距离指定z距离的3D坐标(在我的情况下为100距离,因为那是纹理的距离)。

C#有一些“ Unproject”函数,但是我使用的是C++所以我需要此函数背后的数学知识。 我对3D知识非常陌生,并且数学能力很差,因此如果您能像向10岁的孩子讲解那样进行解释,将不胜感激。

如果可以这样做,我可以以这样的速度摇摄相机,以便看起来遥远的精灵正在用用户的手指摇摄。

Wikipedia上找到了答案

它具有以下公式:

要确定哪个屏幕x坐标对应于Ax,Az处的点,请将该点坐标乘以:
在此处输入图片说明

其中Bx是屏幕x坐标
轴是模型x坐标
Bz是焦距,即从相机中心到图像平面的轴向距离
Az是被摄体距离。

出于拾取目的,有比进行反向投影更好的方法。 看到这个答案: https : //stackoverflow.com/a/1114023/252687

通常,您必须缩放手指的移动距离才能在较远的平面(z单位)内使用它。

即,它的l单位是手指移动的量,如果您想找到距离z单位的距离,则长度l'= l / z但是,请检查效果并调整l'(加倍/减半)以获得理想的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM