gpt4 book ai didi

c++ - 球体旋转 OpenGL

转载 作者:行者123 更新时间:2023-11-30 04:54:29 25 4
gpt4 key购买 nike

所以,我正在使用 OpenGL 进行 8 球台球比赛,球让我很困扰。它们移动得很好,但它们目前沿着 table 滑动。我似乎无法弄清楚沿三个轴的旋转,因为它们似乎在旋转后会发生变化。我只知道当前位置 (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 的角度拍摄都是完全错误的。当我旋转它时,球的轴似乎发生了变化。

最佳答案

你旋转太多了,你只需要单次旋转。该旋转轴应垂直于 (nextPos - curPos) vector ,即您需要这样的东西(未经测试):

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 );

关于c++ - 球体旋转 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53574224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com