|
|
发表于 2008-4-15 15:53:00
|
显示全部楼层
Re:关于照相机变换的问题,敬请赐教。
关于Look和LookAt的区别,见下面的代码。
void Mat44LookLH(MAT44 *mat,const VEC3 *eye,const VEC3 *look,const VEC3 *up)
{
VEC3 zaxis,xaxis,yaxis;
zaxis=*look; // LH !!
Vec3Normalize(&zaxis,&zaxis);
Vec3CrossVec3(&xaxis,up,&zaxis);
Vec3Normalize(&xaxis,&xaxis);
Vec3CrossVec3(&yaxis,&zaxis,&xaxis);
mat->_11=xaxis.x; mat->_12=yaxis.x; mat->_13=zaxis.x; mat->_14=0;
mat->_21=xaxis.y; mat->_22=yaxis.y; mat->_23=zaxis.y; mat->_24=0;
mat->_31=xaxis.z; mat->_32=yaxis.z; mat->_33=zaxis.z; mat->_34=0;
mat->_41=-Vec3DotVec3(eye,&xaxis); mat->_42=-Vec3DotVec3(eye,&yaxis); mat->_43=-Vec3DotVec3(eye,&zaxis); mat->_44=1;
}
void Mat44LookAtLH(MAT44 *mat,const VEC3 *eye,const VEC3 *at,const VEC3 *up)
{
VEC3 zaxis,xaxis,yaxis;
Vec3MinusVec3(&zaxis,at,eye); // LH !!
Vec3Normalize(&zaxis,&zaxis);
Vec3CrossVec3(&xaxis,up,&zaxis);
Vec3Normalize(&xaxis,&xaxis);
Vec3CrossVec3(&yaxis,&zaxis,&xaxis);
mat->_11=xaxis.x; mat->_12=yaxis.x; mat->_13=zaxis.x; mat->_14=0;
mat->_21=xaxis.y; mat->_22=yaxis.y; mat->_23=zaxis.y; mat->_24=0;
mat->_31=xaxis.z; mat->_32=yaxis.z; mat->_33=zaxis.z; mat->_34=0;
mat->_41=-Vec3DotVec3(eye,&xaxis); mat->_42=-Vec3DotVec3(eye,&yaxis); mat->_43=-Vec3DotVec3(eye,&zaxis); mat->_44=1;
}
|
|