确定Opengl相机坐标和转动后模型坐标

	GLfloat mdl[16];
	glGetFloatv(GL_MODELVIEW_MATRIX, mdl);
	camera_org[0] = -(mdl[0] * mdl[12] + mdl[1] * mdl[13] + mdl[2] * mdl[14]);
	camera_org[1] = -(mdl[4] * mdl[12] + mdl[5] * mdl[13] + mdl[6] * mdl[14]);
	camera_org[2] = -(mdl[8] * mdl[12] + mdl[9] * mdl[13] + mdl[10] * mdl[14]);
 

亲测正确,感谢墙外不知名的大神!困扰了我好长时间T.T

===============================================模型坐标====================================================

//计算该视点下,该点的坐标;
Point_3 new_view_point(Point_3 p){

	double mv_MATRIX [16];
	glGetDoublev( GL_MODELVIEW_MATRIX, mv_MATRIX );

	double inverse_m[16];
	inverse_matrix(mv_MATRIX,4,inverse_m);//得到mv_MATRIX的逆矩阵inverse_m

	double point[4];
	point[0] = p.hx();
	point[1] = p.hy();
	point[2] = p.hz();
	point[3] = 1;

	double result[4];
	multipy_cross(inverse_m,point,result);//模型坐标转换到视点坐标;

	Point_3 newp(result[0],result[1],result[2]);
	return newp;
}
//计算矩阵pModelViewMatrix[16] 叉乘 point[4];
void multipy_cross(double matrix[],double point[],double result[]){
	double matrix1[16];
	for(int i = 0;i<16;i++){
		matrix1[i] = matrix[i];//避免改变matrix的值;
	}

	result[0] = matrix1[0]*point[0] + matrix1[1]*point[1] + matrix1[2]*point[2] + matrix1[3]*point[3];
	result[1] = matrix1[4]*point[0] + matrix1[5]*point[1] + matrix1[6]*point[2] + matrix1[7]*point[3];
	result[2] = matrix1[8]*point[0] + matrix1[9]*point[1] + matrix1[10]*point[2] + matrix1[11]*point[3];
	result[3] = matrix1[12]*point[0] + matrix1[13]*point[1] + matrix1[14]*point[2] + matrix1[15]*point[3];
}


模型转动,相当于模型不动视点转动。

也就是说,可以认为模型没动,求视点坐标后,进行相应操作。

若有必要,可以按照上面的办法求模型转动后的坐标,但视点就不要再计算转动后的了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值