Opengl 3D中旋转角度的方向?

Opengl 3D中旋转角度的方向?,opengl,math,3d,vector-graphics,Opengl,Math,3d,Vector Graphics,假设我有一个小鸡模型,我想不断地看向观众(摄像机位置),或者更容易地看向原点(0,0,0)。 如何计算每个轴的角度,以便可以使用它们旋转对象 编辑: 对不起,我的问题太笼统了。不过,我仍在努力解决这个问题。 假设三维模型的位置是模型空间中的(x,y,z),我希望模型“看”向原点。 我的第一个想法是开始绕x轴旋转(垂直旋转): 把黄色圆看作Y平面。 所以我尝试了下面的代码,它根本不会旋转模型 glm::vec3 camPos = camera.GetPosition(); float value

假设我有一个小鸡模型,我想不断地看向观众(摄像机位置),或者更容易地看向原点(0,0,0)。 如何计算每个轴的角度,以便可以使用它们旋转对象

编辑:

对不起,我的问题太笼统了。不过,我仍在努力解决这个问题。 假设三维模型的位置是模型空间中的(x,y,z),我希望模型“看”向原点。 我的第一个想法是开始绕x轴旋转(垂直旋转): 把黄色圆看作Y平面。

所以我尝试了下面的代码,它根本不会旋转模型

glm::vec3 camPos = camera.GetPosition();
float value = camPos.y / glm::sqrt(glm::pow(camPos.x,2.0f) + glm::pow(camPos.y, 2.0f) + glm::pow(camPos.z, 2.0f));
float angle = glm::asin(value);
cow.SetModelMatrix(glm::translate(camPos - glm::vec3(0,0,1.5)) * //then translate so the cow will appear a little bit infront of the camera
                   glm::rotate(glm::radians(angle), glm::vec3(-1,0,0)) *//then rotate vertically by the angle
                   glm::scale(glm::vec3(0.1, 0.1, 0.1)) //first scale, cause the cow (i mean chicken) is too big
                   ); 
相机从位置(0,0,5)开始,朝向负z轴。
我做错了什么?

如果鸡在原点
c=(0,0,0)
并且相机在
r=(x,y,z)
并且地面在
y=0
。然后,您需要的是一系列旋转,以使鸡的局部
x
轴指向相机

首先在平面上确定
x
轴的方向,旋转角度为
φ=-ATAN(z/x)
的垂直
y
轴,然后旋转角度为
ψ=ATAN(y/√(x^2+z^2))

这将创建一个3×3旋转矩阵
E=ROT_Y(φ)*ROT_Z(ψ)

其中
d=√(x^2+y^2+z^2)
。您可以看到局部
x
轴(E的第一列)指向
(x,y,z)
。此外,局部
z
轴在垂直方向上没有组件,因此它始终位于地平面上


但这取决于实现,比如如果需要保持鸡肉
y
垂直(而不是将
z
保持在地平面),则需要一组不同的旋转和角度。因此,要完整回答问题,您需要提供更多信息。

您没有提供足够的信息来回答问题。请给出示例值,以及您用于方向的旋转顺序。我不确定您确切描述的是什么,但我感觉它被称为。这是因为您旋转的是牛,而不是鸡。尽量不要在一个语句中完成所有操作。这使得我们很难看到中间步骤,也很难理解到底发生了什么。鸡的初始方向是什么?是否要将局部x、y或z轴与朝向原点的直线对齐?这个信息仍然没有完全回答。我编辑了我的问题,你能回答吗?你的案子不是我要找的
    | x/d  -x*y/(d*√(x^2+z^2)) -z/√(x^2+z^2) |
E = | y/d    √(x^2+z^2)/d            0       |
    | z/d  -y*z/(d*√(x^2+z^2))  x/√(x^2+z^2) |