Как заставить объект вращаться в локальном пространстве, а затем перевести его в мировое пространство с помощью Raylib?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как заставить объект вращаться в локальном пространстве, а затем перевести его в мировое пространство с помощью Raylib?

Сообщение Anonymous »


Изображение

Я пытаюсь чтобы заставить резиновую утку двигаться по поверхности круглого «мира» - я должен иметь возможность вращать утку вокруг ее локальной оси Y, а затем перемещать ее вперед, чтобы утка следовала за поверхностью мира.
По сути, это управление танком для утки на поверхности сферы.
Я могу вращать утку вокруг оси Y, когда она находится вверху или внизу мира, а затем толкать ее вперед по вложенной оси X.
Проблема в том, что, когда утка находится вдали от полюсов, нажатие влево и вправо приводит к тому, что утка вращается вокруг мира, а не поворачивается вокруг своей локальной оси Y. (а затем двигаться вперед (вокруг земного шара) относительно утка).
В настоящее время я пытаюсь применить поворот к утке, прежде чем переводить ее с помощью изображенного кода, но, похоже, мое нежелательное поведение не изменилось... =/
BeginMode3D(camera);

DrawModel(world, worldPos, 1.0f, WHITE); // Draw world

rlPushMatrix(); // DUCK MATRIX Y

rlRotatef(duckOrbitRotationY, 0.0f, 1.0f, 0.0f);
// rlTranslatef(0.0f, 1.0f, 0.0f); // Swapped the order of the rotation, then translate

// rlPopMatrix();

rlPushMatrix(); // DUCK MATRIX X

rlRotatef(duckOrbitRotationX, 1.0f, 0.0f, 0.0f);

rlPushMatrix(); // DUCK MATRIX Z

rlTranslatef(0.0f, 1.0f, 0.0f);
//rlRotatef(duckOrbitRotationY, 0.0f, 1.0f, 0.0f);

// rlRotatef(duckOrbitRotationZ, 0.0f, 0.0f, 1.0f);

DrawModel(model, duckPos, 1.0f, WHITE); // Draw duck

rlPopMatrix();

rlPopMatrix();

rlPopMatrix(); // END DUCK MATRIX


Подробнее здесь: https://stackoverflow.com/questions/793 ... pace-using
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»