unity中屏幕坐标转换为世界坐标问题
首先简单练习一下坐标转换(熟练坐标转换的可以直接看结论或分析)
练习
题目场景:原坐标系的原点(0,0)偏移到(1,1)点
1.分清点问题还是坐标问题(关键步骤避免坐标系变换让人头晕)
点问题还是坐标问题,点问题还是坐标问题,点问题还是坐标问题
点问题:绝对固定点的坐标值变换
例如上述中的原坐标系的(2,2)点,在新坐标系中是(1,1),虽然坐标改变了但是点没有变
坐标问题:新旧坐标相同的点变化
例如上述问题中(0,0)偏移到(1,1),新旧坐标系均是(0,0),坐标相同但是是不同点
2.定义偏移量(结论)
我们再定义一个偏移量
点问题中,偏移量=新坐标-旧坐标=(1,1)-(2,2)
坐标问题中,偏移量=旧坐标系原点-旧坐标系新点=新坐标系原点-新坐标系新点
=(0,0)-(1,1)=(-1,-1)-(0,0)(原点和新点是根据偏移过程判断)
分析屏幕坐标转换为世界坐标
我们假设屏幕的宽和高设为和世界坐标相同(注意),在game栏中长2W,宽2H
现在的问题是一个鼠标坐标(0,0,0)转换成世界坐标后变成了(-W,-H,-10),世界坐标系中原点是(0,0,0)
在这个点问题中,偏移量是(-W,-H,-10)
凭借结论我们可以很轻易的得到世界坐标系中原点(屏幕坐标系原点在世界坐标系的坐标)是:新坐标新点+偏移量=(W,H,-10)
我们看出屏幕坐标原点在左下角的位置投影到z=-10的位置,也就是说与相机同面的左下角点就是屏幕坐标系原点。
验证:
旧坐标系新点=旧坐标系原点-偏移量=(0,0,0)-(-W,-H,-10)=(-W,-H,10)
结论
要将屏幕坐标的z值转换成z=游戏对象所在平面z值-摄像头z值(均在世界坐标系中),即目标对象在屏幕坐标系的z值。