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

gluUnProject()函数用于将屏幕坐标转换为模型坐标,从OpenGL视角和投影变换后的二维坐标反向映射到三维空间中的原始位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

得到的是模型坐标!

 

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


 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值