我想创建一个公式来旋转我的对象(o1)以始终指向另一个对象(o2)的方向,而不管o1的位置。
有点像下图中的相机: http://puu.sh/bLUWw/aaa653accf.png
到目前为止我得到了以下代码,但偏航轴似乎是倒置的:
Vector3 lookat = { lookAtPosition.x, lookAtPosition.y, lookAtPosition.z };
Vector3 pos = { position.x, position.y, position.z };
Vector3 objectUpVector = { 0.0f, 1.0f, 0.0f };
Vector3 zaxis = Vector3::normalize(lookat - pos);
Vector3 xaxis = Vector3::normalize(Vector3::cross(objectUpVector, zaxis));
Vector3 yaxis = Vector3::cross(zaxis, xaxis);
Matrix16 pm = {
xaxis.x, yaxis.x, zaxis.x, 0,
xaxis.y, yaxis.y, zaxis.y, 0,
xaxis.z, yaxis.z, zaxis.z, 0,
0, 0, 0, 1
};
见下图: http://puu.sh/bLUSG/5228bb2176.jpg
我确定这只是一些必须交换的变量,但我找不到它们......
PS:为了测试目的,对象矩阵的位置在稍后阶段成倍增加......
答案 0 :(得分:2)
我找到了问题的答案,事实证明我只需改变矩阵内部值的顺序如下:
Matrix16 pm = {
xaxis.x, xaxis.y, xaxis.z, 0,
yaxis.x, yaxis.y, yaxis.z, 0,
zaxis.x, zaxis.y, zaxis.z, 0,
0, 0, 0, 1
};
答案 1 :(得分:1)
相机矩阵是表示其坐标系的变换矩阵的逆矩阵
ViewMatrix=inverse(M1)*ProjectionMatrix;