gluLookAt和gluPerspective原理

来源:互联网 发布:微博盗号软件 编辑:程序博客网 时间:2024/05/02 04:35
gluLookAt设定了眼睛位置eye,观察点center,观察者方向up。
gluPerspective设定了沿y轴的视野范围fovy(视景体上下两平面的夹角),屏幕的水平/竖直比例aspect,近截面与眼睛距离zNear,远截面与眼睛距离zFar.

现有如下物体。


投影后的情况如下所示:
用鼠标在屏幕上选择点As(x,y),可以用下函数获得远投影面上点的世界坐标Ap(X,Y,Z)
void GetOGLPos(int x, int y, double * posX, double * posY, double * posZ){       GLint viewport[4];       GLdouble projection[16];       GLfloat winX, winY, winZ;             GLint Viewport[4];       glGetIntegerv(GL_VIEWPORT, Viewport);       GLdouble ModelMatrix[16];    glGetDoublev(GL_MODELVIEW_MATRIX, ModelMatrix);    GLdouble ProjMatrix[16];       glGetDoublev(GL_PROJECTION_MATRIX, ProjMatrix);       glGetDoublev( GL_MODELVIEW_MATRIX, ModelMatrix );       glGetDoublev( GL_PROJECTION_MATRIX, ProjMatrix );       glGetIntegerv( GL_VIEWPORT, Viewport );       winX = (GLdouble)x;       winY = (GLdouble)(Viewport[3] - (GLint)y-1);       //glReadPixels( winX,winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );       // 第三个参数:1表示远裁剪面,0表示近裁剪面。       int nX = int(x);       int nY = int(Viewport[3] - (GLint)y-1);       // gluUnProject( nX, nY, 0, ModelMatrix, ProjMatrix, Viewport, posX, posY, posZ);       gluUnProject( nX, nY, 1, ModelMatrix, ProjMatrix, Viewport, posX, posY, posZ);}


eye与Ap的直线与物体相交的点即为A点的世界坐标。

对于由点云构成的物体,可以用点与直线的距离来找出物体上与直线最近的点。


原创粉丝点击