gluLookAt和gluPerspective原理
来源:互联网 发布:微博盗号软件 编辑:程序博客网 时间:2024/05/02 04:35
gluLookAt设定了眼睛位置eye,观察点center,观察者方向up。
gluPerspective设定了沿y轴的视野范围fovy(视景体上下两平面的夹角),屏幕的水平/竖直比例aspect,近截面与眼睛距离zNear,远截面与眼睛距离zFar.
现有如下物体。
投影后的情况如下所示:
用鼠标在屏幕上选择点As(x,y),可以用下函数获得远投影面上点的世界坐标Ap(X,Y,Z)
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点的世界坐标。
对于由点云构成的物体,可以用点与直线的距离来找出物体上与直线最近的点。
- gluLookAt和gluPerspective原理
- glShadeModel,gluPerspective和gluLookAt
- gluPerspective和gluLookAt
- gluPerspective和gluLookAt的关系
- gluPerspective和gluLookAt的关系
- gluPerspective和gluLookAt的关系
- gluPerspective和gluLookAt的关系
- gluPerspective和gluLookAt的关系
- gluPerspective和gluLookAt的关系
- 【读书笔记】gluLookAt和glOrtho,gluPerspective
- gluPerspective和gluLookAt的关系
- gluPerspective和gluLookAt的关系
- gluPerspective和gluLookAt的关系
- gluPerspective & gluLookAt
- (转)gluPerspective和gluLookAt的关系
- 再议gluPerspective和gluLookAt的关系
- 再议gluPerspective和gluLookAt的关系
- 再议gluPerspective和gluLookAt的关系
- 什么是可重入的函数
- 什么是长尾关键词751
- HDU 1163
- SQL 递归找查所有子节点及所有父节
- 什么是长尾关键词986
- gluLookAt和gluPerspective原理
- JAVA 取 数据库里Blob字段值为字符串的方法
- spring有三种启动方式
- Ajax核心代码
- qc知识点
- COleVariant
- mysql代码样例
- 类和对象(1)
- 第三届ATI自动化荣誉