gluUnProject()函数得到的是什么坐标

得到的是模型坐标!

 

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);
}


 

 

 

你可能感兴趣的:(c,null,float,Matrix)