私はニュートンクレードルをモデル化しています。現在、フレームに接続されている代わりに中心を中心に回転するので、ワイヤ/文字列の回転に問題があります。 「回転ポイントへの翻訳、回転、逆翻訳」とは別にオンライン上の情報はほとんどないようですが、これはうまくいかないようです。OpenGLの特定の点を中心に回転するオブジェクト
std::stack<glm::mat4>model;
model.push(glm::mat4(1.0f));
model.top() = glm::translate(model.top(), glm::vec3(x, y, z));
model.top() = glm::rotate(model.top(), vx, glm::vec3(1, 0, 0)); //rotating in clockwise direction around x-axis
model.top() = glm::rotate(model.top(), vy, glm::vec3(0, 1, 0)); //rotating in clockwise direction around y-axis
model.top() = glm::rotate(model.top(), vz, glm::vec3(0, 0, 1)); //rotating in clockwise direction around z-axis
model.top() = glm::scale(model.top(), glm::vec3(scale/40, scale*5, scale/40));//scale equally in all axis
model.top() = glm::translate(model.top(), glm::vec3(-x, -y, -z));
glUniformMatrix4fv(modelID, 1, GL_FALSE, &model.top()[0][0]);
glm::mat3 normalmatrix = glm::transpose(glm::inverse(glm::mat3(View * model.top())));
glUniformMatrix3fv(normalmatrixID, 1, GL_FALSE, &normalmatrix[0][0])
これは翻訳と回転のビット、または現在の繰り返しです。実際にはスタックは現時点では何もしません。 私の問題が分かりにくい場合は、アナログ時計アームを想像してください。アームの中心ではなく、時計の中心を中心に回転します。私はOpenGlの特定のポイントの周りにオブジェクトを回転させるネイティブ実装がないことを知っています