【发布时间】:2024-12-08 01:35:01
【问题描述】:
我想创建一个公式来旋转我的对象 (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:对象矩阵的位置在后期相乘,用于测试目的...
【问题讨论】:
-
世界是否有一个向下而不是向上的正 y 轴,在这种情况下,objectUpVector 将为 {0.0, -1.0, 0.0 }
-
this没有回答这个问题吗?
-
@Merlin069 如果我这样做,茶壶会倒置,但会朝所需方向旋转。
-
@Surt 这个答案适用于视图矩阵,据我所知,它是倒置的......我不希望它被倒置。
标签: c++ math matrix 3d rotation