广场舞草原情歌水兵舞:屏幕坐标如何转化为opengl中的坐标

来源:百度文库 编辑:中财网 时间:2024/04/28 12:27:38
  屏幕坐标如何转化为opengl中的坐标啊?各位帮帮忙 glMatrixMode(GL_MODELVIEW);
glPushMatrix();
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
CPoint rPoint;


glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );

winX = (float)point.x;
winY = (float)viewport[3] - (float)point.y;
glReadPixels( point.x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );


gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY,
&posZ); 这是我从网上看的一段代码,但好像不怎么准确我也遇到这种问题了。就是gluUnProject不起作用,调试的时候传进去的参数都有值,但是返回的posx就没有值了除了与PushMatrix()对应的glPopMatrix()没有,这段代码我没看出什么问题来!以下是一段将屏幕坐标转化为三维空间坐标的代码
GLfloat winX, winY,winZ;
GLdouble posXf, posYf, posZf,posXn, posYn, posZn;
GLdouble posX,posY,posZ;
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
glPushMatrix();
glGetIntegerv(GL_VIEWPORT, viewport); // 得到的是最后一个设置视口的参数
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glPopMatrix();
winX = point.x;
winY = viewport[3] - point.y;
gluUnProject(winX, winY, 0, modelview, projection, viewport, &posXn, &posYn, &posZn);
gluUnProject(winX, winY, .1, modelview, projection, viewport, &posXf, &posYf, &posZf);
posX=-posZf/(posZn-posZf)*(posXn-posXf)+posXf;
posY=-posZf/(posZn-posZf)*(posYn-posYf)+posYf;//posZ默认为0 屏幕坐标如何转化为opengl中的坐标