所以,我正在OpenGL中做一个8球池游戏,这些球让我感到困扰。它们移动得很好,但目前沿桌子滑动。我似乎无法弄清楚沿三个轴的旋转,因为它们似乎在旋转后会发生变化。 我只知道当前位置(curPos)和下一个位置(nextPos)。
velocityAng += (nextPos - curPos) / sphereRadius;
//and afterward I rotate on each axis
modelMatrix = glm::rotate(modelMatrix, velocityAng[2], glm::vec3(0, 0, 1));
modelMatrix = glm::rotate(modelMatrix, velocityAng[1], glm::vec3(0, 1, 0));
modelMatrix = glm::rotate(modelMatrix, velocityAng[0], glm::vec3(1, 0, 0));
我发现,如果球处于初始位置,并且我以向上或正确的角度射击,则可以很好地进行射击,但是当我正确射击并旋转90度后,当我射击时,球的射击效果不佳不再。显然,以不同于0、90、180、270的任何角度进行拍摄都是完全错误的。 旋转时,球的轴似乎发生了变化。
答案 0 :(得分:1)
旋转太多,只需要旋转一次即可。该旋转的轴应垂直于(nextPos-curPos)向量,即您需要这样的(未测试):
const float angle = ( nextPos – curPos ).length() / sphereRadius;
// Assuming the table is on the XY plane
const vec3 axis = cross( nextPos - curPos, glm::vec3( 0, 0, 1 ) );
modelMatrix = rotate( modelMatrix, angle, axis );