我目前正在尝试将屏幕空间中的触摸转换为我正在处理的2D游戏在worldspace中的位置。iPhone操作系统 - 屏幕空间转换为世界空间
我正在使用的视图具有与屏幕几乎相同的坐标系,基本上,如果有人触摸屏幕上的x = 345,y = 500像素,它将在视图上相同,尽管y会向后,因为opengl使用左下角0而不是左上角。
“摄像头”在0,0,0向下看负Z.我说“相机”,因为我还没有编码一个。现在我只是将每个精灵Z翻译为-100。
的伪代码迄今我已经试过(和数学一直双重检查)是这样的 -
// scale the screen point into a value from 0 to 1
point = { screenPoint.x/screenWidth, screenPoint.y/screenHeight, -100, 1 }
// doing a full inverse here, not just swapping rows and cols
out = Inverse(viewProjection) * point
inverseW = 1/out.w
finalWorldCoord = out * inverseW
的问题是,这是给我的值是比他们应该是什么样的方式少,我不知道为什么。
这是在iPhone OS 3.2上的OpenGL ES 2.0。
有没有人知道这样做的正确方法?
你能告诉你的OpenGL初始化代码? – 2010-02-22 21:42:57
不要将你的z设置为-100。投影矩阵将实际的Z值转换为介于0和1之间的值,其中0为近平面,1为远平面。尝试将其设置为0,那么应该给你你想要的。 – Sekhat 2010-02-24 09:38:56