地形编辑中用到最多的就是鼠标点选
假设摄像机视点在o如图所示,玩家点击的P点(nMouseX,nMouseY),如果能求出OP向量那么用此向量与场景的三角形求交即可实现鼠标的点选功能
一般在图形程序中可以获得的变量包括视点坐标O,视点的方向向量O',向上的方向向量UP,以及透视参数的中的视野张角θ,屏幕的像素高nHeight和像素宽nWidth,最近可是距离fMinView,最远可视距离fMaxView
下面就用伪代码通过这些变量求取P在世界坐标系下的坐标:
1.求出屏幕在世界坐标下的宽AB和高AC
AB = tan(θ/2)*fMinView*2.0f
AC = AB*nHeight/nWidth
2.计算P点与屏幕中心的像素坐标差
nDifferX = nMouseX - nWidth/2
nDifferY = nHeight/2 - nMouseY (windows系统中鼠标在左上点为0,0点)
2.求出与OO'和UP的正交向量Right = cross(OO',UP)
3.求出O'P向量
O'P = nDifferX/nWidth*AB*Right + nDifferY/nHeight*AB*UP
4.P点的坐标为O'+O'P