OpenGl在Y轴上旋转对象以查看其他对象

OpenGl在Y轴上旋转对象以查看其他对象,opengl,math,rotation,glsl,angle,Opengl,Math,Rotation,Glsl,Angle,就像在一个主题中,我得到了两个物体,一个我在移动(在z轴和x轴上),另一个是静态的,但应该围绕y轴旋转,以始终像看另一个一样。。。我已经为此奋斗了一周 我现在得到的是 从1对象到2对象的向量以及2对象的实际外观(也是向量) 我正在计算这两个向量之间的夹角,并把它加到2物体的旋转,但它不能正常工作 你知道怎么做吗?顺便说一句,我正在使用欧拉天使变换 伪代码: vectorFrom1to2 = vector1 - vector2; lookatVectorof2ndObject; 我将两者正常化,

就像在一个主题中,我得到了两个物体,一个我在移动(在z轴和x轴上),另一个是静态的,但应该围绕y轴旋转,以始终像看另一个一样。。。我已经为此奋斗了一周

我现在得到的是

从1对象到2对象的向量以及2对象的实际外观(也是向量) 我正在计算这两个向量之间的夹角,并把它加到2物体的旋转,但它不能正常工作

你知道怎么做吗?顺便说一句,我正在使用欧拉天使变换

伪代码:

vectorFrom1to2 = vector1 - vector2;
lookatVectorof2ndObject;
我将两者正常化,然后

float angle = acos(dot(vectorFrom1to2, lookatVectorof2ndObject));
object2.rotateY = angle;

我不知道我在哪里犯了错误,这是一条普遍的经验法则,在我观察到的许多情况下都证明了这一点:一旦你发现自己从向量计算角度,你很可能正在以一种不必要的复杂方式做一些事情

您所需要的只是一个基础变换,它变换第一个对象的局部坐标系,使其局部Z轴指向第二个对象。您可以通过一个简单的旋转矩阵来实现这一点(前提是您有一个矩阵/向量库,可以更轻松地实现这一点)

因此,假设对象1的位置为
p1
,对象2的位置为
p2
,并且希望
p1
p2
方向旋转,则旋转矩阵可以如下获得:

(我只是在这里使用GLSL伪语法)


vec3 p1=…//谢谢你!这比我试着这么做要好得多!成功了!
vec3 p1 = ... // <- position of first object
vec3 p2 = ... // <- position of second object
vec3 d = normalize(p2 - p1)
vec3 r = cross(vec3(0.0, 1.0, 0.0), d)
       = vec3(d.z, 0, -d.x)
mat3 m = mat3(d.z, 0, -d.x, // <- first column ('right' vector)
              0, 1, 0,      // <- second column (keep Y)
              d.x, 0, d.z)  // <- third column (map Z to point towards p2)