得到的是模型坐标!
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); }