У меня есть столешница, которая может вращаться вокруг оси OX и OZ, и шар на этой столешнице. Мне нужно, чтобы мяч двигался вокруг самолета в соответствии с его наклоном. Мяч не должен иметь ускорения (скорость постоянна при определенном наклоне).
Здесь - это то, как я хочу, чтобы мяч двигался.
Сферная сетка создается следующим образом:
{
glm::mat4 modelMatrix = glm::mat4(1);
modelMatrix = glm::translate(modelMatrix, glm::vec3(speedOX, speedOY + 0.5f, speedOZ));
RenderSimpleMesh(meshes["sphere"], shaders["ShaderLab8"], modelMatrix, glm::vec3(0, 1, 1));
}
Где speedOX speedOY speedOZ
- перевод vec3 для сферы.
Плоская сетка создается следующим образом
{
glm::mat4 modelMatrix = glm::mat4(1);
modelMatrix = glm::translate(modelMatrix, glm::vec3(0, 0.01f, 0));
modelMatrix = glm::rotate(modelMatrix, RADIANS(anglePlaneOX), glm::vec3(1, 0, 0));
modelMatrix = glm::rotate(modelMatrix, RADIANS(anglePlaneOY), glm::vec3(0, 1, 0));
modelMatrix = glm::rotate(modelMatrix, RADIANS(anglePlaneOZ), glm::vec3(0, 0, 1));
modelMatrix = glm::scale(modelMatrix, glm::vec3(0.125f));
RenderSimpleMesh(meshes["plane"], shaders["ShaderLab8"], modelMatrix, glm::vec3(0.5, 0.5, 0.5));
}
Самолет движется, нажимая клавиши WASD.
if (window->KeyHold(GLFW_KEY_W) && (anglePlaneOX > -90.0f)) {
anglePlaneOX -= deltaTime * DELTA_SLOPE;
/*update speedOX speedOY speedOZ */
}
if (window->KeyHold(GLFW_KEY_S) && (anglePlaneOX < 90.0f)) {
anglePlaneOX += deltaTime * DELTA_SLOPE;
/*update speedOX speedOY speedOZ */
}
if (window->KeyHold(GLFW_KEY_D) && (anglePlaneOZ > -90.0f)) {
anglePlaneOZ -= deltaTime * DELTA_SLOPE;
/*update speedOX speedOY speedOZ */
}
if (window->KeyHold(GLFW_KEY_A) && (anglePlaneOZ < 90.0f)) {
anglePlaneOZ += deltaTime * DELTA_SLOPE;
/*update speedOX speedOY speedOZ */
}
Я не мог найти математику за перемещением мяча в соответствии с наклоном самолета.
Примечание: мяч не вращается сам по себе, так как я не делаю никаких сумасшедших теней над мячом. Я просто хочу, чтобы он двигался (переводился) в движущейся плоскости. Также кажется, что шар немного «тонет» в плоскости, как показано на рисунке.