得到的是模型坐标!
void C3DSLoader::GetCoordinate(float x,float y,float z,float& resultx,float& resulty,float& resultz,int intMode)
{
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
GLdouble Point3f[3]; //
glMatrixMode(GL_MODELVIEW);
//glLoadIdentity();
//gluLookAt(0,0,0, 0,0,-10, 0,1,0);
//glLoadIdentity();
//gluLookAt(vertor3Eye.x,vertor3Eye.y,vertor3Eye.z,vertor3Center.x,
//vertor3Center.y,vertor3Center.z,vertor3Up.x,vertor3Up.y,vertor3Up.z);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
if(intMode==0)
{
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels(int(winX), int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
resulty= (float)posY;
}
else if(intMode==1)
{
winX = x;
winY = y;
winZ=z;
// gluProject(winX, winY, winZ, modelview, projection, viewport, (GLdouble*)&resultx, (GLdouble*)&resulty, (GLdouble*)&resultz);
gluProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
resulty=(float)viewport[3] - (float)posY;
}
resultx=(float)posX;
resultz=(float)posZ;
//Point3f[0] = posX;//*100;
//Point3f[1] = posY;//*100;
//Point3f[2] = posZ;//*100;
//QString strMessage=QString("X = %1,Y = %2,Z = %3s").arg(Point3f[0]).arg(Point3f[1]).arg(Point3f[2]);
//
//QMessageBox::warning(null,"",strMessage);
}