2012-02-03 200 views
1

我在用OpenGLES的包装纸写2D游戏。有一个相机瞄准一堆纹理,这是游戏的精灵。用户应该能够通过在屏幕上移动手指来移动视图。问题是,相机距离纹理约100个单位,所以当手指滑过屏幕以平移相机时,由于视差效应,精灵比手指移动得更快。所以基本上,我需要将2D屏幕坐标转换为距离特定z距离的三维坐标(在我的情况下为100,因为这是纹理的距离)。将2D屏幕坐标转换为C++中的3D空间坐标?

C#中有一些"Unproject"函数,但我使用C++,所以我需要这个函数背后的数学。我对3D的东西非常陌生,在数学方面我非常不好,所以如果你能解释你喜欢解释给一个10岁的孩子,我会非常感激。

如果我能做到这一点,我可以以这样的速度平移相机,所以它看起来像遥远的精灵用用户的手指平移。

+1

一些10岁的孩子数学能力很强:P – 2012-02-03 06:47:45

回答

0

找到在答案: Wikipedia

它具有以下化学式:
enter image description here

为了确定哪个屏幕的x坐标对应于在Ax上点,AZ乘以点由坐标

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

+0

尽管这在理论上可以回答这个问题,但我们希望您在答案中包含链接文章的基本部分,并提供[链接供参考](http ://meta.stackexchange.com/q/8259)。如果做不到这一点,答案就会受到链接腐败的威胁。 – Kev 2012-02-05 20:07:44

0

一般来说,你将不得不缩放你的手指移动距离,以在远离的平面(z单位)使用它。

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

相关问题