Opengl es OpenGL ES相机自动反转(球坐标计算错误?) 我在一个天空盒子里编码一个相机,相机应该围绕一个模型旋转(模型在Skybox的中间向下(0;0;-1),虽然它将来可能会改变)

Opengl es OpenGL ES相机自动反转(球坐标计算错误?) 我在一个天空盒子里编码一个相机,相机应该围绕一个模型旋转(模型在Skybox的中间向下(0;0;-1),虽然它将来可能会改变),opengl-es,Opengl Es,我有2个角度+1个距离: float theta = m_ry; //m_ry & m_rz are variables incrementing themselves when user float phi = m_rz; //click a button to rotate the camera float dist = m_tra //m_tra is the distance from camera to the model 3个向量: glm::vec3 eye, ce

我有2个角度+1个距离:

float theta = m_ry; //m_ry & m_rz are variables incrementing themselves when user
float phi = m_rz;   //click a button to rotate the camera
float dist = m_tra  //m_tra is the distance from camera to the model
3个向量:

glm::vec3 eye, center, up;
up = glm::vec3(0.0f, 1.0f, 0.0f);
center = glm::vec3(0.0f, 0.0f, -1.0f);
以下是我设置相机坐标的方法:

eye.x = dist * cosf(theta) * cosf(phi);
eye.y = dist * cosf(theta) * sinf(phi);
eye.z = dist * sinf(theta) - 1; // -1 so the camera is in front of my model
然后我就做一个:

modelviewMatrix = glm::lookAt(eye, center, up);
glLoadMatrixf(glm::value_ptr(modelviewMatrix);
开始时旋转效果很好,但当我到达m_rz角度>π/2时,x变为负值,视图完全相反:

|======|                        |======|
|      |                        |      |
|--*   |       becomes =>       |   *--|
|      |    "--*" is my model   |      |
|______|                        |______|

你知道360°旋转在没有反转的情况下工作良好吗?

通过这些公式,你将Z轴定义为倾斜参考,方位角定义为xy平面上的一个角度。这真的是你想要的吗。在GL中,“默认”向上向量为+y轴,并且还将其定义为查找函数的Up向量,因此你可能需要考虑Y和Z坐标的切换方程。 这样,phy就是围绕物体旋转的一个角度,通过改变θ,你们的眼睛可以在物体的下方或上方移动。想象一下这样改变θ。你们在美国上方的太空中。通过增加θ到π/2,你们将改变你们朝向北极的位置。如果你超过pi/2或更多,你会发现自己在俄罗斯的某个地方。当你在美国上空时,欧洲在你的右边。现在它在你的左边。这只是物理定律:)

这就是为什么你的对象“变得相反”。这是正常的,只是不是当你在它周围移动时,而是当你穿过两极时。那么,试试这些方程。(我不确定你的是不是不好,尽管它们看起来有点相反,也许它们是好的,只是切换轴)


它不适用于你的坐标:我找到了一种解决问题的方法,将上方向向量设置为(0;0;1)而不是(0;1;0)Hmm,这应该与切换那些方程相同。很高兴你找到了解决办法,你。
eye.x = dist * sin(theta) * cosf(phi);
eye.y = dist * cosf(theta) - 1;
eye.z = dist * sinf(theta) * cosf(phi);