OpenGL中用鼠标交互时,记得按需要把设备坐标系的原点转为左上方的。
用函数:glOrtho2D函数
函数原型为
void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
说明:
gluOrtho2D(0,400,0,300),之后在绘制点、线的时候,指定坐标,坐标范围应该为X轴上[0,400],Y轴上[0,300],(不管是X轴还是Y轴,每一个单位用一个像素格表示),而且坐标系的原点是左下方的(0,0),因为left=0,bottom=0
调整方法:
交互时,鼠标的坐标是以窗口左上方的顶点为原点,而不是以左下方的顶点为原点的(这是因为默认设备(屏幕)坐标系是按照左上方为原点的),而我们绘制点或者线条的时候,为了和鼠标的位置配合起来,也要把像素坐标的坐标系原点改为左上方的,可以这样做:把
gluOrtho2D(0.0, (GLdouble)w, 0.0,(GLdouble)h)
变为gluOrtho2D(0.0, (GLdouble)w, (GLdouble)h,0.0); //设置裁剪窗口大小
(当然,w和h可以是确切的正整数)
这样,指定了left=0,right=w(width),bottom=h,top=0,也就是y轴向下生长,相当于间接指定了屏幕设备坐标系以左上方为原点,这样就可以与当前鼠标的位置很好地对应起来了,不然会发生手点的鼠标位置与实际在屏幕上显示的点或者线关于窗口中间的水平线轴对称的看起来很怪异的情况。
百科:
glOrtho ()
这个函数描述了一个平行修剪空间。这种投影意味着离观察者较远的对象看上去不会变小(与透视投影相反)。在3D笛卡尔坐标中想象这个修剪空间,左边和右边是最小和最大的X值,下边和上边是最小和最大的Y值,近处和远处是最小和最大的Z值。 正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。